¿Cómo pueden mejorarse los programas integrados de depuración de ulink?
Métodos y precauciones de depuración de sistemas integrados
El proceso de desarrollo de sistemas integrados es en realidad un proceso de depuración y diagnóstico, y la depuración y el diagnóstico siempre acompañarán a un producto durante toda su vida, incluso si Es que los productos más maduros ocasionalmente tendrán problemas de un tipo u otro, que requieren que los desarrolladores los diagnostiquen y solucionen.
La depuración de sistemas integrados incluye la depuración de hardware, la depuración de software y la depuración integral. La depuración de hardware generalmente se refiere a la inspección antes y después de encender el sistema cuando se desarrolla por primera vez, que incluye:
1) Antes de encenderlo, verifique si la fuente de alimentación y la tierra están en cortocircuito e inspeccione visualmente si hay uniones de soldadura falsas o faltantes
p>
2) Después de encender, verifique si la frecuencia, la forma de onda y la amplitud de la línea del reloj son normales, si cada voltaje de la fuente de alimentación es estable; y normal, si la temperatura de cada chip es normal y si cada luz indicadora es normal.
La depuración de software generalmente se refiere a verificar si el momento de ejecución del programa es correcto, si la lógica y los resultados son consistentes con los requisitos de diseño y si se pueden cumplir los requisitos funcionales y de rendimiento mientras se garantiza que todo en el El hardware es normal. Existen muchos métodos para la depuración de software, que incluyen: 1) Usar luces indicadoras para rastrear la depuración; 2) Usar la impresión del puerto serie para la depuración
3) Usar un depurador simple para la depuración a nivel de código ensamblador; un depurador de gama relativamente alta realiza la depuración a nivel de código fuente 5) Utilice el emulador para realizar la simulación de hardware;
La depuración de hardware o depuración de software simple mencionada anteriormente es relativamente simple. Lo difícil es la depuración integral. A continuación, primero citaré algunos problemas difíciles que encontré en mi trabajo y luego resumiré algunos métodos y precauciones generales de depuración.
Ejemplo 1: La depuración de nuestra plataforma de motor de red PPC860 (Motorola) de diseño y producción propia está a punto de completarse. Las cuatro placas producidas en el mismo lote pasaron todas las pruebas de software, por lo que fuimos a soldarlas. Segundo lote, pero en el segundo lote de placas, el FEC de una placa no funcionó correctamente. Varios de nuestros ingenieros de software y hardware utilizaron varios métodos y volvieron a leer el manual del chip muchas veces, pero aún no pudieron encontrar el motivo. así que devolvimos la placa. La fábrica volvió a soldar el BGA, pero el problema aún persistía. No tuve más remedio que tratar esta placa como una muestra y soldar todos los chips en la placa. Según el sentido común, este enfoque es muy lógico, porque los componentes son todos iguales y las placas también están en el mismo lote. Entonces puede ser que en algún lugar de esta placa no esté bien soldado, pero no es fácil de comprobar. Volver a soldar puede dañar la placa base. Más tarde, alguien usó una lupa para ver los caracteres en el chip PPC860 (se dice que el chip procesador de alta gama nacional de primera generación de mi país, "Hanxin", era un "científico" que pulió estas letras en el mismo tipo de chip que "Motocicleta"). ¡Estaba grabado con "Hanxin No. 1" y se convirtió en uno nuevo!) Descubrí que el número de versión de CPU de esta placa es "D4", mientras que el número de versión de CPU de otras placas es "D3". ", pero no existe tal cosa en el manual del chip. Para comparar las dos versiones, encontré el manual de erratas del PPC860 en Internet y descubrí que en la versión PPC860TZP50D4, se agregó un bit (bit2) llamado FEC_PIN_MUX al registro ECNTRL. para controlar la función de multiplexación de cada pin FEC. Si desea utilizar FEC, este bit debe establecerse en 1, por lo que la línea de instrucción ECNTRL |= 0x00000004 debe agregarse al programa relacionado con FEC.
Ejemplo 2: Cuando depuré la placa MC68VZ328 casera de aficionados, no hubo ningún problema con la verificación del hardware de la placa de circuito. Cuando usé Code Warrior para grabar el programa uClinux compilado en la memoria flash a través del puerto serie, todo. Era normal, pero lo encendí nuevamente, descubrí que no había datos en el puerto serie y lo verifiqué con un multímetro (no tenía un osciloscopio u otro "equipo avanzado" en ese momento) pero no pude. encontrar el resultado Luego puse esta tabla en mi bolso todos los días cuando iba y venía del trabajo, y cuando no tenía nada que hacer, la saqué y la miré con los ojos bien abiertos. No pude evitar enojarme cuando lo vi, pero un día descubrí que un condensador estaba soldado en un lugar marcado con un símbolo de resistencia. Cuando llegué a casa, reemplacé la resistencia y luego lo encendí. El puerto serie inmediatamente imprimió el inicio. información de uClinux Jaja, esa sensación es peor que el sabor dulce de la miel incluso después de beberla. Por supuesto, fue porque no tenía mucha experiencia en ese momento. Si este problema surgiera ahora, probablemente se resolvería dentro. un día. Además, al depurar la placa de desarrollo S3C4510 de fabricación propia por primera vez, no se pudieron emitir caracteres desde el puerto serie. Me tomó medio día descubrir que la polaridad del condensador en el pin 6 del puerto serie estaba convertida. El chip max3232cse se invirtió. --China Embedded Academy--
Ejemplo 3: Al depurar la placa base del servidor integrado SB1250, debido a que se utilizan módulos de memoria de generación DDR1, hay bastantes condensadores y resistencias de desacoplamiento conectados en serie y paralelo en la placa base. líneas de datos y líneas de reloj, casi ninguna de las placas del primer lote soldadas puede ingresar con éxito a la interfaz del menú CFE (BIOS). La verificación de la forma de onda del reloj y la fuente de alimentación es muy buena en comparación con la placa DEMO prestada. Ranura DDR DIM en la placa base. Todas las resistencias y condensadores se volvieron a estañar con un soldador Jaja, realmente funciona. Este método ha sido probado y también es muy útil para depurar los buses PCI y HT. Puede deberse a que el sistema SB1250 es un circuito de alta frecuencia y no es adecuado para soldar. Los requisitos son relativamente altos, incluso una pequeña falta de soldadura o una soldadura débil no es suficiente, o eso creo.
Ejemplo 4: en un sistema de aplicación que utiliza el chip de reloj en tiempo real SD2000, a menudo sucede que el tiempo de lectura se restablece al "1 de enero de 2000". Utilicé un programa de prueba escrito por mí mismo. En muchas pruebas, se descubrió que la lectura y escritura continuas de acuerdo con el tiempo en el manual del chip SD2000 causarán reinicios con frecuencia. Parece que el chip considera erróneamente el tiempo de lectura y escritura como el tiempo de operación de reinicio, y debe ocurrir cada vez. Entonces siento que el chip en sí debe tener un error, así que le dije a mi colega que podría haber un problema con el chip en sí y le pedí que se comunicara con el fabricante. Sin embargo, porque este chip se ha utilizado en productos antiguos durante un tiempo. Durante mucho tiempo, mi colega no estuvo de acuerdo con mi opinión, pero aun así se puso en contacto con el fabricante del SD2000. Después de contactarnos, el fabricante nos informó después de dos días de pruebas intensivas que "el SD2000 en sí tiene un error y es posible que el chip se reinicie". al 1 de enero de 2000 por interferencia." --China Embedded Academy--
Ejemplo 5: en la plataforma de desarrollo de audio y video diseñada con el procesador PNX1700 (DSP), CVBS a menudo genera imágenes en blanco y negro (deben ser en color) o el color es anormal , Así que primero leí en detalle el manual del chip de salida CVBS AVS3169 y luego usé un osciloscopio para medir el pin de reloj del chip 3169. Durante el proceso de medición, el color a menudo volvía a la normalidad. Descubrió que este fenómeno se debía al cambio de campo. Es causado por el cortocircuito entre la señal VSYNC síncrona y la línea de datos adyacente Data7. Después de realizar más pruebas, se descubrió que había un cortocircuito entre VSYNC y otros datos. Las líneas (Datos [0:6]) pueden volver a la normalidad y luego usar la señal de reloj de video CLK y los datos. A veces se puede restaurar a la normalidad acortando la línea, pero a veces no se puede restaurar, por lo que se sospecha que hay un problema con la señal de sincronización del campo de vídeo.
Siguiendo esta pista, verifiqué el método de conexión entre la señal VSYNC de AVS3169 y PNX1700. Descubrí que cuando se usa la salida CVBS, el pin del PNX1700 conectado a la señal VSYNC de AVS3169 emite la señal QVCP_VSYNC. Configuración del modo de salida VO, y luego verifique la configuración de QVCP para ver qué registro puede controlar la señal QVCP_SYNC. Se encuentra que el registro QVCP_CONTROL (0x10e020) tiene control sobre HSYNC y VSYNC. Utilicé comandos para modificar los valores de 4 bits. En el registro directamente relacionado en línea, pero no tuvo ningún efecto, y luego busqué la palabra clave VSYNC en todo el manual del chip PNX1700 y descubrí que hay una descripción de los requisitos de configuración de QVCP VSYNC en la página 398: bit1 (Maestro) de. Se requiere que este registro esté configurado en 1, es decir, modo esclavo, y ahora lo estamos configurando en 0. Es decir, el modo principal. Después de cambiar este bit a 1, la pantalla apareció en negro sin ninguna visualización. Restauré este bit a 0 y aparecieron los colores. Probado y probado, estudié cuidadosamente el bit1 y el bit0 de este registro para controlar el modo de trabajo del generador de reloj de pantalla (STG) respectivamente (maestro/esclavo) y el análisis sugiere que antes. Al inicializar QVCP después de encender el sistema, primero configure el STG de QVCP en modo esclavo y reinicie el STG, y luego use el programa de inicialización original. Esto debería resolver el problema de que el reloj de la señal de video y los datos no estén sincronizados, así que antes. Al inicializar QVCP en el programa principal, agregue la línea MMIO (0x10e020) = 0x20050006. El problema anterior ya no ocurre en la prueba y el problema está resuelto y para extenderlo, se usó SAA7105 para CVBS. Ocasionalmente ocurre una visualización anormal en la parte superior de la pantalla durante la salida, lo cual debería ser el mismo que este problema, así que use el mismo método anterior para modificar el programa y realizar pruebas intensivas en la salida CVBS SAA7105 (reinicie cada 8 segundos, pruebas intensivas). durante 3 días), los resultados No hay más visualización anormal; --China Embedded Academy--
Ejemplo 6: El mismo problema encontrado en la plataforma de desarrollo de audio y video PNX1700 El menú OSD temblará durante. Salida VGA. Lo primero que me viene a la mente es que el método es usar QVCP en lugar de MBS como escalador del OSD. Esto reducirá la fluctuación del OSD en el 1500, que es casi inexistente. el 1700 todavía es muy pobre y la fluctuación sigue siendo muy severa. Más tarde, arreglé que mis colegas aumentaran la frecuencia de trabajo de 1500 relojes DDR de 166 MHz a 200 MHz y le dijeran qué registros de qué módulo debían cambiarse. En este momento, VGA se usa para la salida de video (generalmente, CVBS se usa para la salida de video, pero debido a que en este momento estoy rastreando el problema de fluctuación de OSD en VGA, usé el modo de salida VGA) para ajustar la frecuencia de operación de DDR. Mis colegas estaban modificando el registro DDR, descubrí por qué el OSD no vibraba. Estudié cuidadosamente las definiciones de los bits relevantes del registro que se modificaron al mismo tiempo. Descubrí que hay dos registros en el módulo DDR relacionados. Uno es ARB_HRT_WINDOW (0x65184, ventana de arbitraje de hardware de DDR en tiempo real) y el otro es ARB_CPU_WINDOW (0x65188, ventana de CPU de arbitraje de DDR). Configure estos dos registros en ARB_HRT_WINDOW = 0xffff y ARB_CPU_WINDOW = 0x0. porque en esta configuración, la propiedad de DMA de DDR es mayor que la propiedad de DDR de la CPU. DDR puede apoderarse de la CPU. La configuración original permite que la CPU tome DDR y ocupe el DMA. De hecho, cuando descubrí por primera vez el problema de fluctuación de OSD en VGA, también busqué configuraciones de registro relacionadas con la memoria, porque según la experiencia previa y el pensamiento habitual, el registro de configuración DDR solo es responsable de la parte DDR y el registro entre memoria. y la CPU debe estar en el registro del sistema, por lo que no se busca en el registro de configuración DDR, pero en este ejemplo está en el registro de configuración DDR.
--China Embedded Academy-- De los ejemplos anteriores, podemos resumir los siguientes métodos de depuración y precauciones:
1) Método de comprensión más profunda: la comprensión más profunda incluye la comprensión más profunda del hardware y el software. Para el hardware, principalmente debe leer en detalle el manual de datos del chip correspondiente y profundizar la comprensión del software, porque no es necesario que todos los programas los escriba usted mismo al desarrollar sistemas integrados. Muchos de ellos ya se han realizado y se pueden realizar. se pueden obtener directamente de Internet o Sin embargo, estos software no están necesariamente dirigidos completamente a nuestros propios tableros de destino, por lo que a menudo se encuentran algunos problemas durante el uso, especialmente el software subyacente. Una vez que ocurre un problema, los desarrolladores primero deben comprender el código en el que se encuentra. ocurrió el problema. Sólo basándonos en una comprensión profunda del hardware y software relevantes podremos emitir juicios más realistas y resolver mejor los problemas.
2) Método de comparación: existen muchos métodos de comparación, como colocar el mismo software en dos plataformas de hardware similares pero diferentes para ejecutar el fenómeno de comparación, colocar dos versiones diferentes de software en el mismo fenómeno de ejecución; comparación en plataformas de hardware; el fenómeno de ejecutar el mismo software en dos plataformas de hardware diferentes del mismo lote. Para algunos problemas que no están muy ocultos, el método de comparación suele dar buenos resultados.
3) Método de descomposición: cuando se encuentra con un problema que es más complejo de analizar y puede tener muchos factores, puede dividir el problema en varios problemas pequeños para prueba y diagnóstico, como escribir varios programas de prueba pequeños separados. Realice investigaciones y pruebas de varios factores posibles y luego emita juicios científicos basados en los resultados de estas pruebas.
4) Método de combinación de software y hardware: este método requiere cierta inspiración y comprensión. Por ejemplo, en el ejemplo 5 anterior, durante el proceso de prueba, puede cambiar temporalmente el estado del hardware sin dañarlo (por ejemplo, cortocircuitando la línea de datos y la línea de reloj en este ejemplo) para ver si el problema cambia. En caso afirmativo, llevamos a cabo muchos experimentos similares para descubrir los patrones cambiantes y los factores clave, y luego analizarlos y resolverlos. En el desarrollo del software subyacente, se debe prestar especial atención a la programación del software de los módulos de hardware con estrictos requisitos de sincronización. Una vez que hay un problema con la sincronización del programa y esta parte del software se ha integrado con otro software del sistema. entonces no es apropiado que otros revisen este software. Es difícil encontrar el problema.
5) El diagnóstico y la resolución de problemas deben basarse en una gran cantidad de experimentos y deben ser prácticos. No podemos simplemente hacer suposiciones y no estar dispuestos a practicar, sino también llamarlo eufemísticamente "buenos para pensar y analizar". ". El desarrollo de sistemas integrados es una ciencia altamente práctica, que requiere resumir las leyes objetivas de las cosas en la práctica, para comprenderlas y utilizarlas mejor, y hacer que funcionen mejor de acuerdo con nuestras intenciones.
6) El desarrollo y la depuración de sistemas integrados requiere que los desarrolladores tengan una actitud de trabajo rigurosa y meticulosa y nunca dejen de lado ninguna pista encontrada durante el proceso de depuración, porque puede ser la clave para abrir la caja de Pandora.
7) Debemos tener un estilo de trabajo realista y tener el espíritu y el coraje de dudar de todo. Debemos respetar la autoridad y los logros científicos y tecnológicos de nuestros predecesores, pero cuando surgen conflictos, debemos creer en lo experimental. resultados.
8) Sé lo suficientemente valiente como para desafiarte a ti mismo, dejar de lado tus pensamientos y prejuicios habituales, ampliar tu pensamiento y analizar los problemas desde múltiples ángulos.
9) El desarrollo de sistemas integrados, especialmente el desarrollo del software subyacente y del kernel del sistema operativo, es un trabajo relativamente difícil y desafiante porque requiere trabajar con software y hardware al mismo tiempo.
Incluso si hacemos todo muy bien y pensamos con mucho cuidado, el sistema objetivo todavía puede jugarnos algunas pequeñas malas pasadas. A menudo nos encontramos con un problema muy pequeño que nos molesta durante días o incluso semanas. Durante este período, es posible que no podamos solucionarlo. Piensa en la comida y la bebida y es posible que no puedas dormir por la noche. Por lo tanto, los desarrolladores de software subyacente para sistemas integrados no solo deben tener una mente tranquila, sino también cierta paciencia y perseverancia, así como coraje y coraje. confianza para superar todas las dificultades! Mientras hagamos un trabajo suficientemente bueno, el proceso de resolver un problema específico puede implicar alguna posibilidad, ¡pero eventualmente eliminaremos todos los obstáculos! --China Embedded Academy--
Por lo tanto, el proceso de depuración del sistema integrado es un proceso para obtener una comprensión más profunda de nuestro sistema objetivo y las características de cada módulo unitario en el sistema. ejercitar nuestro pensamiento lógico y la capacidad de analizar y razonar. Es un proceso de desarrollar ideas y desafiar el pensamiento y la autoridad habituales. Es un proceso de cultivar una actitud de trabajo rigurosa y meticulosa y un estilo de trabajo realista. ejercitar nuestra resistencia y perseverancia, en última instancia, es un proceso de aprendizaje. ¡El proceso de progreso!
¡La mejora de las capacidades de diagnóstico y depuración del sistema integrado es un proceso a largo plazo de práctica, acumulación y mejora!