uC/OS-II在MSP430单片机芯片上实现RTOS的问题分析
[09-12 16:05:16] 来源:http://www.88dzw.com 单片机学习 阅读:8251次
文章摘要:MSP430F148中就没有软中断指令,所使用的IAR编译器在发生中断时也不保存所有的寄存器,而是只保存几个在中断中使用到的寄存器。所有这些都是不符合uC/OS-II的移植条件的。我们的解决方法是根据具体情况来自己定义一个中断结构,不论是在任务级调度还是中断发生或调度以及任务堆栈的初始化时,都要按照这个结构来执行。代价是必须对所编写的中断程序的汇编代码进行人工修改,使之符合这个中断结构。为设计一个符合要求的中断堆栈结构,首先必须清楚所使用的单片机在发生中断时执行了哪些操作,即向堆栈中保存了哪些寄存器以及它们的顺序。当MSP430单片机发生中断时,只进行2条基本操作,先将SR(状态寄存器)压入堆
uC/OS-II在MSP430单片机芯片上实现RTOS的问题分析,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.comMSP430F148中就没有软中断指令,所使用的IAR编译器在发生中断时也不保存所有的寄存器,而是只保存几个在中断中使用到的寄存器。所有这些都是不符合uC/OS-II的移植条件的。我们的解决方法是根据具体情况来自己定义一个中断结构,不论是在任务级调度还是中断发生或调度以及任务堆栈的初始化时,都要按照这个结构来执行。代价是必须对所编写的中断程序的汇编代码进行人工修改,使之符合这个中断结构。
为设计一个符合要求的中断堆栈结构,首先必须清楚所使用的单片机在发生中断时执行了哪些操作,即向堆栈中保存了哪些寄存器以及它们的顺序。当MSP430单片机发生中断时,只进行2条基本操作,先将SR(状态寄存器)压入堆栈中保存,然后将中断发生时要执行的下一条指令的PC值压入堆栈保存。其次,要清楚所使用的C编译器在编译C语言编写的中断程序时,进行了哪些默认的操作。通过对所使用的IAR V2.13编译器编译产生的汇编程序进行分析,可以发现,除了以上的2条基本操作以外,在中断程序的开头,还自动保存了 R12~R15四个寄存器,余下的R4~Rll八个寄存器中只保存在中断程序中用到的个别寄存器,而不是全部保存。但在RTOS中必须保存所有的寄存器,这样才能正确保存该任务的状态。通过以上分析,我们定义了MSP430运行uC/OS-II时的中断堆栈结构,如图1所示。
3 如何保证单片机的低功耗特性
单片机在嵌入式方面的应用都非常强调单片机的超低功耗特性。MSP430系列的特点也在于此。如果由于运行RTOS而破坏了单片机的低功耗特性是得不偿失的。一般的单片机都规定了几种不同功耗的工作模式,可以根据具体的需求来选择。不同工作模式是通过读写1个或1组寄存器来控制CPU、时钟、晶振以及外围设备的运行来实现的。
MSP430系列单片机有6种不同的工作模式,都是通过对状态寄存器SR的读写来实现的。在RTOS中,由于每个任务都可以分别保存自己的状态,包括状态寄存器,所以在实现低功耗工作模式时更加灵活方便。首先,在设计每个任务时,都可以根据任务的具体要求定义它的工作模式。其次,在整个系统设计中,设计一个最低优先级的任务,其作用就是使系统进入特定的低功耗工作模式。这样,在其它任务都运行完毕后,系统会调用这个任务使整个系统进入低功耗工作模式。当其它任务又恢复运行时(如延时结束),会自动进入其特定的工作状态,以达到降低功耗的目的。
4 如何减少RTOS在运行中占用的RAM空间
影响RTOS在单片机上应用的主要原因是由于在单片机上运行RTOS需要占用一定的系统资源,如系统时钟、RAM、FLASH或ROM等,从而减少了应用系统对资源的利用。特别是对RAM的占用。一般而言,单片机上的内部RAM数量都很少(如MSP430F148是整个MSP430中RAM最多的,也只有2 KB),虽然可以通过外部扩展来增加RAM数量,但这样不仅增加了设计的难度和产品成本,而且有时还使系统应用无法进行扩展。所以,最好的方法是能够充分利用单片机的内部RAM来运行RTOS。
通过分析uC/OS-II对RAM的使用情况可知,占用RAM空间最多的原因,是由于在设计uC/OS-II时,要给每个任务都分配一个单独的任务堆栈。特别在单片机的硬件设计没有将中断堆栈与任务堆栈分开时,计算任务堆栈的大小时不仅要计算任务中变量和函数嵌套所使用的RAM大小,还必须计算该任务在运行时发生中断和中断嵌套所需要的RAM空间的大小。由于每一个任务均需预留中断和中断嵌套所需要的RAM空间的大小,所以使得大量RAM空间被浪费。最直接的解决方法就是利用软件来将任务堆栈和中断堆栈分离,使得在计算任务堆栈的大小时,只需计算任务本身所需的RAM空间大小,从而提高了RAM的使用效率,增加了更多的应用任务。
所谓将中断堆栈与任务堆栈分离,就是在内存中专门开辟出一块区域作为中断堆栈使用,任何一个任务运行时发生中断都只使用它。设计的原则:一是要尽量将中断任务与普通任务分开;二是模拟的中断堆栈指针必须一直保持在中断堆栈的顶部,即中断时中断堆栈指针要时刻保持与SP的同步变化。
《uC/OS-II在MSP430单片机芯片上实现RTOS的问题分析》相关文章
- › 在51系列单片机上移植uCOS-II
- 在百度中搜索相关文章:uC/OS-II在MSP430单片机芯片上实现RTOS的问题分析
- 在谷歌中搜索相关文章:uC/OS-II在MSP430单片机芯片上实现RTOS的问题分析
- 在soso中搜索相关文章:uC/OS-II在MSP430单片机芯片上实现RTOS的问题分析
- 在搜狗中搜索相关文章:uC/OS-II在MSP430单片机芯片上实现RTOS的问题分析