Análisis del código fuente de PX4 Proceso de inicio de 5_PX4
Después del encendido, la entrada del programa es la función __start en Firmware/NuttX/nuttx/arch/arm/src/stm32/stm32_start.c, que es responsable de la inicialización subyacente del chip stm32. incluyendo reloj, GPIO, etc.
La función __start llama a la función os_start en Firmware/NuttX/nuttx/sched/os_start.c, que es responsable de la inicialización subyacente del sistema operativo, incluidas las colas. y estructuras de procesos.
La función os_start llama a la función os_bringup en Firmware/NuttX/nuttx/sched/os_bringup.c, que es responsable del inicio del proceso básico del sistema operativo y el inicio del proceso de usuario. La entrada de inicio del usuario se especifica mediante la definición de macro CONFIG_USER_ENTRYPOINT.
Las entradas de inicio de FMU e IO son diferentes, respectivamente:
(1) La macro CONFIG_USER_ENTRYPOINT en FMU se define como nsh_main:
[1] Llame a la función nsh_main.
[2] La función nsh_main llama a la función nsh_consolemain en Firmware/NuttX/apps/nshlib/nsh_consolemain.c.
[3] La función nsh_consolemain llama a la función nsh_initscript.
[4] El script ejecutado por la función nsh_initscript es el script de inicio de FMU rcS.
[5] El script rcS es responsable de montar la tarjeta SD, iniciar uorb, cargar el archivo de configuración de parámetros, iniciar la gestión de datos del dataman, iniciar cada sensor, comandante, ejecutar rc.io y ejecutar rc. interfaz (dispositivo de control mixto), ejecutar rc.mc_app (algoritmo de posición y actitud de control de vuelo), etc.
(2) La macro CONFIG_USER_ENTRYPOINT en IO se define como user_main:
Llame a la función user_start en src/modules/px4iofirmware/px4io.c, que es responsable de la inicialización del Entorno básico IO, incluido PWM, el puerto serie, ADC, etc. finalmente ingresan a un bucle infinito para la entrada de control remoto y la comunicación con la FMU.