Nuttx启动过程

2023-05-16

__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(;;)                                #不应该到达这里  




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nuttx启动过程 的相关文章

随机推荐

  • make: warning: Clock skew detected. Your build may be incomplete.

    问题现象 xff1a make warning Clock skew detected Your build may be incomplete 问题分析 xff1a 根据报警提示 xff0c 应该问题出现时钟问题 问题原因 xff1a 当
  • 关于Java之IO流音乐拼接小项目

    需求 xff1a 做一个音乐串烧 分析 xff1a 1 有n个音乐 xff0c 找到高潮部分 xff0c 2 获取高潮部分的流对象 3 把这部分对象保存成一个mp3 4 把它们拼接起来 以下为源码供大家分享 xff1a 方法一 xff1a
  • pixhawk源码下载与编译

    今天和同学在一起讨论发现自己还在看的pixhawk源码的版本好低啊 xff0c 就下个最新的吧 想起有些人还不会下载源码 xff0c 以及用什么工具查看 源码的下载我用的是git shell工具下的 xff0c px4的github网址是h
  • pixhawk开发环境

    Windows 7 64bit 软件安装 首先 xff0c 需要安装一些软件 xff0c CMake 32位的Java jdk以及PX4 Toolchain Installer CMake的话笔者使用的是CMake 3 3 2 win32
  • Pixhawk-信息流浅解析

    根深方能叶茂 在等待的日子里 xff0c 刻苦读书 xff0c 谦卑做人 xff0c 养得深根 xff0c 日后才能枝叶茂盛 Better 根爷 之前我们已经谈到系统框架 xff0c 之前谈到了定制自己功能的两部 xff1a 添加模块和修改
  • Python跨进程共享数据/对象

    1 跨进程共享方式 在multiprocess库中 xff0c 跨进程对象共享有三种方式 xff1a xff08 1 xff09 第一种仅适用于原生机器类型 xff0c 即python ctypes当中的类型 xff0c 这种在mp库的文档
  • Pixhawk-姿态解算-互补滤波

    根深方能叶茂 在等待的日子里 xff0c 刻苦读书 xff0c 谦卑做人 xff0c 养得深根 xff0c 日后才能枝叶茂盛 Better 根爷 终于说到了正题 xff0c 姿态解算这一部分很重要 xff0c 主要的基础就是惯性导航和多传感
  • Pixhawk-姿态解算源码注释

    根深方能叶茂 在等待的日子里 xff0c 刻苦读书 xff0c 谦卑做人 xff0c 养得深根 xff0c 日后才能枝叶茂盛 Better 根爷 这一部分是我在看源码时 xff0c 自己注释的一点笔记 xff0c 现在直接贴上来 当然这其中
  • Pixhawk-串级pid介绍

    根深方能叶茂 在等待的日子里 xff0c 刻苦读书 xff0c 谦卑做人 xff0c 养得深根 xff0c 日后才能枝叶茂盛 Better 根爷 鉴于串级PID在pixhawk系统中的重要性 xff0c 无论是误差的补偿 xff0c 如姿态
  • pixhawk串口读取传感器数据

    1 Pixhawk板上串口说明 xff1a 测试 使用Pixhawk板上TELEM2接口的USART2 xff0c 对应的Nuttx UART设备文件尾 dev ttyS2 xff1a 2 读取数据测试 步骤 xff1a 在Firmware
  • Android调用系统自带的文件管理器进行文件选择

    这几天在做的项目网盘 上传时需要用到调用系统自带的文件管理器来选择文件 xff0c 后来就在考虑怎么调用 xff0c 网上也搜了很久 xff0c 没有很好的解决方法 xff0c 后来在一瞬间发现了一篇不错的文章 xff0c 借鉴了一下代码
  • Android下如何读取文件的内容

    唉 xff0c 尝试了好半天了 xff0c 才弄懂 xff0c 1 首先权限的问题 我们需要在根文件中添加权限 lt uses permission android name 61 34 android permission WRITE E
  • Mavlink地面站编写之二–Mission PLanner地面站构架分析之MAVLINK航点读写

    转载请注明出处 http www amovauto com 阿木社区 玩也要玩的专业 xff01 3DR这个地面站还是非常专业的 xff0c 最近研究MAVLINK通信协议 就来分析下Mission planner的构架 至于Msissio
  • Mavlink地面站编写之三–Mission PLanner地面站构架分析之MAVLINK航点写入

    转载注意出处 xff1a http www amovauto com p 61 601 more 601 阿木社区 玩也要玩的专业 xff01 我们知道了怎么利用mavlink读取航点 xff0c 那么如果我们要写入航点 xff0c 也是一
  • Mavlink地面站编写之四-Mission Planner中ProgressReporterDialogue和读串口线程serialreaderthread的分析

    转载请注明出处 http www amovauto com p 61 660 阿木社区 xff0c 玩也要玩的专业 QQ群 526221258 ProgressReporterDialogue 这个对话框很有意思 xff0c 在MP中连接阶
  • Mavlink地面站编写之八–MAVLINK消息自定义

    PIXHAWk MAVLINK消息自定义 对于PIXHAWK这个系统来讲 xff0c MAVLINK是个小型的数据通信协议 xff0c 负责地面站和飞控本身的数据交互和地面站向飞控发送数据指令 前面的文章已经讲过MAVLINK这个数据格式解
  • Python参数校验工具:validate.py

    一直都在找一个比较好用的参数校验工具包 xff08 Python xff09 xff0c 这次终于找到了就做个记录 包名 xff1a validate py 安装方式 xff1a xff08 pip已收入 当前最新版本是1 3 0 xff0
  • Mavlink-1-概述介绍

    1 MAVLink简介 MAVLink xff08 Micro Air Vehicle Link xff0c 微型空中飞行器链路通讯协议 xff09 是无人飞行器与地面站 xff08 Ground Control Station xff0c
  • PX4位置控制offboard模式说明

    offboard模式的开发及应用 一 px4固件的模式 px4固件支持10几种飞行模式 xff0c 从代码结构上分析 xff0c 分为基本模式 自定义模式和自定义子模式 1 基本模式 基本模式又分为 xff0c 位置控制模式 自稳模式 手动
  • Nuttx启动过程

    start 处理器执行的第一条指令 v stm32 clockconfig 初始化时钟 v rcc reset 复位rcc stm32 stdclockconfig 初始化标准时钟 rcc enableperipherals 使能外设时钟