uCOS-III阅读,第一天,也就瞎看看
来源:互联网 发布:dj舞曲视频软件 编辑:程序博客网 时间:2024/05/21 10:39
写在前面的注释
- 本文是作者自己阅读uCOS的笔记,刚刚开始,逻辑混乱,以后可能会修改,不过以我的性格,难!!!
传到晚上只是想借用网络资源储存,谢谢
网上搞的
材料
- 下载了stm32f103的固件库
- 寻找一个stm32f107的ucos III的移植好的例子1.2x版本的
移植
- 移植方面因为抄的是别人的例子,所以比较简单。主要是构建一个自己习惯的文件夹目录。
初探Main函数
Main函数中的主要函数
int main(void){ BSP_IntDisAll(); OSInit(&err); CPU_Init(); BSP_Init(); OS_CPU_SysTickInit(cnts); OSTaskCreate(……); OSStart(&err);}
Main函数中做的几件事儿
a. BSP_IntDisAll(),屏蔽MCU的中断
b. OSInit(&err),从字面上理解是初始化OS相关的东西,猜猜看应该是一些全局变量、标志之类;等以后慢慢看。
c. CPU_Init(),这个东西暂时看不出是啥,过
d. BSP_Init(),这是一个板级的初始化工作,设置一些MCU的外设等
e. OS_CPU_SysTickInit();设置MCU的滴答计时器,向系统提供工作计时。
f. OSTaskCreate();创建APP任务。
g. OSStart(&err),开始系统运行。
简单的瞅一眼
BSP_IntDisAll()
- 函数调用路线:
BSP_IntDisAll() ->CPU_IntDis() ->CPU_IntDis【Cpu_a.asm中的标号】:执行伪指令 CPSID I 来屏蔽所有中断信号
OSInit(&err)
对OS系统的全局变量进行初始化,并创建中断消息队列分发任务,uCos中优先级最高的任务
+ OSInitHook()
实际的工作是设定CPU的异常中断堆栈:
OS_CPU_ExceptStkBase = (CPU_STK *)(OSCfg_ISRStkBasePtr + OSCfg_ISRStkSize - 1u);
当OS_CFG_ISR_STK_SIZE > 0 时有效,具体值可以根据CPU的中断处理需求调整;典型值128U。
OS_CFG_ISR_STK_SIZE 在 Os_cfg_app.h中配置
+ OSIntNestingCtr
记录CPU的当前中断嵌套的层数,os,清零了。
+ OSRunning
OS运行状态的标志位,此时OS没有开始运行,初始化为OS_STATE_OS_STOPPED。
+ OSSchedLockNestingCtr
任务调度器的锁,大于0时,调度器锁定
+ 接下来清除调度器锁定时间计数和选择是否采用循环调度算法(?)
+ 清空异常处理堆栈
+ 清除app的hook函数指针,hook函数是用来在正常OS过程中插入用户方法的一种办法(?)
+ OS_PrioInit()
清零任务优先级表OSPrioTbl[OS_PRIO_TBL_SIZE],该表中的每一个位代表一个优先级,该表是表示优先级下有无任务就绪的位图(?)。
+ OS_RdyListInit()
OS 会根据任务优先级的数目(OS_CFG_PRIO_MAX)为每一个优先级建立一个就绪任务链表,此处将链表初始化为空链表。
+ OS_TaskInit()
清空OSTaskQty OS任务计数和OSTaskCtxSwCtr OS上下文切换计数
+ OS_IntQTaskInit()
初始化中断队列处理任务,从数据结构讲,中断队列是一个环状单向链表,元素个数由OS_CFG_INT_Q_SIZE > 2定义,作用是创建中断消息队列处理任务
通过OS_CFG_ISR_POST_DEFERRED_EN来选择消息队列延迟发布功能
- OS_IdleTaskInit(*p_err)
空闲任务,服务函数OS_IdleTask。
- OS_TickTaskInit(*p_err)
滴答时钟任务,包含一个延时任务列表,服务函数OS_TickTask。 - OS_StatTaskInit(*p_err)
CPU使用状态统计任务,服务函数OS_StatTask。 - OS_FlagInit(*p_err)
清空Flag计数 - OS_MemInit(*p_err)
清空Memory 计数 - OS_MsgPoolInit(*p_err)
创建消息池,设定初始地址,和数量 - OS_MutexInit(*p_err)
清零互斥信号量 - OS_QInit(*p_err)
清空队列计数 - OS_SemInit(*p_err)
清空信号量个数 - OS_TmrInit(*p_err)
创建OS计时任务,该计时是由滴答计时器分频得到,滴答计时器的典型值是1000Hz,OS计时器的典型值为10Hz;初始化时钟队列(一个指向延时链表的指针链表,节点的数量应为质数,默认17;服务函数:OS_TmrTask(),优先级OS_CFG_PRIO_MAX-2u)。 - OS_Dbg_Init()
- OSCfg_Init()
上面两个函数只是确保调试变量都被使用一次,来禁止编译器报错的。
- uCOS-III阅读,第一天,也就瞎看看
- 第一天阅读源码
- struts2源码阅读第一天
- stm32 uCOS-III移植
- UCOS III 基础知识点
- uCOS-III学习笔记
- uCOS-III 基础
- UCOS III任务切换
- ucos-iii知识点总结
- uCOS-III学习笔记
- uCOS III 和 uCOS II的区别
- windows核心编程阅读笔记(第一天)
- 阅读源码第一天——Collection
- ucos iii学习笔记——为什么选择ucos iii
- ucos iii学习笔记——为什么选择ucos iii
- ucos-iii学习之ucos-iii的特性
- 【源码阅读】Apache Commons DbUtils 阅读第一天
- uCOS-III任务延时全过程
- 正则表达式
- js立即执行函数
- A. Jumping Ball
- Java的第一月
- linux如何禁ping和允许ping设置方法
- uCOS-III阅读,第一天,也就瞎看看
- Grumpy: Go 运行 Python
- iOS学习笔记-031.数据的读取——沙盒模型
- 利用类的成员函数重载双目运算符其最多只有一个参数
- OS_Init
- LeetCode 453. Minimum Moves to Equal Array Elements
- socket API通俗理解
- Easyui Tree父子节点取消关联
- 切换CSS3实现隐藏与显示效果