基于μC/OS-Ⅱ的线控转向FlexRay通信控制 02
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
基于μC/OS-Ⅱ的线控转向FlexRay通信控制 02
![](http://embed.chinaitlab.com/UploadFiles_4615/201005/20100505104545969.jpg) 由此可见,控制器需要按照POC状态进行相应操作,因此会出现对POC状态的循环检测,容易造成程序死锁以及占用大量系统资源。按照操作系统的介绍,其任务是以循环的形式存在的,因此可以将检测POC状态放入任务中单独执行,通过操作系统进行任务调度,可以避免影响到其他任务中程序的运行,并且提高程序的执行效率。
2 基于MC9S12XF512的μC/OS-Ⅱ移植
μC/OS-Ⅱ是源码公开的操作系统,具有执行效率高、占用空间小和实时性能优良等特点。利用该操作系统的任务机制,设计实现Flex-Ray协议,可以大大提高系统的实时性和稳定性,并且可以避免检测POC状态时的死锁现象。
目前市场上支持FlexRay通信的单片机较少,只有Freescale公司的技术比较成熟。考虑到成本问题,选择16位单片机MC9S12XF512作为系统控制器芯片。操作系统的使用首先要解决的就是移植问题。根据μC/OS-Ⅱ的文件结构,移植时需要对OS_CPU.H,(OS_CPU_A.ASM和OS_CPUC.C三个文件进行修改,以适合MC9S12xF512芯片的需要。
2.1 修改OS_CPU.H文件
OS_CPU.H文件定义与CPU相关的硬件信息,包括各种数据类型对应的存储长度等。针对MC9S12xF512中的堆栈是由高地址向低地址增长的,所以常量OS_STK_GROWTH必须设置为1。同时,定义任务调度函数OS_TASK_SW()设置为软中断源。
2.2 修改OS_CPU_A.ASM文件
OS_CPU_A.ASM文件是使用汇编语言编写与任务调度部分有关的代码。包括任务级任务切换函数OSCtxSw()、中断级任务切换函数OSIntCtxSw()、以及让优先级最高的就绪态任务开始运行的函数OS-StartHighRdy()。
MC9S12XF512芯片不仅设有FLASH页面管理寄存器PPage,也有RAM页面管理寄存器RPage、E2PROM页面管理寄存器EPage以及全程寄存器GPage。当时钟节拍中断发生时,芯片会自动把CPU寄存器推入堆栈,但是并不包括上述各寄存器,因此在OS_CPU_A.ASM文件三个函数中,均需要加入将寄存器入栈和出栈的语句。由于篇幅有限,仅以PPage代码为例:
![](http://embed.chinaitlab.com/UploadFiles_4615/201005/20100505104545995.jpg) 寄存器的入栈必须按照GPage,EPage,RPage,PPage的顺序,出栈则相反。
2.3 修改OS_CPUC.C文件
OS_CPUC.C文件是使用C语言编写与任务调度部分有关的代码,包括任务堆栈初始化函数OSTaskStklnit()和时钟节拍中断服务子程序OSTicklSR()。 |
|
|
|
|
|