ucosIII自学笔记_阻塞延时与空闲任务_2

写在前面:本次课程主要是在任务1、任务2中添加闲时任务,实现任务1、2延时时候运行空闲任务。

1、main()函数

1)关中断CPU_IntDis()

2)配置systick 10ms延时一次,并10ms进入systick中断处理 (同前一节课程)

3)初始化OS  OSInit(&err);(需要改写 在里面添加创建IdleTask

4)Task1Creat  Task2Creat 在任务1、2的task函数内容中加入OSTimeDly()

5)将任务控制块Task1TCB Task2TCB加入就绪列表OSRdyList[].HeadPtr

6)启动任务OSStart()





1.3、初始化OS  OSInit()

添加OS_IdleTaskInit()


1.3.1OS_IdleTaskInit() 闲时任务初始化:创建闲时任务OS_IdleTask()

闲时任务控制块、堆栈基地址、堆栈大小都要定义


1.3.1OS_IdleTask()闲时任务定义:只进行变量++


至此闲时任务已经添加完成,一直到OSStart(),开始启动任务。将任务1添加到OSTCBHighRdyPtr,接着在OSStartHighRdy()中将任务1添加到OSTCBCurPtr,这段汇编代码执行完毕就开始运行任务1Task1()。变成高电平,执行OSTimeDly(2);

2任务切换过程

2.1、OSTimeDly() 进行任务调度OSSched()


2.1.1OSSched()任务调度

开始是为task1->切换到task2->切换到IdleTask->systick中断执行中进行任务切换回task1、2


3中断处理

systick 10ms中断时间到进行中断处理,并调用OSTimeTick(),进行延时参数的--,并进行任务调度,此后如果task2延时时间到,由IdleTask切换回Task1




猜你喜欢

转载自blog.csdn.net/u010743406/article/details/80333378