- 简述:
- 上电启动,分为三个阶段
- CPU内核的初始化,ARM公司编写,所用CPU的.s文件
- 外设模块的初始化
- OS相关操作的初始化、启动、调度等等
- 上电启动,分为三个阶段
- 系统的启动
- 上电执行启动文件里面的复位函数Reset_Handler
- 复位函数中调用C库函数_main跳转到主程序
- 调用SystemInit来进行系统初始化
- 外设模块
- 初始化系统时钟
- 中断分组
- 外设:GPIO、串口...等等
- 注:这些外设的初始化一般放在BSP_Init()函数中
- OS系统启动相关操作
- 系统初始化:OSInit()函数
- 初始化操作系统相关的全局变量、链表结构
- 空闲任务的初始化
- 时钟节拍任务的初始化
- 空闲与时钟节拍这两个任务是必须存在的,否则系统无法运行
- 空闲任务:OS_TickTaskInit()
- 空闲任务的相关信息由系统默认指定,用户不能轻易修改
- 空闲任务是一个无限的死循环
- 其优先级最低,任务比它高的任务都能抢占它得到CPU的使用权
- CPU不会停止工作,当其它任务都处于阻塞中,系统才会运行空闲任务
- CPU(时间戳)初始化CPU_TS_TmrInit()
- 利用内核中的DWT中的CYCCNT(向上计数器),记录内核时钟运行的个数
- 内核时钟跳动一次,该计数器加1
- CYCCNT精度非常高,其精度取决于内核的频率
- 例如STM32F7时钟为216M,精度 = 1/216M = 4.6ns
- 主要用于测试任务执行效率
- SysTick初始化OS_CPU_SysTickInit()
- 时钟节拍的频率表示操作系统每1秒钟产生多少个tick
- tick:操作系统节拍的时钟周期,系统以固定的频率产生中断(时基中断)并且在中断中处理与时间相关的事件,推动任务向前运行
- 时钟节拍依赖于硬件定时器,Crotex-m中经常使用的SysTick时钟是MCU的内核定时器
- 默认频率为1000Hz,频率过高,增加系统负担,过低,影响任务切换
- 内存初始化Mem_Init()
- 系统采用一块连续的大数组作为系统管理的内存
- 使用前先将管理的内存进行初始化
- 启动函数OSStart()
- 创建完任务的时候,需要开启调度器,让系统开始运行
- 主函数main.c
- 参考上节
- 系统初始化:OSInit()函数
- 下载验证
- 无
- 总结
- 本节无例程,只是对uC/OS-III的启动流程分析
- 参考资料:
- 正点原子《STM32F767 UCOS开发手册》
- 野火《uC/OS-III内核应用与开发》
- 《嵌入式实时操作系统 uC/OS-III原理及应用(第二版)》
- 官方源码
- 硬件平台:
- 正点原子阿波罗F767
- 软件平台:
- MDK5.2.5
- 库版本:
- TM32Cube_FW_F7_V1.4.0
- uC/OS-III版本
- UCOSIII 3.04
【2】uC/OS-III应用开发————>启动流程(STM32F767)
最新推荐文章于 2023-02-15 16:03:13 发布