文章目录[隐藏]
一、嵌入式操作系统
uClinux/UCOS/ECOS/FREERTOS/DJYOS/VXWORK.
二、UCOS基本特征
1. 基本特征
- 实现并发:单核运行,多线程工作。
- 每一个任务都是一个死循环。任务中一般必须有延时函数,以释放CPU使用权。
- 每个任务存在五种状态:睡眠、就绪、运行、等待、中断服务。
- 可以管理255个任务。一般最低4个和最高4个由UCOS系统内部使用。所以自定义任务设置优先级范围一般为:5-251。
2. 任务的优先级:与任务是一一对应的,任务优先级可以作为任务的标识。
3. 任务堆栈:就是存储器中的存储空间,创建任务的一个重要参数。
4. 任务控制块OS_TCB:记录任务堆栈指针、任务优先级、任务状态。
5. 任务就绪表:记录所有任务是否处于就绪状态。
4. 任务调度:当一个任务释放cpu控制权后,进行一次任务调度,这个时候任务调度器首先要去任务就绪表查询优先级最高的就绪任务,查到之后,进行一次任务切换,转而去执行下一个任务。
三、UCOS任务常用函数
四. UCOS移植
1.移植UCOS源码
OSIntEnter(); | 进入中断。 |
---|---|
OSTimeTick(); | 节拍服务函数,每个时钟节拍了解任务延时状态,使延时时限到达的非挂起任务进入就绪状态。 |
OSIntExit(); | 退出中断。 |
以上三个函数应该用软件定时器循环执行。在战舰板中,在delay.c中使用了systick中断执行。 |
2. 编写任务函数、设置任务堆栈大小和优先级。
3. 初始化UCOS,创建任务。
4. 启动UCOS。
五、软件定时器
1. 参考:添加链接描述
2. 特征
-
UCOS软件定时器由UCOS时钟节拍函数OSTimeTick()提供时钟,但是软件定时器还受OS_TMR_CFG_TICKS_PRE_SEC设置的控制,也就是在UCOS的时钟节拍上再做了一次分频。所以软件定时器的最快时钟节拍就等于UCOS的系统时钟节拍,也就定义了软件定时器的精度。
-
软件定时器实现原理:UCOS节拍函数OSTimeTick()使用systick中断循环运行时,判断是否是软件定时器的节拍时刻,如果是,则发送一个信号量OSTmrSemSignal激活正在等待改信号量的OSTmrTask()任务。
-
OSTmrTask()任务:在ucos初始化的时候,系统便自动创建,其优先级,堆栈大小等任务相关的参数在os_cfg.h中定义。在OSTmr_Task()任务中等待OSTmrSemSignal信号量。并定义了一个变量OSTimTick来计时软件定时器的节拍。OSTmrSemSignal信号量一旦有效OSTimTick便加1并判断相应定时轮中定时器的定时是否到达,如果到达则调用相应的回调函数完成定时器操作。
3. 使用方法
- 定时器任务参数配置:定时任务有OSInit()在初始化时创建,其优先级,堆栈大小等于任务相关的参数在os_cfg.h中定义。用户可通过项目实际需求修改相应参数。
- 创建软件定时器:OSTmrCreate();
- 编写回调函数:typedef void(*OS_TMR_CALLBACK)(void *ptmr, void *parg);//回调函数执行期间,调度是处于被锁状态,所以回调函数越快执行越好,更不要去在回调函数中去等待事件。
- 启动软件定时器:OSTmrStart();
- 停止软件定时器:OSTmrStop();
版权声明:本文为CSDN博主「日月飞峰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/riyuefeifeng/article/details/122733149
一、嵌入式操作系统
uClinux/UCOS/ECOS/FREERTOS/DJYOS/VXWORK.
二、UCOS基本特征
1. 基本特征
- 实现并发:单核运行,多线程工作。
- 每一个任务都是一个死循环。任务中一般必须有延时函数,以释放CPU使用权。
- 每个任务存在五种状态:睡眠、就绪、运行、等待、中断服务。
- 可以管理255个任务。一般最低4个和最高4个由UCOS系统内部使用。所以自定义任务设置优先级范围一般为:5-251。
2. 任务的优先级:与任务是一一对应的,任务优先级可以作为任务的标识。
3. 任务堆栈:就是存储器中的存储空间,创建任务的一个重要参数。
4. 任务控制块OS_TCB:记录任务堆栈指针、任务优先级、任务状态。
5. 任务就绪表:记录所有任务是否处于就绪状态。
4. 任务调度:当一个任务释放cpu控制权后,进行一次任务调度,这个时候任务调度器首先要去任务就绪表查询优先级最高的就绪任务,查到之后,进行一次任务切换,转而去执行下一个任务。
三、UCOS任务常用函数
四. UCOS移植
1.移植UCOS源码
OSIntEnter(); | 进入中断。 |
---|---|
OSTimeTick(); | 节拍服务函数,每个时钟节拍了解任务延时状态,使延时时限到达的非挂起任务进入就绪状态。 |
OSIntExit(); | 退出中断。 |
以上三个函数应该用软件定时器循环执行。在战舰板中,在delay.c中使用了systick中断执行。 |
2. 编写任务函数、设置任务堆栈大小和优先级。
3. 初始化UCOS,创建任务。
4. 启动UCOS。
五、软件定时器
1. 参考:添加链接描述
2. 特征
-
UCOS软件定时器由UCOS时钟节拍函数OSTimeTick()提供时钟,但是软件定时器还受OS_TMR_CFG_TICKS_PRE_SEC设置的控制,也就是在UCOS的时钟节拍上再做了一次分频。所以软件定时器的最快时钟节拍就等于UCOS的系统时钟节拍,也就定义了软件定时器的精度。
-
软件定时器实现原理:UCOS节拍函数OSTimeTick()使用systick中断循环运行时,判断是否是软件定时器的节拍时刻,如果是,则发送一个信号量OSTmrSemSignal激活正在等待改信号量的OSTmrTask()任务。
-
OSTmrTask()任务:在ucos初始化的时候,系统便自动创建,其优先级,堆栈大小等任务相关的参数在os_cfg.h中定义。在OSTmr_Task()任务中等待OSTmrSemSignal信号量。并定义了一个变量OSTimTick来计时软件定时器的节拍。OSTmrSemSignal信号量一旦有效OSTimTick便加1并判断相应定时轮中定时器的定时是否到达,如果到达则调用相应的回调函数完成定时器操作。
3. 使用方法
- 定时器任务参数配置:定时任务有OSInit()在初始化时创建,其优先级,堆栈大小等于任务相关的参数在os_cfg.h中定义。用户可通过项目实际需求修改相应参数。
- 创建软件定时器:OSTmrCreate();
- 编写回调函数:typedef void(*OS_TMR_CALLBACK)(void *ptmr, void *parg);//回调函数执行期间,调度是处于被锁状态,所以回调函数越快执行越好,更不要去在回调函数中去等待事件。
- 启动软件定时器:OSTmrStart();
- 停止软件定时器:OSTmrStop();
版权声明:本文为CSDN博主「日月飞峰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/riyuefeifeng/article/details/122733149
暂无评论