写在前面:本次课程主要是在任务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