系统启动
启动文件 : nuttx/arch/arm/stm32/stm32_start.c
stm32_clockconfig(); //时钟
stm32_fpuconfig(); //fpu
stm32_lowsetup(); //低级的串口通信 显示每次启动显示的”ABCD“
stm32_gpioinit(); //仅f10系列起作用
showprogress('A'); //输出 A
for (dest = &_sbss; dest < &_ebss; )
{
*dest++ = 0;
}
showprogress('B');
//清除.bss。 B未显示 不知道为什么
for (src = &_eronly, dest = &_sdata; dest < &_edata; )
{
*dest++ = *src++;
}
showprogress('C');
//启动数据进入内存 打印 C
up_earlyserialinit();
//初始化uart驱动
stm32_boardinitialize();
//板级启动函数nuttx的时候在config/nsh/src 目录下定义 , px4在 //src/driver/board/px4fmu-v2/ 目录
os_start();
//系统启动。
系统文件 nuttx/sched/os_start.c
dq_init(&g_readytorun);
dq_init(&g_pendingtasks);
dq_init(&g_waitingforsemaphore);
#ifndef CONFIG_DISABLE_SIGNALS
dq_init(&g_waitingforsignal);
#endif
#ifndef CONFIG_DISABLE_MQUEUE
dq_init(&g_waitingformqnotfull);
dq_init(&g_waitingformqnotempty);
#endif
#ifdef CONFIG_PAGING
dq_init(&g_waitingforfill);
#endif
dq_init(&g_inactivetasks);
sq_init(&g_delayed_kufree);
#if defined(CONFIG_NUTTX_KERNEL) && defined(CONFIG_MM_KERNEL_HEAP)
sq_init(&g_delayed_kfree);
然后初始化一个g_idletcb结构 指向 os_start name=”Idle task”
dq_addfirst((FAR dq_entry_t*)&g_idletcb, (FAR dq_queue_t*)&g_readytorun);
up_initial_state(&g_idletcb.cmn);
sem_initialize();
up_allocate_heap(&heap_start, &heap_size);
kumm_initialize(heap_start, heap_size);
irq_initialize();
wd_initialize();
clock_initialize();
timer_initialize();
sig_initialize();
mq_initialize();
pthread_initialize();
fs_initialize();
up_initialize();
系统级启动文件 nuttx/arch/arm/src/common/up_initialize.c
校准时间 → 添加外部内存 → 启动irq中断子系统 → 启动DMA → 启动系统时钟中断 → 创建 /dev/null设备 → 添加uart设备 产生/dev/ttySx 文件 → 网络启动 → usb启动 → 灯
lib_initialize();
DEBUGVERIFY(group_allocate(&g_idletcb));
#ifdef HAVE_TASK_GROUP
DEBUGVERIFY(group_initialize(&g_idletcb));
g_idletcb.cmn.group->tg_flags = GROUP_FLAG_NOCLDWAIT;
#endif
DEBUGVERIFY(os_bringup());
apps/example/nsh_main.c
apps/nshlib/nsh_init.c
up_cxxinitialize();
builtin_initialize();
nsh_initialize();
nsh_romfsetc();
nsh_archinitialize();
px4 在 /src/drivers/boards/bamboo中
nsh_consolemain(0, NULL);
飞行器状态说明:
HIL:硬件环在线模拟使能。所有发动机、舵机及其他动作设备阻断,但内部软
件处于全部可操作状态。
SAFETY_ARMED:主发动机使能,怠速。准备好起飞。
MANUAL_INPUT_ENABLED:遥控输入信号使能。
STABILIZE_ENABLED:高度/位置电子增稳使能。在此状态下,飞行器仍需要外部操作指令以实现操作。
GUIDED_ENABLED:导航使能。导航数据和指令来自导航/航点指令表文件。
AUTO_ENABLED:全自主航行模式使能。系统自行决定目的地。前一项“导航使能”可以设置为0 或1 状态,这取决于具体的应用。
TEST_ENABLED:测试模式使能。本标识仅供临时的系统测试之用,不应该用于实际航行的应用中。
CUSTOM_MODE_ENABLED:留待扩展
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)