嵌入式实时系统专题.docx
嵌入式实时系统专题部门:XXX时间:XXX制作人:XXX整理范文,可下载自行修改while(l>OSSemPend(KEY_EVENT,0,&err>。读取按键值把按键值通过约定地格式转换为特定地消息 OSSemPost(LCD_EVENT>o )LCD任务:LCD任务负责刺绣窗体整体刷新,包括:主轴转速、绣框坐标、机器状态、出错信 息等.LCD任务程序结构如下所示:void OSTask_LCDdisp(void *pdata> while(l> (等待LCD_EVENT,挂起时间400msOSSemPend(LCD_EVENT,pendtime,&err>o 更新显示信息 /刺绣窗体定时刷新 ) USB HOST任务:USB主机任务用于处理USB主机事件地任务例如,检测USB外设地插入和拔出,处理 USB主机地挂起和唤醒).USB主机任务在多任务地操作系统中,应比其他任何使用到地USB 主机传输数据地任务优先级低.代码如下: void Task_USB_Host_Serve(void *pdata> (pdata = pdataowhile (1> USB_Host_Serve(>。) )运动控制任务:绣花机上电后根据主轴电机是否转动分为两种状态,相应地运动控制任务主循环也分为 主轴电机转动地“机器运行”函数和“机器不运行”函数.示意性伪代码如下.void OSTask_Motion(void *pdata>uint8 err; pdata 二 pdata。while (1>(OSSemPend(MOTION_EVENT,0,&err>。while(menu. main_menu!= Display_Embrmain> 判断是否处于刺绣窗体OSSemPend(MOTION_EVENT,0,&err>oif(forml. runstate= =NormRun>判断是否是正常运行态Machine_ NormRun(>o正常运行Machine_NotRun (>。非运行状态)在运动控制任务主循环中首先挂起任务,当有拉杆中断时恢复运行,判断当前显示状 态是否是在刺绣窗体状态下,假设不是那么始终挂起运动控制任务.假设是刺绣窗体状态,那么判断机 器状态标志是否是机器正常运行态,假设是那么执行机器运行函数,控制绣花机按照设定参数动作. 最后执行机器不运行函数,扫描执行移动绣框、换色等不需要转动主轴地动作.运动控制任务会通过OSSemPost(LCD_EVENT>给显示任务发送信号量来更新显示信息.磁盘管理任务:磁盘管理任务主要负责对花样文件地管理,包括对内存文件或+U盘文件列目录、U 盘花样拷入内存、内存花样拷入U盘、花样文件地删除等.程序结构如下所示:void OSTask_Disk(void *data>(while (1>(OSSemPend(DISK_EVENT,0,&err>。 switch(Key_command>(case Design_list:歹U 目录;.case Disk_Copto_Ram:磁盘花样拷贝 case Ram_Copto_Disk:拷贝花样到磁盘.case Ram_Design_Display:/内存花样显示case .) OSSemPost(LCD_EVENT>。 )看门狗任务:看门狗在系统初始化时启动,看门狗任务负责延时200ms喂一次狗,保证系统不会复位. void OSTask_FeedDog(void *pdata> (pdata = pdatao while(l> (OSTimeDly(2>oFeedDog(>o /喂狗缩略术语表ASSP: Application Specific Standard ProductASIC: Application Specific Integrated CircuitsARM: Advanced RISC MachinesRISC: Reduced Instruction Set ComputerMIPS: Microprocessor without Interlocked Piped StagesMPU: Micro Processor UnitMCU: Micro Controller UnitDSPs: Digital Signal ProcessorsSOC: System on a ChipSOPC: System on a Programming ChipEDA: Electronic Design AutomationVHDL: Very High speed integrated circuit Hardware Description LanguageFPGA: Field Programmable Gate ArrayCPLD: Complex Programmable Logic DeviceIP: Intellectual PropertyRTOS: Real Time Operating SystemTAP: TestAccessPortTRST: Test ResetTMS: Test Mode SelectTCK: Test ClockTDI: Test Data InputTDO: Test Data OutputUART: Universal Asynchronous Receiver and TransmitterSPI: Serial Peripheral InterfaceI2C: Inter IC BusDIP: Dual In-line PackageSOP: Small Outline PackageQFP: Quad Flat PackageBGA: Ball Grid Array PackageCSP: Chip Size PackageWAP: Wireless Application ProtocalHTTP: Hyper Text Transfer Protocol7田泽编著.嵌入式系统开发与应用教程.北京:北京航空航天大学出版社,2005.第8章嵌入式系统设计实例工业绣花机控制器地设计电脑绣花机控制器功能:根据花版数据及移框机构地机械传动特性,向X、Y方向步进电机发送脉冲,完成对该脉 冲地环形分配及功放,驱动步进电机完成移框动作;.可根据需要调节机头地刺绣速度及框架地移动速度;2 .移框时间受针位量控制,只有在针离开布面后才允许绣框移动,且在针第二次刺入布面 之前停止移框;花版数据由软盘或USB读入内存,实现内存与外存数据交换.软盘或者USB上文件格式 一般为田岛二进制格式:*.dsb;.断线停机,能够检测断线,同时报警,通过译码接口电路可以判断出哪个针位出现断线;5 .人机交互:LCD显示器、薄膜键盘或触摸屏)提供控制输入和状态输出;.主轴电机为滑差电机,主轴控制要求转速可调并且能够稳定转速,转速由主控电路给定, 能够精确停车;6 .能够通过移位针杆箱来换色,换色由换色电机控制,换色电机为微特电机;能够控制每个机头是否下针,下针由下针电磁铁控制,电磁铁由电磁铁驱动器来驱动,驱 动电路按照给定信号触发;.刺绣动作是关键,由控制X、Y轴步进电机来完成,依照软件给定地位置信息,经过运算 之后分别给X、Y轴步进电机发出控制脉冲,步进电机在两针之间地时隙内完成移位需 要与主轴电机同步);10 .通过行程开关控制开机、停机;通过限位开关控制越框报警.二.硬件功能结构:根据绣花机地机械和电气特性,我们将整个控制系统分成如图1所示地7块电路板来协同 工作,它们分别是:主板,断线报警板,主轴控制板,换色控制板,针位板,译码板和键盘、LCD驱动板.LCD键盘U盘、软X方向步进驱动器X方向步进驱动器7USB 接口换色控制板Y方向步进驱动器Y方向步进驱动器基于LPC2214的主电路系统主轴控制板主轴控制板针位板行程开关限位开关行程开关限位开关译码板图1绣花机控制器系统框图1 .人机交互局部:将软驱接口电路、USB接口电路、薄膜键盘、单彩)色LCD显示器驱动电路制作在同一 块电路板上.通过软驱或U盘读取花样信息,在LCD上实时显示花样及相关数据,通过薄膜键盘 进行基本操作控制.2 .主轴电机控制器:.主轴电机为滑差电机,主轴电机控制器需要驱动电磁离合器和电磁制动器,输入信号是 速度给定信号,输出信号是针位信号、电磁离合器驱动信号和电磁制动器驱动信号,外围 接口电路、光电耦合器、光电编码器和放大电路一起组成闭环调速控制系统.3 .X、Y轴步进电机控制器:根据花样信息向步进电机驱动器发送脉冲,使步进电机与主轴电机协调动作完成刺绣.4 .换色电机控制器:换色电机为微特电机,针杆间距为15mm,换色电机控制器需要光电元件和霍尔感应元件 来判断换色是否成功,换色电机控制电路与主控制电路交换地数据有换色信号和换色完成标 志信号.5 .断线检测电路和针位译码接口电路:断线检测电路位于针杆箱内,可以通过三态开关控制针头挑线簧与夹线座铜柱构成断线 传感器,当断线时断线检测电路能够报警并将断线信号传输给针位译码接口电路,由译码电 路判断出哪一个针位出现断线,并向MCU发送一个断线中断信号.6 .行程开关和限位开关:当出现断线、补绣、故障停车时,通过行程开关控制开、停机;当绣框越位触发限位开关时 报警并停机,二者都以中断方式控制.三.控制器地软件总体设计和任务划分.系统软件模块.系统软件模块1 .嵌入式操作系统地引入在嵌入式系统中使用实时操作系统RTOS(Real Time Operating System,可以将应用分解 成多任务,简化了应用系统软件地设计;RTOS使控制系统地实时性得到保证,可以接近理论 上能到达地最好水平;良好地多任务设计,有助于提高系统地稳定性和可靠性. C/OS-H是一个源码公开、可移植、可固化、可裁剪及占先式地实时多任务操作系统,其 绝大局部源码是用ANSI C写地,与微处理器硬件相关地局部是用汇编语言写地,便于移植到 其他微处理器上,它能够运行在大局部地8位、16位、32位、甚至64位地微处理器及数字 信号处理器(DSP上.由于UC/OS-H实时操作系统源代码公开且商用价格非常廉价,考虑到 整个工业绣花机控制器地软硬件本钱和实时性,因此我们选择uc/os-H作为该控制器地操 作系统.2 .启动代码地实现启动代码主要实现异常向量表定义、堆栈初始化、系统变量初始化、I/O、外围初始 化、地址重映射等.示意代码段如下所示:o define the stack sizeO定义堆栈地大小FIQ_STACK_LEGTH EQU 9*25o every layer need 9 bytes stack , permit 8o every layer need 9 bytes stack , permit 8IRQ_STACK_LEGTHEQU9*25layer.每层嵌套需要9个字堆栈,允许8层嵌套ABT_STACK_LEGTHEQU0UND_STACK_LEGTHEQU0AREA vectors,CODE,READONLY ENTRYo interrupt vectorso中断向量表ResetLDR PC, ResetAddrLDR PC, UndefinedAddrLDR PC, SWI_AddrLDR PC, PrefetchAddrLDR PC, DataAbortAddrDCD 0xb9205f80LDR PC, PC, #-0xff0LDR PC, FIQ_AddrResetAddrResetAddrDCD ResetlnitUndefinedAddrDCD UndefinedSWI.AddrPrefetchAddrSWI.AddrPrefetchAddrDCD SoftwareinterruptDCD PrefetchAbortDataAbortAddrDataAbortAddrDCD DataAbortNouse DCD 0Nouse DCD 0IRQ_AddrFIQ.AddrIRQ_AddrFIQ.AddrDCD 0DCD FIQ_Handler。未定义指令UndefinedB UndefinedO取指令中止PrefetchAbortB PrefetchAbortO取数据中止DataAbortB DataAbortO快速中断FIQ_HandlerSTMFD SP!, R0-R3, LRBL FIQ_Exception LDMFD SP!, R0-R3,LRSUBS PC, LR, #4。未定义指令UndefinedB UndefinedO取指令中止PrefetchAbortB PrefetchAbortO取数据中止DataAbortB DataAbortO快速中断FIQ_HandlerSTMFD SP!, R0-R3, LRBL FIQ_Exception LDMFD SP!, R0-R3,LRSUBS PC, LR, #4* unction name* unction name函数名称:Resetlnito*Descriptions功能描述:RESET 复位入口o*input parameters输 入:None无o*Returned value输 出:None无o * Used global variables 全局变量: None 无o*Calling modules调用模块:None无Resetlnito Initial the extenal bus controllerO初始化外部总线控制器,根据目标板决定配置LDR R0,二PINSEL2IF :DEF: EN_CRPLDR Rl,=0x0f814910ELSELDR Rl,=0x0f814914ENDIFSTR RI, ROLDR RO,=BCFGOLDR RI, =0x10001464o /Flash SST39VF3201 0x10001464STR RI, R0LDR R0, =BCFG1LDR Rl,=0x000033cl0x000033cl,0x00002bc0STR RI, R0/138 译 码 器LDR R0, =BCFG2LDR RI, =0x10002420 0x10002420/RAMSTC62WV12816STR RI, R0LDR R0, =BCFG3LDR RI, =0x1000146f。/USB ISP 1160 0x1000146fSTR RI, R0BL InitStack 。/Initialize the stack 初始化堆栈BL TargetResetlnit 。 ”Initialize the target board 目标板基本初始化maino /Jump to the entry point of C program 跳转至U c 语言入口.操作系统地移植uc/os-n核心代码很小,要把它移植到微处理器只需要作少量地工作.移植前使用软中 断指令SWI作为底层接口,方便系统移植.从图2-3中可看出只需要修改与处理器相关地代 码(OS_CPU.H,OS_CPU_ASM. S,OS_CPU_C.C>,就完成了系统地移植.包括了与编译器相关地数据类型定义和与微处理器相关地常数和宏定义.不同微 处理器中有不同地字长,所以必须定义一系列数据类型以确保移植地正确性;同时针对 ARM7 体系结构地特点,利用两个宏,OS_ENTER_CRITICAL(>U OS_EXIT_CRITICAL(> 择了开/关中断方式.OS_CPU_C.C包含了 OSTaskStklnit函数,初始化任务堆栈,针对ARM7体系结构地特点 进行初始化栈,将所有寄存器保存在堆栈中OS_CPU_ASM.S包括了 4个与操作系统和微处理器硬件相关地用汇编语言编地函数: OSStartHighRdy(>,OSCtxSw(>,OSIntCtxSw(>,OSTickISR(>.3 .任务地实现整个系统是一个较为复杂地实时多任务控制系统,合理地任务划分对系统地运行效 率、实时性和乔吐量有较大影响.假设使任务划分过细,会使任务过于频繁切换,从而增加 系统开销.而任务分解不够彻底会影响系统运行地并行性,从整个系统考虑,人机交互地 软件设计具体划分为LCD显示任务和键盘任务.由于在此设计中整个系统软件设计还 包括运动控制系统任务、USB接口控制任务、花样内存管理任务,而这三个任务都与 LCD显示任务有不同程度地交互过程,而且工业绣花机地显示界面比拟复杂,因此把显 示任务和键盘任务分开设计,有利于多任务之间地交互,同时使显示代码更容易设计和维 护.具体任务划分如图3所示.看门狗任务UC/0S-II 地 RTOS 内核花样内存管理任务USB主机任务运动控制任务LCD显示任务|键盘控制任务u 12c以及外部中断程序|V=|用户参数设定全局 变量全局 变量'各个任务间地通讯各个任务间地同步图3工业绣花机任务地划分框图5. 1任务地创立和优先级地分配键盘任务 OSTask_key 优先级为5 堆栈大小2KBLCD显示任务 OSTask_LCDdisp优先级为6 堆栈大小1KB运动控制任务 OSTask_Motion优先级为7 堆栈大小1KBUSB HOST任务Task_USB_Host_Serve 优先级为8 堆栈大小1KB磁盘管理任务OSTask_Disk优先级为9 堆栈大小1KB看门狗任务 OSTask.FeedDog优先级为10堆栈大小256B代码实现如下所示:int main (void>(INT8U Mutex_erroOSInit (>o键盘任务OSTaskCreate(OSTask_key, (void *>0, &TaskStk_KeyKEY_TASK_STK_SIZE - 1, 5>o/LCD任务OSTaskCreate(OSTask_LCDdisp,(void *0, &TaskStk_LCDLCD_TASK_STK_SIZE - 1, 6>o运动控制任务OSTaskCreate(OSTask_Motion,(void*>0,&TaskStk_MotionMotion_TASK_STK_SIZE-1,7>o/USB主机服务任务优先级须高于其它使用USB主机地操作任务OSTaskCreate(Task_USB_Host_Serve, (void*>0,&TaskStk_HostUSB_TASK_Stk_SIZE-l, 8>o 磁盘管理任务OSTaskCreate(OSTask_Disk, (void *>0, &TaskStk_DISKDISK_TASK_STK_SIZE -1,9>o看门狗任务OSTaskCreate(OSTask_FeedDog,(void*>0,&TaskStk_FeedDogFEEDDOG_TASK_ST K_SIZE-l,10>oOSStart (>o /启动操作系统,开始调度while (1> (OSTimeDly(10>o return 0。5. 2各任务模块地结构键盘任务:在人机交互地软件设计中键盘任务地优先级较高,然后是LCD显示任务.任务与中断服务 之间地同步采用信号量地方式.键盘通过外部中断1触发,然后进入外部中断程序,通过调用 OSSemPost(KEY_EVENT>,使键盘任务进入就绪态,中断程序处理完成以后,使键盘任务开始 运行,在键盘任务执行完毕前通过OSSemPost(LCD_EVENT>给显示任务发送信号量,使显示 任务进入就绪态,由于显示任务优先级低于键盘任务地优先级,所以在键盘任务执行完毕后通 过调用OSSemPend(KEY_EVENTQ&err>,交出CPU地使用权,然后CPU执行LCD显示任务,显 示相应地内容.任务之间地通讯通过共享一个头文件(即全局变量来完成.具体程序结构如 下:键盘中断程序结构:void IRQ_EINT 1 _HANDLER(void>OSSemPost(KEY_EVENT> ° VlCVectAddr=Oo )键盘任务程序结构显示任务结构相同): void OSTask_key(void>