嵌入式RTOS在MSP430单片机上的实现
时间:06-28
来源:互联网
点击:
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的同步变化。
为了达到这个目的,单片机芯片必须具备以下2个条件。
首先,单片机芯片必须有一个通用寄存器和相应的指令能够模仿堆栈指针SP的功能,即能实现软堆栈。在MSP430系列单片机中有以下指令可以仿真SP的功能(把R4作为中断堆栈指针使用):
MOV @R4+,SP ;将R4所指向地址中的内容存入SP;中,同时R4中内容加2
MOV SP,0(R4) ;将SP中的内容存入R4所指向的地址中
MOV @R4+,PC ;将R4所指向地址中的内容存入PC;中,同时R4中内容加2
其次,作为模拟中断堆栈指针的寄存器R4,必须在中断之外的任何情况下不被使用。因为,此时的R4必须时刻保持在中断堆栈的顶部,如果改变它的值,就会改变中断堆栈的结构。一般这个要求是由所使用的编译器来保证的,在我们所使用的IAR编译器中,有一个选项可以避免使用R4和/或R5。
具体设计时,我们在uC/OS-II每个任务的TCB(任务控制块)结构中加入以下几项:
TSP--任务堆栈指针。发生中断后,指向该任务的任务堆栈的顶部。
ISP--中断堆栈指针。如果在中断中发生任务切换,指向该任务在中断堆栈所保存状态的顶部。
FromInt标志--是否来自中断标志。用来判断该任务的状态是保存在中断堆栈中(为1),还是保存在任务堆栈中(为0)。
下面假设一个普通任务1在执行过程发生中断,对它在中断执行过程中可能出现的几种情况进行分析。
(1)在普通任务1运行时引发中断,在中断中没有激活更高优先级的任务,而是正常结束中断,继续执行任务1,如图2所示。
单片机在嵌入式方面的应用都非常强调单片机的超低功耗特性。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的同步变化。
为了达到这个目的,单片机芯片必须具备以下2个条件。
首先,单片机芯片必须有一个通用寄存器和相应的指令能够模仿堆栈指针SP的功能,即能实现软堆栈。在MSP430系列单片机中有以下指令可以仿真SP的功能(把R4作为中断堆栈指针使用):
MOV @R4+,SP ;将R4所指向地址中的内容存入SP;中,同时R4中内容加2
MOV SP,0(R4) ;将SP中的内容存入R4所指向的地址中
MOV @R4+,PC ;将R4所指向地址中的内容存入PC;中,同时R4中内容加2
其次,作为模拟中断堆栈指针的寄存器R4,必须在中断之外的任何情况下不被使用。因为,此时的R4必须时刻保持在中断堆栈的顶部,如果改变它的值,就会改变中断堆栈的结构。一般这个要求是由所使用的编译器来保证的,在我们所使用的IAR编译器中,有一个选项可以避免使用R4和/或R5。
具体设计时,我们在uC/OS-II每个任务的TCB(任务控制块)结构中加入以下几项:
TSP--任务堆栈指针。发生中断后,指向该任务的任务堆栈的顶部。
ISP--中断堆栈指针。如果在中断中发生任务切换,指向该任务在中断堆栈所保存状态的顶部。
FromInt标志--是否来自中断标志。用来判断该任务的状态是保存在中断堆栈中(为1),还是保存在任务堆栈中(为0)。
下面假设一个普通任务1在执行过程发生中断,对它在中断执行过程中可能出现的几种情况进行分析。
(1)在普通任务1运行时引发中断,在中断中没有激活更高优先级的任务,而是正常结束中断,继续执行任务1,如图2所示。
开始中断:将在中断发生时保存在当前任务堆栈的SR和PC移到中断堆栈中保存,同时 SP回到中断前的位置并将它保存到该任务TCB中的TSP中(这是为了在中断结束后,保持任务堆栈的连续性),然后将SP指到目前中断堆栈的顶部,按照自定义堆栈结构的顺序依次将所有寄存器都保存到中断堆栈中。保存的过程中R4必须与SP保持同步变化,同时将From
嵌入式 单片机 电子 Linux C语言 MSP430 电压 电流 MIPS 看门狗 PWM 比较器 仿真 连接器 相关文章:
- 嵌入式系统的定义与发展历史(11-15)
- 嵌入式系统亲密接触(11-22)
- 嵌入式系统设计中的USB OTG方案(02-01)
- 嵌入式线控驾驶系统开发过程中设计和测试考虑(02-02)
- 一个典型的嵌入式系统设计和实现 (02-02)
- DDR SDRAM在嵌入式系统中的应用(02-07)