混联式混合动力体系的子体系很多,其间整车操控器作为完成驾驭员驾驭需求和能量安全的办理体系,需求和谐发动机、扭矩、电机和电池的功率在不同工况下的合理分配,完成制动能量回馈,并操控外围设备(如空调、灯火),以到达最佳的节能排放作用。体系使命的复杂性和强电磁搅扰环境都对整车操控器的实时性和可靠性提出了严重应战,传统的单使命循环式的程序操控形式难以满意需求,因而作者选用了开放源码的嵌入式操作体系μC/OS-II规划整车操控器体系软件。
1 整车体系结构
所开发的全混合动力轿车是天津市严重专项课题,以长城哈佛SUV轿车为渠道。该车动力体系首要由发动机、沟通电动机、沟通发电机和高性能的镍氢电池、行星架动力分配组织以及DC-AC逆变器组成。整车操控器选用总线与发动机办理体系、电机操控器和动力电池组办理体系交流信息,而且预留了1路CAN以便后期与车身体系通讯。
整车操控器依据驾驭员输入信号,结合电池组状况和车辆当时运转状况,依据必定的战略操控各个子体系的作业,完成节能减排的方针。体系网络拓扑如图1所示。
2 整车操控器硬件规划
ECU的硬件规划依照模块化准则,可分为如下几个功用模块:微操控器模块、数据收集模块、功率驱动及维护模块、D/A转化模块、电源模块、通讯模块、显现及报警接口和标定确诊接口等。选用 Infineon公司的XC164CS微操控器,它依据增强的C166SVZ内核,并在性能上优于其他16位微操控器:内部集成DSP功用、扩展的中止处理才能、强壮的片上外设以及高性能片上Flash,如图2所示。
3 μC/OS-II的移植
μC/OS-II嵌入式实时操作体系选用ANSIC言语编写,具有很好的可读性和可移植性;对硬件资源要求不高,在大多数8位、16位微操控器上都能够完成移植。
3.1 μC/OS-II的发动
首先要调用硬件驱动程序对硬件进行初始化设置,然后调用体系初始化函数OSlnit()初始化μC/OS-II一切的变量和数据结构。
发动μC/OS-II之前树立1个使用使命。OSlnit()树立闲暇使命idletask,这个使命总是处于安排妥当态。闲暇使命OSTaskIdle()的优先级设成最低,即OS_LOWEST_PRIO。多使命的发动需求用户经过调用OSStart()完成。当然还有其他设置,这儿不再逐个介绍。
3.2 μC/OS-II的移植
μC/OS-II操作体系在XC164CS微处理器上的移植首要完成对3个文件OS_CPU.H、OS_CPU_C.C、OS_CPU A.ASM的处理。
3.2.1头文件 INCLUDES.H
INCLUDES.H头文件应被包括到一切C文件的第1行。虽然包括不相关文件可能会添加文件的编译时刻,但增强了代码的可移植性。用户能够修改添加自己的头文件,但有必要添加在头文件列表的最终。
3.2.2 OS_CPU.H文件
OS_CPU.H 文件中包括与处理器相关的常量、宏和结构体的界说。针对XC164CS处理器,界说仓库数据类型为16位,栈向下递减;将μC/OS-II操控中止的2个宏OS_ENTER_CRITICAL()和OS_EXIT_CRIT%&&&&&%AL()界说为微操控器封闭(SETC)和翻开(CLRC)中止的指令;声明 OS_TASK_SW()函数,中止服务程序ISR的进口指向函数OSCtxSw()。
3.2.3 OS CPU A.ASM
μC/OS-II移植时要求用户编写4个汇编言语函数:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。
(1)OSStartHighRdy()
调用该函数使处于安排妥当状况的优先级最高的使命开端运转。由于实时操作体系是不回来的函数,所以调用后需移去仓库栈顶的回来地址,然后履行用户调用函数 OSTaskSwHook(),最终开端运转多使命,取得优先级最高的使命的指针,依据这个指针从使命仓库中康复一切寄存器,康复完后履行中止回来,运转安排妥当态使命。
(2)OSCtxSw()
当从低优先级的使命切换到较高优先级的使命时,调用使命切换函数 OSCtxSw()保存处理器的内容和使命指针到当时使命的使命仓库,然后履行用户调用函数OSTaskSwHook(),最终从要履行使命的使命仓库里康复寄存器和仓库中的内容,履行中止回来指令开端运转新的使命。
(3)OSIntCtxSw()
当需求在中 断发生后切换到更高优先级的使命时,调用中止级使命切换函数OSIntCtxSw(),然后履行用户调用函数OSTaskSwHook()。由于该函数是在中止程序中被调用,所以不需求保存中止使命的寄存器;中止子程序在调用函数OSInExit()时,将回来地址压入仓库,在这儿不需求再回来,所以有必要从仓库中整理掉回来地址。
(4)OSTickISR()
OSTickISR()是μC/OS-II中的时钟节拍中止服务程序。在每个时钟节拍调用该函数,给每个处于延时的使命延时减1,并查看一切处于延时状况的使命是否延时完毕成为安排妥当使命。然后调用OSIntExit(),如果有优先级更高的使命安排妥当,OSIntExit()就会进行使命调度。OSIntExit()并不回来调用者,而是用新的使命仓库中的内容来康复CPU现场,由中止回来履行新的使命。
3.2.4OS_CPU_C.C
用户需求编写6个C言语函数OSTaskStkInit()、 OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskSatHook()、 OSTimeTickHook()。其间,仅有必要的是OSTaskStkInit(),其他5个有必要声明,但能够不包括代码。
OSTaskStkInit() 由使命创立函数OSTaskCreate()或OSTaskCreateExt()调用,在树立每个使命的时分初始化使命仓库。开端运转这个使命便是模仿中止回来,把初始化后仓库中保存的值康复到各个寄存器。初始化使命仓库时,要传递使命代码开始指针(Ptask)、参数指针(Pdata)、使命仓库栈顶指针。使命仓库初始化完成后,回来一个新的仓库栈顶指针,OSTaskCreate()或OSTaskCreateExt()将它保存到OSTCB中。