NuttX

news/2024/10/18 12:24:15/

(嵌入式 实时操作系统 rtos nuttx 7.1 stm32 源代码分析)

NuttX 启动流程

转载请注明出处:http://blog.csdn.net/zhumaill/article/details/23261543


[ruby] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. __start--                                 #处理器执行的第一条指令  
  2.         |  
  3.         v  
  4.    stm32_clockconfig()------              #初始化时钟  
  5.                            |  
  6.                            v  
  7.                  rcc_reset()              #复位rcc  
  8.                  stm32_stdclockconfig()   #初始化标准时钟  
  9.                  rcc_enableperipherals()  #使能外设时钟  
  10.                            |  
  11.         --------------------  
  12.         |  
  13.         v  
  14.    stm32_fpuconfig()                      #配置fpu,shenzhou/nsh未调用  
  15.    stm32_lowsetup()                       #基本初始化串口,之后可以使用up_lowputc()  
  16.    stm32_gpioinit()                       #初始化gpio,只是调用stm32_gpioremap()设置重映射  
  17.    up_earlyserialinit()                   #初始化串口,之后可以使用up_putc()  
  18.    stm32_boardinitialize()--              #板级初始化  
  19.                            |  
  20.                            v  
  21.                  stm32_spiinitialize()    #初始化spi,只是调用stm32_configgpio()设置gpio  
  22.                  stm32_usbinitialize()    #初始化usb,只是调用stm32_configgpio()设置gpio  
  23.                  board_led_initialize()   #初始化led,只是调用stm32_configgpio()设置gpio  
  24.                            |  
  25.         --------------------  
  26.         |  
  27.         v  
  28.    os_start()---------------              #初始化操作系统  
  29.                            |  
  30.                            v  
  31.                  dq_init()                #初始化各种状态的任务列表(置为null)  
  32.                  g_pidhash[i]=            #初始化唯一可以确定的元素--进程ID  
  33.                  g_pidhash[PIDHASH(0)]=   #分配空闲任务的进程ID为0  
  34.                  g_idletcb=               #初始化空闲任务的任务控制块  
  35.                  sem_initialize()--       #初始化信号量  
  36.                                   |  
  37.                                   v  
  38.                        dq_init()          #将信号量队列置为null  
  39.                        sem_initholders()  #初始化持有者结构以支持优先级继承,shenzhou/nsh未调用  
  40.                                   |  
  41.                            --------  
  42.                            |  
  43.                            v  
  44.                  up_allocate_heap()       #分配用户模式的堆(设置堆的起点和大小)  
  45.                  kumm_initialize()        #初始化用户模式的堆  
  46.                  up_allocate_kheap()      #分配内核模式的堆,shenzhou/nsh未调用  
  47.                  kmm_initialize()         #初始化内核模式的堆,shenzhou/nsh未调用  
  48.                  task_initialize()        #初始化任务数据结构,shenzhou/nsh未调用  
  49.                  irq_initialize()         #将所有中断向量都指向同一个异常中断处理程序  
  50.                  wd_initialize()          #初始化看门狗数据结构  
  51.                  clock_initialize()       #初始化rtc  
  52.                  timer_initialize()       #配置POSIX定时器  
  53.                  sig_initialize()         #初始化信号  
  54.                  mq_initialize()          #初始化命名消息队列  
  55.                  pthread_initialize()     #初始化线程特定的数据,空函数  
  56.                  fs_initialize()---       #初始化文件系统  
  57.                                   |  
  58.                                   v  
  59.                        sem_init()         #初始化节点信号量为1  
  60.                        files_initialize() #初始化文件数组,空函数  
  61.                                   |  
  62.                            --------  
  63.                            |  
  64.                            v  
  65.                  net_initialize()--       #初始化网络  
  66.                                   |  
  67.                                   v  
  68.                        uip_initialize()   #初始化uIP层  
  69.                        net_initroute()    #初始化路由表,shenzhou/nsh未调用  
  70.                        netdev_seminit()   #初始化网络设备信号量  
  71.                        arptimer_init()    #初始化ARP定时器  
  72.                                   |  
  73.                            --------  
  74.                            |  
  75.                            v  
  76.                  up_initialize()---       #处理器特定的初始化  
  77.                                   |  
  78.                                   v  
  79.                        up_calibratedelay()#校准定时器  
  80.                        up_addregion()     #增加额外的内存段  
  81.                        up_irqinitialize() #设置中断优先级,关联硬件异常处理函数  
  82.                        up_pminitialize()  #初始化电源管理,shenzhou/nsh未调用  
  83.                        up_dmainitialize() #初始化DMA,shenzhou/nsh未调用  
  84.                        up_timerinit()     #初始化定时器中断  
  85.                        devnull_register() #注册/dev/null  
  86.                        devzero_register() #注册/dev/zero,shenzhou/nsh未调用  
  87.                        up_serialinit()    #注册串口控制台/dev/console和串口/dev/ttyS0  
  88.                        up_rnginitialize() #初始化并注册随机数生成器,shenzhou/nsh未调用  
  89.                        up_netinitialize() #初始化网络,是arch/arm/src/chip/stm32_eth.c中的  
  90.                        up_usbinitialize() #初始化usb驱动,shenzhou/nsh未调用  
  91.                        board_led_on()     #打开中断使能led,但很快会被其它地方的led操作改变状态  
  92.                                   |  
  93.                            --------  
  94.                            |  
  95.                            v  
  96.                  lib_initialize()         #初始化c库,空函数  
  97.                  group_allocate()         #分配空闲组  
  98.                  group_setupidlefiles()   #在空闲任务上创建stdout、stderr、stdin  
  99.                  group_initialize()       #完全初始化空闲组  
  100.                  os_bringup()------       #创建初始任务  
  101.                                   |  
  102.                                   v  
  103.                        KEKERNEL_THREAD()  #启动内核工作者线程  
  104.                        board_initialize() #最后一刻的板级初始化,shenzhou/nsh未调用  
  105.                        TASK_CREATE()      #启动默认应用程序  
  106.                                   |  
  107.                            --------  
  108.                            |  
  109.                            v  
  110.                  for up_idle()            #空闲任务循环  
  111.                            |  
  112.         --------------------  
  113.         |  
  114.         v  
  115.    for(;;)                                #不应该到达这里  
