2009-11-25 10 views
5

tengo una junta incrustado con un micro-controlador 32, y un sistema operativo construido a medida,alta velocidad de rastreo

  • Desafortunadamente, a partir de ahora, la conexión al PC es sólo a través del puerto serie ,
  • La memoria interna está limitada a 512 KB.
  • Hay al-menos 10 tareas en el sistema

cuestión,

  • Quiero capturar la secuencia en cuales cambio de tarea pasa,
  • Y cuando trato de escribir en la RAM , se desborda ~~
  • Y cuando intento enviarlo a través del puerto serial , el comportamiento del sistema cambios (como el puerto serie es lento)

No hay almacenamiento persistente como NAND FLASH, o algo así.

  • ¿Pueden pensar en alguna Idea?

Si no hay manera de puerto serie,

  • pueden ustedes recomendar alguna otra interfaz o de puerto serie.

Respuesta

5

Probablemente desee determinar por qué su RAM se desborda al iniciar sesión, no necesita mucho registro si solo registra lo que necesita ver. Puede iniciar sesión en un búfer circular para evitar el desbordamiento. Con el registro Ram, probablemente puedas ejecutarlo a una velocidad cercana a la real. El registro en un enlace de comunicaciones agregó latencia, interrupciones y cambios de tareas al sistema.

No registrar todo desde el principio. Registre solo lo suficiente como para entender cuándo ocurre su problema. Una vez que sepa cuándo ocurre su problema, registre más detalles tan pronto como se ingrese la sección del problema.

Si realmente quiere resolver el problema en un momento, obtenga un Green Hills Trace pod. Su hardware debe estar diseñado para permitir que el Pod esté conectado y es terriblemente caro. Sin embargo, los resultados son increíbles ...

1

Primero calcule cuántos interruptores de tareas tendrá y compárelos con la velocidad de su serie. Tal vez simplemente no es posible impulsar esta cantidad de datos? Consideran que

  • USB - hasta 480 Mb/s
  • RS485 - debe darle de 100 Kb/s a ​​35 Mb/s
  • I2C - da alrededor de 100 Kb/s

Si de serie es suficiente, que tal vez ir con caché? Primero escribe en la memoria y es una tarea separada para obtener datos de la memoria en bloques enviados a la serie. Busque cosas como circular buffering para evitar el bloqueo.

2

No sé qué plataforma que está utilizando, pero ...

La ARM: s tienen un bloque llamado ETM, que resuelve su problema. Y con un depurador hardcore desde Lauterbach puede usar ese bloque.

La desventaja es que el costo es alto, aproximadamente lo mismo que un pequeño coche nuevo :)

Y no sé si su hardware tiene un bloque ETM ...

1

¿Necesita Comportamiento en tiempo real cuando se ejecutan los rastros? Quiero decir, ¿es una opción para iniciar sesión en la RAM hasta que el búfer esté (casi) lleno, luego ingrese una sección crítica que evite que la aplicación conmute tareas y se interrumpa el servicio y el búfer sobre la línea serie. Esto bloqueará el funcionamiento de la aplicación por un tiempo, pero dependiendo de la prueba que esté ejecutando, puede ser aceptable. Cualquier rastreo en tiempo real a través de una serie, USB, ... influirá en el comportamiento de la aplicación, por lo que no es seguro que lo que está midiendo sea relevante.

Otra cosa que puede hacer (si no lo hace ya) es hacer que el registro lo más pequeño posible, por ejemplo: 1 byte por cambio de tarea con el nibble más significativo el ID de tarea de la antigua tarea y el menos significativo mordisquear el ID de tarea de la nueva tarea. De esta forma, debería poder cubrir una gran cantidad de interruptores de tareas en sus 512 KB de memoria.

5

Si puede utilizar un puerto de salida de los microcontroladores sin molestar a otros equipos demasiado se puede producir el número de tarea actual y capturarlo con un analizador lógico.

+0

Personalmente, creo que usar un analizador lógico para depurar el software es una pérdida de tiempo, pero lo he hecho algunas veces ... cuando me quedo sin opciones. – Gerhard

+1

Me gusta que sea inmediato y perturbe el tiempo muy poco. No es el método de elección para errores lógicos complejos, pero para manejar los problemas de sincronización es genial. – starblue

3

