目录
UCOSIII简介
- UCOSIII是一个 可剥夺的多任务系统 具有多任务处理能力
UCOSIII中的任务
组成
- 任务堆栈
- 任务控制块
- 任务函数
任务堆栈
- 上下切换的时候用来保存任务工作环境(STM32内部寄存器)
任务控制块
- 记录任务的各个属性
任务函数
用户编写的任务处理代码(干活的)
任务函数模板
void XXX_task(void *p_arg)
{
while(1)
{
。。。。。//任务处理过程
}
}
UCOSIII系统任务
组成
- 空闲任务
- 时钟节拍任务
- 统计任务
- 定时任务
- 中断服务管理任务
空闲任务
- UCOSIII创建的第一个任务,UCOSIII必须创建的任务,此任务由UCOSIII自动创建
时钟节拍任务
- 必选任务
统计任务
- 可选任务
- 作用:统计CPU使用率和各个任务的堆栈使用量
- 由 OS_CFG_STAT_TASK_EN控制
定时任务
- 可选任务
- 作用:提供定时服务
- 由OS_CFG_TMR_EN控制
中断服务管理任务
- 可选任务
- 由OS_CFG_ISR_POST_DEFERRED_EN控制
UCOSIII任务状态
组成及状态概念
- 休眠态 :任务已在CPU的flash中了,但是不受UCOSIII管理。
- 就绪态:系统为任务分配了任务控制块,并且任务已经在就绪表中登记,这时这个任务就具有了运行的条件,此时任务的状态就是就绪态。
- 运行态:任务获得CPU的使用权,正在运行。
- 等待态:正在运行的任务需要等待一段时间,或者等待某个事件,这个任务就进入了等待态,此时系统就会把CPU使用权转交给别的任务。
- 中断服务态:当发送中断,当前正在运行的任务会被挂起,CPU转而去执行中断服务函数,此时任务的任务状态叫做中断服务态。
UCOSIII中的delay
函数 | 描述 |
delay_osschedlock() | 任务调度器加锁 |
delay_osschedunlock() | 任务调度解锁 |
delay_ostimedly() | 按照节拍数延时 |
SysTick_Handler() | 滴答定时器中断服务函数 |
delay_init() | 滴答定时器与延迟函数初始化 |
delay_us() | 不会引发任务调动 |
delay_ms() | 最小ms延时时间为UCOS系统心跳时间 |
UCOSIII中的uart
Void USART1_IRQHandler(void)
{
#if SYSTEM_SUPPORT_OS //使用UCOS操作系统
OSIntEnter();
#endif
//中间处理函数,和不是用UCOS时相同
#if SYSTEM_SUPPORT_OS
OSIntExit(); //退出中断
#endif
}