__start--                                 #处理器执行的第一条指令|vstm32_clockconfig()------              #初始化时钟|vrcc_reset()              #复位rccstm32_stdclockconfig()   #初始化标准时钟rcc_enableperipherals()  #使能外设时钟|--------------------|vstm32_fpuconfig()                      #配置fpu,shenzhou/nsh未调用stm32_lowsetup()                       #基本初始化串口,之后可以使用up_lowputc()stm32_gpioinit()                       #初始化gpio,只是调用stm32_gpioremap()设置重映射up_earlyserialinit()                   #初始化串口,之后可以使用up_putc()stm32_boardinitialize()--              #板级初始化|vstm32_spiinitialize()    #初始化spi,只是调用stm32_configgpio()设置gpiostm32_usbinitialize()    #初始化usb,只是调用stm32_configgpio()设置gpioboard_led_initialize()   #初始化led,只是调用stm32_configgpio()设置gpio|--------------------|vos_start()---------------              #初始化操作系统|vdq_init()                #初始化各种状态的任务列表(置为null)g_pidhash[i]=            #初始化唯一可以确定的元素--进程IDg_pidhash[PIDHASH(0)]=   #分配空闲任务的进程ID为0g_idletcb=               #初始化空闲任务的任务控制块sem_initialize()--       #初始化信号量|vdq_init()          #将信号量队列置为nullsem_initholders()  #初始化持有者结构以支持优先级继承,shenzhou/nsh未调用|--------|vup_allocate_heap()       #分配用户模式的堆(设置堆的起点和大小)kumm_initialize()        #初始化用户模式的堆up_allocate_kheap()      #分配内核模式的堆,shenzhou/nsh未调用kmm_initialize()         #初始化内核模式的堆,shenzhou/nsh未调用task_initialize()        #初始化任务数据结构,shenzhou/nsh未调用irq_initialize()         #将所有中断向量都指向同一个异常中断处理程序wd_initialize()          #初始化看门狗数据结构clock_initialize()       #初始化rtctimer_initialize()       #配置POSIX定时器sig_initialize()         #初始化信号mq_initialize()          #初始化命名消息队列pthread_initialize()     #初始化线程特定的数据,空函数fs_initialize()---       #初始化文件系统|vsem_init()         #初始化节点信号量为1files_initialize() #初始化文件数组,空函数|--------|vnet_initialize()--       #初始化网络|vuip_initialize()   #初始化uIP层net_initroute()    #初始化路由表,shenzhou/nsh未调用netdev_seminit()   #初始化网络设备信号量arptimer_init()    #初始化ARP定时器|--------|vup_initialize()---       #处理器特定的初始化|vup_calibratedelay()#校准定时器up_addregion()     #增加额外的内存段up_irqinitialize() #设置中断优先级,关联硬件异常处理函数up_pminitialize()  #初始化电源管理,shenzhou/nsh未调用up_dmainitialize() #初始化DMA,shenzhou/nsh未调用up_timerinit()     #初始化定时器中断devnull_register() #注册/dev/nulldevzero_register() #注册/dev/zero,shenzhou/nsh未调用up_serialinit()    #注册串口控制台/dev/console和串口/dev/ttyS0up_rnginitialize() #初始化并注册随机数生成器,shenzhou/nsh未调用up_netinitialize() #初始化网络,是arch/arm/src/chip/stm32_eth.c中的up_usbinitialize() #初始化usb驱动,shenzhou/nsh未调用board_led_on()     #打开中断使能led,但很快会被其它地方的led操作改变状态|--------|vlib_initialize()         #初始化c库,空函数group_allocate()         #分配空闲组group_setupidlefiles()   #在空闲任务上创建stdout、stderr、stdingroup_initialize()       #完全初始化空闲组os_bringup()------       #创建初始任务|vKEKERNEL_THREAD()  #启动内核工作者线程board_initialize() #最后一刻的板级初始化,shenzhou/nsh未调用TASK_CREATE()      #启动默认应用程序|--------|vfor up_idle()            #空闲任务循环|--------------------|vfor(;;)                                #不应该到达这里




