实际上任务级的切换就是通过执行软中断指令,或者根据处理器的不同,执行TRAP指令来实现。中断服务子程序、TRAP或者异常处理的向量地址必须指向OSCtXSW(),利用系统在跳转到中断服务程序时会自动把断点指针压入堆栈的功能,把断点指针存入堆栈,而利用中断返回指令IRET,能把断点指针推入CPU的PC寄存器功能,恢复待运行任务的断点,这样就可以实现断点的保存和恢复。

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

3.4.4 中断级任务切换

OSIntExit()通过调用OSIntSw(),在ISR中执行任务切换函数。因为OSIntCtxSw()是在ISR中被调用的,所以假定所有的处理器寄存器都被正确地保存到了被中断任务的堆栈中。OSIntSw()函数的绝大多数代码与OSCtxSw()函数是一样的,区别只是:因为ISR已经保存了CPU的寄存器,而不再需要在OSIntSw()函数中保存CPU的寄存器。在进行操作系统移植时,该段程序的代码如下:

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

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

3.5 移植中的问题

ARM处理器的软件调试通过JTAG口直接在系统的外部SRAM运行,因此在程序调试之前,ARM处理器的开发环境软件首先调用初始化文件(*.ini),用户可以根据自己系统的外部存储器和设备的地址来修改文件。如果该文件有误,开发环境软件将无法通过JTAG与处理器通信。系统调试过程中,经常会出现程序跑飞的现象,经过测试与分析,主要有4个方面原因:

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