2 软件系统设计与实现
为使智能车在环境改变时做出更为及时准确的响应,在程序设计时应用μC/OS-Ⅱ系统。μC/OS-Ⅱ适合小型控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2 KB。μC/OS-Ⅱ的代码是用C语言编写,可以直接移植到有C语言编译器的处理器上。移植主要都集中在多任务切换的实现上,由于这部分代码用于保存和恢复CPU现场(即写/读相关寄存器),不能用C语言,只能使用汇编语言完成,即编写OS CPU A.S文件。另外还需要修改体系结构相关的OS CPU.H文件和用户规定任务栈初始化结构的OS CPU C.C文件。
μC/OS-Ⅱ是采用的可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。μC/OS-Ⅱ中最多可以支持64个任务,分别对应优先级0~63,其中0为最高优先级。在该系统设计中,共应用了7个优先级,其中,操作系统建立任务,即Task Start()的优先级最高。调度工作可以分为两部分:最高优先级任务的寻找和任务切换。
在该系统中,共定义了路径识别、光电转盘检测等7个任务,控制器任务划分及说明如表1所示。其调度和通信实现流程如下:系统执行Task Start(),在初始化任务执行完成后,利用μC/OS-Ⅱ的OSTaskDel()函数将这个任务返回并处于休眠状态。此时,Task Po-sition Check()成为优先级最高的任务,将会一直执行。当Task Position Check()检测到路径有所改变,通过邮箱传送数据到Task Control(),并由TaskControl()控制PWM波输出的改变。任务Task Op-tICal_Wheel()的优先级稍低,同样会一直执行,即当任务Task_Optical_Wheel()检测到黑白跳变时,任务中的变量加1,Task_Optical_Wheel()每隔1 s向任务Task_Path_Calculate()和Task_Speed_Calculate()发送1次消息,分别计算速度和已走的累加路程,控制器任务关系图如图4所示。