Nuttx启动过程

来源:互联网 发布:淘宝多久自动好评 编辑:程序博客网 时间:2024/05/22 21:13
__start--                                 #处理器执行的第一条指令          |          v     stm32_clockconfig()------              #初始化时钟                             |                             v                   rcc_reset()              #复位rcc                   stm32_stdclockconfig()   #初始化标准时钟                   rcc_enableperipherals()  #使能外设时钟                             |          --------------------          |          v     stm32_fpuconfig()                      #配置fpu,shenzhou/nsh未调用     stm32_lowsetup()                       #基本初始化串口,之后可以使用up_lowputc()     stm32_gpioinit()                       #初始化gpio,只是调用stm32_gpioremap()设置重映射     up_earlyserialinit()                   #初始化串口,之后可以使用up_putc()     stm32_boardinitialize()--              #板级初始化                             |                             v                   stm32_spiinitialize()    #初始化spi,只是调用stm32_configgpio()设置gpio                   stm32_usbinitialize()    #初始化usb,只是调用stm32_configgpio()设置gpio                   board_led_initialize()   #初始化led,只是调用stm32_configgpio()设置gpio                             |          --------------------          |          v     os_start()---------------              #初始化操作系统                             |                             v                   dq_init()                #初始化各种状态的任务列表(置为null)                   g_pidhash[i]=            #初始化唯一可以确定的元素--进程ID                   g_pidhash[PIDHASH(0)]=   #分配空闲任务的进程ID为0                   g_idletcb=               #初始化空闲任务的任务控制块                   sem_initialize()--       #初始化信号量                                    |                                    v                         dq_init()          #将信号量队列置为null                         sem_initholders()  #初始化持有者结构以支持优先级继承,shenzhou/nsh未调用                                    |                             --------                             |                             v                   up_allocate_heap()       #分配用户模式的堆(设置堆的起点和大小)                   kumm_initialize()        #初始化用户模式的堆                   up_allocate_kheap()      #分配内核模式的堆,shenzhou/nsh未调用                   kmm_initialize()         #初始化内核模式的堆,shenzhou/nsh未调用                   task_initialize()        #初始化任务数据结构,shenzhou/nsh未调用                   irq_initialize()         #将所有中断向量都指向同一个异常中断处理程序                   wd_initialize()          #初始化看门狗数据结构                   clock_initialize()       #初始化rtc                   timer_initialize()       #配置POSIX定时器                   sig_initialize()         #初始化信号                   mq_initialize()          #初始化命名消息队列                   pthread_initialize()     #初始化线程特定的数据,空函数                   fs_initialize()---       #初始化文件系统                                    |                                    v                         sem_init()         #初始化节点信号量为1                         files_initialize() #初始化文件数组,空函数                                    |                             --------                             |                             v                   net_initialize()--       #初始化网络                                    |                                    v                         uip_initialize()   #初始化uIP层                         net_initroute()    #初始化路由表,shenzhou/nsh未调用                         netdev_seminit()   #初始化网络设备信号量                         arptimer_init()    #初始化ARP定时器                                    |                             --------                             |                             v                   up_initialize()---       #处理器特定的初始化                                    |                                    v                         up_calibratedelay()#校准定时器                         up_addregion()     #增加额外的内存段                         up_irqinitialize() #设置中断优先级,关联硬件异常处理函数                         up_pminitialize()  #初始化电源管理,shenzhou/nsh未调用                         up_dmainitialize() #初始化DMA,shenzhou/nsh未调用                         up_timerinit()     #初始化定时器中断                         devnull_register() #注册/dev/null                         devzero_register() #注册/dev/zero,shenzhou/nsh未调用                         up_serialinit()    #注册串口控制台/dev/console和串口/dev/ttyS0                         up_rnginitialize() #初始化并注册随机数生成器,shenzhou/nsh未调用                         up_netinitialize() #初始化网络,是arch/arm/src/chip/stm32_eth.c中的                         up_usbinitialize() #初始化usb驱动,shenzhou/nsh未调用                         board_led_on()     #打开中断使能led,但很快会被其它地方的led操作改变状态                                    |                             --------                             |                             v                   lib_initialize()         #初始化c库,空函数                   group_allocate()         #分配空闲组                   group_setupidlefiles()   #在空闲任务上创建stdout、stderr、stdin                   group_initialize()       #完全初始化空闲组                   os_bringup()------       #创建初始任务                                    |                                    v                         KEKERNEL_THREAD()  #启动内核工作者线程                         board_initialize() #最后一刻的板级初始化,shenzhou/nsh未调用                         TASK_CREATE()      #启动默认应用程序                                    |                             --------                             |                             v                   for up_idle()            #空闲任务循环                             |          --------------------          |          v     for(;;)                                #不应该到达这里  

原创粉丝点击