Un poco más liviano que el ARM ETM resaltado por Johan, el MIPI System Trace Protocol ha sido diseñado para este tipo de actividad de rastreo. Está diseñado para rastreo de instrumentación, y las implementaciones típicas ofrecen alrededor de 500 Mbit/s de ancho de banda de traza en un puerto de cuatro bits.

Sin embargo, es poco probable que su placa tiene soporte para el mismo. :-(Además, es necesario un receptor de seguimiento, que de nuevo puede costar el precio de un coche pequeño (Lauterbach tiene uno).

3
  • Y cuando trato de escribir en la memoria RAM, que se desborda ~~

¿Qué estás iniciando sesión y qué tan grande un amortiguador qué permites? Sin saber cómo ha implementado este es difícil aconsejar, pero es probable que haya mucho que podría hacer para optimizar el registro en memoria.

Si en cada cambio de contexto, registra ID de tarea y tim Sello electrónico (digamos 3 bytes por evento) debe obtener 341 cambios de contexto por Kbyte. En muchos sistemas eso sería un período significativo, y recuerde que es solo por 1K de memoria intermedia. Si está registrando interrupciones también puede ser más costoso, como lo sería registrar todas las llamadas al sistema en lugar de solo los cambios de contexto. Quizás podría implementar un filtro en el registro, por lo que solo registrará tareas o eventos de interés. También puede implementar desencadenantes de eventos para que los datos registrados se descarguen automáticamente a su puerto serie cuando ocurre un evento de este tipo (y cuando se produce el evento de interés, por lo que el acto de transmisión no es intrusivo para su investigación). También debe implementar el búfer como un búfer circular para que, en lugar de desbordar, los datos más antiguos simplemente se descarten para dejar espacio para el nuevo, de modo que cuando ocurra un evento de activación, tenga toda la información del evento antes de que se desborde.

2

¿Tiene acceso a cualquier gpio o puntos de prueba?Dependiendo de la cantidad de tareas que realmente está cambiando, quizás pueda establecer un gpio para cada interruptor de tarea y observar con un osciloscopio o analizador lógico. Será suficiente para comprender la conmutación básica y el rendimiento de las tareas problemáticas, y será más económico que un depurador (al menos el costo de las piezas y la mano de obra si tiene acceso y sabe cómo programar las gpio). Esto puede ser información suficiente para solucionar el problema

+0

+1 Una buena idea para una plataforma específica. Pero puede darme una solución genérica que podamos generalizar a través de plataformas de hardware. – Alphaneo

+0

@Alphaneo - Estoy de acuerdo con que el GPIO es algo específico para una plataforma en particular. Sin embargo, muchos microcontroladores/microprocesador, si no la mayoría, serán GPIO. Puede abstraer con una interfaz genérica GPIO y aislar el acceso específico hw a un archivo por plataforma. – simon

2

cuando trato de enviarlo a pesar de puerto serie, los cambios en el comportamiento del sistema (como el puerto serie es lenta)

Eso hace que suene como si estuviera haciendo escrituras en el puerto serie de bloqueo (mis disculpas si mi suposición es incorrecta).

El puerto serie puede ser lento, pero si usa TX basada en interrupciones, debería tener un impacto menor en su sistema. Es decir, escriba sus datos en un búfer circular, y luego tenga una rutina de interrupción TX serial para tomar los bytes del búfer y transmitirlos en segundo plano.

En 57.600 bps, 8-N-1, puede transmitir hasta 5,760 bytes por segundo. Si el conmutador de tareas genera una marca de tiempo de 2 bytes más una ID de tarea de 1 byte, puede rastrear hasta 1.900 conmutadores de tareas por segundo. Pero es posible que desee enmarcarlo, p. utilizando COBS, lo que significaría 5 bytes por registro, por lo que puede rastrear hasta 1.100 interruptores de tareas por segundo.

+0

Gracias por la respuesta. Tengo la sensación de que solo enviaremos datos a través del puerto sin realizar ningún otro trabajo. ¿Esta mal?. Por cierto, los interruptores de tareas son mucho, mucho más rápidos y del orden de Micro segundos :-( – Alphaneo

+0

Lo siento, no entiendo muy bien tu pregunta. –

+0

¿Estás diciendo que tienes algo así como 100,000 interruptores de tareas por segundo? –

Cuestiones relacionadas