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

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

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

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


1.3、初始化OS  OSInit()

添加OS_IdleTaskInit()

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

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

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

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

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

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

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

2任务切换过程

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

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

2.1.1OSSched()任务调度

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

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

3中断处理

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

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

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


相关文章:

  • 2022-01-18
  • 2021-06-22
  • 2022-01-22
  • 2022-12-23
  • 2021-12-13
  • 2021-07-30
  • 2021-05-06
猜你喜欢
  • 2021-06-28
  • 2021-04-25
  • 2021-10-25
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
  • 2021-10-25
相关资源
相似解决方案