新闻中心

EEPW首页>模拟技术>设计应用> μC/OS-II在数字微波监控系统中的应用

μC/OS-II在数字微波监控系统中的应用

作者: 时间:2011-08-03 来源:网络 收藏


(4) Task_SPI_OP:通过SPI接口完成远端信息交换处理以及数据链路各接口环回等设置。

(5) Task_DATA_OP:主要完成网络数据管理、AD转换、公务的控制,控制微波接口、时钟芯片的设置和读取,完成误码率的计算以及对串行E2PEOM存储芯片数据的存取。

(6) Task_COMM1:主要是完成出串口与其它设备间通信数据的收发。

(7) Task_ODUCOMM0:主要是IDU和ODU设备的通信。

2.2 任务的创建

经过分析和设计之后,就可以使用μC/OS- II所提供的函数创建任务,这里给出了如何创建液晶显示任务的实例,其它任务的创建与之类似,其过程如下:

OSTaskCreate (Task_LCD_OP,(void *)0, LCDopreate[TaskStkLengh - 1],8);

Task_LCD_OP是要创建的任务;(void *)0是传递给任务的参数,因为这里所创建的任务没有参数,所以其值为0;LCDopreate[TaskStkLengh - 1]是分配给任务的堆栈,这在程序中是事先定义好的,最后一个数字8是分配给该任务的优先级。

2.4 任务优先级的划分

为了使整个系统的实时性能够得到满足,所以要以任务的紧迫性、关键性、频繁性和中断的重要性等为依据,对不同的任务安排不同优先级别。在系统优先级的分配上,μC/系统级保留了0和1,用户程序任务优先级从2开始,最低优先级定义为12。

在该中,任务不同,对实时性要求也不同,通过定时任务来控制。定时任务划分为20ms到5s多个时间级别,在同一个任务中可以再定时地处理一些事务。其中,单独设置了一个任务Task_TIME_FLG来处理这些时间等级的划分和管理,由于它的运行涉及到其它任务的时间标志,是一个关键任务,所以必须将其运行优先级设置为用户程序的最高级别。系统中除了对设备进行设置外,其余时间主要通过串行接口进行信息交互,也是较为重要和紧迫的,这一工作由串口1来承担,所以在设置Task_COMM1的优先级次之;其次是Task_ODUCOMM0;Task_DATA_OP数据操作任务对实时性要求不高,级别随之降低;Task_SPI_OP任务因其数据量小,故不是紧迫任务;Task_KEY按键任务、Task_LCD_OP液晶显示是实现人机交互的,所以实时性要求也比较低。

从以上分析可以把任务的优先级进行如下分配:Task_TIME_FLG为2,Task_COMM1为3,Task_ODUCOMM0为4,Task_DATA_OP为5,Task_SPI_OP为6,Task_KEY为7,Task_LCD_OP为8。

2.5 任务的调度

μC/调度的依据是任务就绪队列表,系统从处于就绪队列的任务中选择一个优先级最高的来运行,它可以管理多达64个任务。对于多任务的管理,μC/OS- II 是通过调度器完成。其中任务级的调度是由函数OSSched()完成, 而中断级的调度是由函数OSIntExiT()完成。

本系统的任务中,Task_TIME_FLG时间标志处理任务优先级最高,运行也最频繁,它和其它任务切换是属于普通的任务切换,而Task_COMM1和Task_ODUCOMM0的任务切换是属于中断级的切换,只有在发生中断时才切换,正常运行时和普通任务的切换方式一样。其余任务的切换都作为普通切换方式处理。在任务切换过程中如果当前任务需要延时判断,为保证其它任务的正常运行,可通过调用函数OSTimeDly(2)挂起当前任务,其中键显部分有三级菜单,每一级菜单又有许多选项,为了提高按键扫描的实时性,在进入每一级菜单后必须调用该函数挂起当前任务,并扫描有无按键,如有则执行对应处理程序,没有按键则把自己挂起,直到有按键方可退出。μC/如此处理,程序不会死等,按键和菜单显示配合很协调,只要有按键就能得到及时处理。

2.6 中断的设置与使用

在ARM7体系的CPU中,最多可以有32个中断源。对每个具体的中断源,可以将其定义为快速FIQ中断,使其具有最高的优先级;也可以定义为向量IRQ中断,使其具有中等优先级,但向量IRQ的总数不能超过16个。μC/OS-II本身使用一个定时中断源作为系统节拍中断。

μC/OS-II响应中断的过程:当系统接收到中断请求后,并且CPU处于中断开放状态,系统就会终止当前运行的任务,按照中断向量的指向运行中断服务子程序;当中断运行结束后,系统就会返回到被中止的任务继续运行,或者转向运行另一个更高优先级的就绪任务。

本系统中使用了两个定时中断源、两个串口中断源、一个I2C中断源。μC/OS-II中断的设置和初始化由target.c中的TargetInit函数完成,通过该函数实现了串口、I2C和定时中断的初始化设置。其中VICInit实现过程如下,将中断服务子程序的地址写到相应的中断向量寄存器(VICVectAddrx),并从相应的中断向量控制寄存器(VICVectCntlx)选中相应的中断,将其启用。当CPU接收到中断请求就能找到对应中断服务程序的地址,并转到中断服务程序去运行。

2.7 堆栈的设置与使用

堆栈是依据“后进先出(LIFO)”原则组织的连续存储空间。为满足任务切换、响应中断以及存储任务私有数据的需要,每个任务都配有自己的堆栈。

由于LPC2214的片内Flash是256KB,片内RAM是16KB,根据需要CPU没有扩展外部闪存,故要求代码精练,RAM分配一定要合理。尤其是在液晶显示任务中,由于显示的菜单项目较多,因此任务之间切换增加了RAM的需求。如果每个任务堆栈开辟过小,任务切换时就会出现私有数据丢失,堆栈溢出直至程序运行出错;反之堆栈设置过大,就会使内存RAM空间紧张,因此设置堆栈空间必须适中。本系统中开始设置显示任务堆栈大小为64个字,调试运行中发现进入多级菜单时会出现程序死锁的现象,扩大对应任务堆栈空间问题就得到解决。

3 软件的调试环境与下载

该系统需要建立ADS1.2集成仿真环境,使用了广州周立功单片机发展有限公司提供的专用工程模板。如果硬件没有扩展外部存储器,就使用LPC2100的工程模板;否则使用LPC2200的工程模板。在调试过程中选用DebugInFLASH模式烧写调试;软硬件调试完成,可选用RelInFlash模式烧写,后一种烧写方式会加密芯片,使之无法二次烧写;如果加密之后需要重新烧写芯片,就必须使用ISP进行解密之后方可烧写,调试程序时一定要注意这点。

4 结束语

μC/OS-II应用于软件开发之后,系统的软件结构更加简洁实用,系统的实时性和稳定性得到提高,设备在实际应用中表现稳定可靠,并取得一定的经济效益,μC/OS-II在嵌入式系统中具有广泛的应用推广价值。

本文引用地址: //m.amcfsurvey.com/article/187412.htm
上一页 1 2 下一页

评论


相关推荐

技术专区

关闭