μC/OS-Ⅱ的移植,还要求编写4个简单的汇编语言函数;即OSStartHighRdy(),OSintCtxSw(),OSTIckISR(),OSCtxSw()。

3.4.1 函数OSStart()调用OSStartHighRdy()

函数OSStart()用于调用OSStartHighRdy(),以使使就绪态任务中优先级最高的任务开始运行:

μC/OS-II操作系统移植在LPC2378上的系统测试及问题解决方法

3.4.2 时钟节拍中断服务程序

μC/OS-Ⅱ要求用户提供一个周期性的时钟源,以实现时间延迟和超时确认功能,时钟节拍每秒发生10~100次。必须在开始多任务后,启动时钟节拍中断,但由于Osatart()函数不会返回,用户无法实现这一操作,所以可以在OSStart()运行之后,μC/OS启动的第1个任务中初始化节拍中断。基于LPC2378移植下OSTicklSR()的简易代码编写如下:

μC/OS-II操作系统移植在LPC2378上的系统测试及问题解决方法

当时钟节拍中断发生时,CPU会自动把CPU寄存器推入堆栈,但并不包括存储页面寄存器PPAGE,如果单片机系统的寻址范围超过64 KB,则需要通过给PPAGE赋值来区分不同的16 KB地址,需要把PPAGE也推入堆栈。当某任务的任务控制块中时间延时项OSTCBDly减到了零,OSTi-mtick()就进入了就绪态。OSIntExit()会调用中断级的任务切换函数OSIntCtxSw执行任务切换,而不再执行后面的指令。如果没有更高优先级的任务进入就绪态,则CPU会返回中断前状态。

3.4.3 任务级任务切换

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查