基于stm32代码讲解
本文
第一部分:涉及移植后stm32工程中delay.c,usart.c,sys.c 3个源文件中重要的函数说明
第二部分:讲解ucos任务管理的基本概念和相关代码帮助理解,包括-1.任务的组成部分
2.系统任务 3.任务状态 4.任务状态的切换
第三部分:进行总结归纳和反思
1-delay.c
采用滴答定时器(硬件定时器)作为UCOS的基准时间 |
在m3,m4中代码完全一样。在m4权威指南中NVIC和中断一章中Systick有详细讲解滴答定时器
void SysTick_Handler(void)
{
if(delay_osrunning==1)
{
OSIntEnter();
OSTimeTick();
OSIntExit();
}
}
- delay_init,初始化了ucos的时钟节拍
- delay_ms在<=最小周期的时候使用原本的函数-不会引起任务调度,在大于的时候使用ucos自带的函数-会引起任务调度
- delay_us不会引起任务调度
2-usart.c
void USART1_IRQHandler(void)
{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
....................
#if SYSTEM_SUPPORT_OS
OSIntExit();
#endif
}
3-sys.c 完全不变
1-任务的组成
- 任务堆栈:上下文切换用于保存任务当前环境。也就是stm32内部寄存器的值。
- 任务控制块:保存任务的各个属性
- 任务函数:完成指定功能
1-1三大组成使用部分代码讲解
如下定义了3个组成部分,进行相关定义后即可以作为参数调用OSTaskCreate(…)开启相应任务 |
#define TASK1_TASK_PRIO 4
#define TASK1_STK_SIZE 128
OS_TCB Task1_TaskTCB;
CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE];
void task1_task(void *p_arg);
某个任务代码,调用OSTimeDlyHMSM是使用任务切换的关键 |
void XXX_task(void *p_arg)
{
while(1)
{
...
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
}
}
OSTaskCreate((OS_TCB * )&Task1_TaskTCB,
(CPU_CHAR * )"Task1 task",
(OS_TASK_PTR )task1_task,
(void * )0,
(OS_PRIO )TASK1_TASK_PRIO,
(CPU_STK * )&TASK1_TASK_STK[0],
(CPU_STK_SIZE)TASK1_STK_SIZE/10,
(CPU_STK_SIZE)TASK1_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void * )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err);
2-系统任务
1、空闲任务:UCOSIII创建的第一个任务,UCOSIII必须创建的任务,此任务有UCOSIII自动创建,不需要用户手动创建。
2、时钟节拍任务:此任务也是必须创建的任务。
3、统计任务:可选任务,用来统计CPU使用率和各个任务的堆栈使用量。此任务是可选任务,由宏OS_CFG_STAT_TASK_EN控制是否使用此任务。
4、定时任务:用来向用户提供定时服务,也是可选任务,由宏OS_CFG_TMR_EN控制是否使用此任务。
5、中断服务管理任务:可选任务,由宏OS_CFG_ISR_POST_DEFERRED_EN控制是否使用此任务。
3-任务状态
从用户的角度看,UCOSIII的任务一共有5种状态: |
1、休眠态:任务已经在CPU的flash中了,但是还不受UCOSIII管理。
2、就绪态:系统为任务分配了任务控制块,并且任务已经在就绪表中登记,这时这个任务就具有了运行的条件,此时任务的状态就是就绪态。
3、运行态:任务获得CPU的使用权,正在运行。
4、等待态:正在运行的任务需要等待一段时间,或者等待某个事件,这个任务就进入了等待态,此时系统就会把CPU使用权转交给别的任务。
5、中断服务态:当发送中断,当前正在运行的任务会被挂起,CPU转而去执行中断服务函数,此时任务的任务状态叫做中断服务态。
1-delay,usart中需要注意的地方?
- delay.c中选取了滴答定时器作为ucosIII的时间基准
- usart中中断服务函数需要ucos进入和退出中断函数
2-任务的三大组成是什么?
3-系统任务有哪些?
3-任务状态有几种?