http://www.ppmy.cn/news/360662.html

相关文章

计算机ntc是什么功能,ntc是什么?

你的位置:首页 > 知识课堂 > 正文 ntc是什么? 发布时间:1970-01-01 ntc是什么? NTC是一种金属氧化膜电阻器,NTC为负温度系数(Negative temperature coefficient)简称NTC 有一种负温度系数热敏电阻为NTC热敏电阻。 什么是NTC热敏电阻: 热敏电阻器(thermistor)--型号…

【ironic】ironic / neutron / nova 配置文件

1. ironic 配置文件 [DEFAULT] enabled_network_interfacesnoop,flat,neutron default_network_interfaceneutron auth_strategykeystone enabled_driverspxe_ipmitool debugTrue [agent] deploy_logs_collectalways [amt] [api] host_ip$ip port16385 [cimc] [cisco_ucs] [co…

便携烙铁开源系统IronOS,支持多款便携DC, QC, PD供电烙铁,支持所有智能烙铁标准功能

今天在PINE64官网刷消息看到他们推出了便携烙铁二代产品Pinecil V2,就简单浏览了下,竟然有惊喜。 早期他们家推出的便携烙铁是基于GD32设计,本次升级到二代产品,改成国产博流的BL706,特色就是支持低功耗蓝牙&#xff…

NB-IoT技术实战开发 ----- NB-IoT介绍

一.1------初识NB-IoT 1、NB-IoT介绍2、 物联网技术发展2.1有线物联网2.2 无线网络网 3、为什么需要NB-IOT4、NB-IOT优势5、NB-IOT解决方案亮点和价值5.1 广覆盖5.2 低功耗5.3低成本5.4 大连接 6、NB-IOT的应用1.智能抄表2.智能停车3.宠物跟踪4.else 1、NB-IoT介绍 NB-----Na…

Neutron — SR-IOV Agent

目录 文章目录 目录Neutron OvS 网络模型的性能瓶颈Neutron SR-IOV 网络模型Neutron 配置启用 SR-IOV Agent创建 SR-IOV 类型虚拟网络SR-IOV 与 NUMA 亲和SR-IOV 与 VLAN TagSR-IOV 与安全组SR-IOV Bounding配置BondingNeutron OvS 网络模型的性能瓶颈 Neutron OvS 网络模型会…

NTP

NTP(Network Time Protocol) 网络时间协议 NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度…

NORMINV

NORMINV是返回指定平均值和标准偏差的正态累积分布函数的反函数 计算公式为NORMINV(probability,mean,standard_dev)&#xff0c;其中 Probability&#xff1a;正态分布的概率值&#xff1b;0<probability<1&#xff1b; Mean&#xff1a; 分布的算术平均值 Standard_dev…

关于neon

这个学期的任务在开学的时候就已经定了下来.和老师聊过关于自己的想法,老师也表示了自己的想法,后来发现老师想的还是比我周到点.导师的意思是让我继续搞我的ARM板子,一直觉得搞这个没有搞PC机来的好.因为现在的板子的硬件已经提高了很多,可以说比以前的pc机都要强悍很多,在上面…