基于微处理器LPC2210实现μC/OS-Ⅱ关键算法的改进设计

发布者:美人如玉剑如虹最新更新时间:2023-04-03 来源: elecfans关键字:微处理器  LPC2210  μC  OS-Ⅱ  关键算法 手机看文章 扫描二维码
随时随地手机看文章

1 引言

当前,嵌入式开发领域对产品的要求越来越多.如通信速率,稳定性,产品功能,可扩展性,可移植性,适应性等。为了适应这些要求,作者对低版本的μC/OS-II做了一些改进。并选择一款性价比高的微处理器LPC2210作为其运行的硬件平台。本文论述的高级继电器保护装置除可以动态地实现模拟量和开关量的数据采集外,还可以作为web终端通过远程主机对终端进行控制或访问。


2 μC/OS-II其内核结构

宏观的讲,μC/OS-Ⅱ大致分成内核结构、任务管理、时间管理、任务之间的通信与同步和CPU的移植等5个部分。由于嵌入式多任务应用功能软件系统是应用设计的范畴,所以并不包含在内核中。内核保留给上层应用的接口有3个,分别是软保护、任务间的通信ITC、和设备服务DSR。一个μC/OS-II内核现状的结构图如图1所示。

基于微处理器LPC2210实现μC/OS-Ⅱ关键算法的改进设计

图1 μC/OS-Ⅱ内核现状结构简图

3 μC/OS-Ⅱ关键算法逻辑

μC/OS-II采用的是可剥夺型内核,它总是执行就绪条件下优先级最高的任务。系统通过两种方法进行任务调度:一是时钟节拍或其它硬件中断到来后,系统会调用函数执行切换任务功能;二是任务主动进入挂起态或等待态,这时系统通过发软中断命令或依靠处理器执行陷阱指令来完成任务切换,中断服务程序或陷阱处理程序的向量地址必须指向函数OSCtxSw()。任务的优先级唯一地标识了任务,即使两个任务的重要性是相同的,任务间也必须有优先级上的差异,这就意味着高优先级的任务被处理完成之后,必须进入等待态或者挂起态,否则低优先级的任务永远也不可能执行,从而严重暴露出μC/OS-Ⅱ的缺点,甚至造成系统瘫痪。在产品的开发中也不难发现其内核算法存在的一些问题,如内核具体代码方面的、体系结构方面的、以及移植作者方面的问题,其中最显著的就是硬实时性和设备驱动框架问题。


3.1硬保护算法的改进

在μC/OS-II操作系统中,临界区、硬保护和软保护是几个紧密联系的概念,而硬保护算法又与开关中断、堆栈和局部变量相联系。从保护的角度考虑,系统的代码可以划分为三种运行环境,即任务环境、中断环境和设备环境。当代码运行于这三种环境中时,需要的保护有很大的区别。下面将对临界区及其保护措施中的部分概念作出定义。

定义1:和中断环境相关的系统保护称为硬保护(HP,Hard Protect)。

定义2:和设备环境相关的系统保护称为设备保护(DP , Device Protect)。

定义3:纯粹任务之间的保护称为软保护(SP,Soft Protect)。

区别使用不同的保护机制对提高系统的中断能力和稳定性是非常重要的。当系统中大部分功能是与硬件设备进行数据交流时应尽量用软保护SP和设备保护DP代替硬保护HP,也是提高系统实时反应能力的重要手段。硬保护的方法有三种,在三种硬保护算法的实现方法中。第一种方法只是单纯的开关中断,因此最简单;但在嵌套调用时通常会出现内层的开中断代码干扰外层保护的逻辑。第二种方法借助堆栈功能很好地解决了第一种方法的嵌套问题,但堆栈指针无法确定。第三种方法是在每个硬保护代码的函数中定义一个局部变量,进入保护前保存状态,退出保护时恢复状态。当OS_CRITICAL_METHOD==3时,实现代码如下:

Void functionx()

{

#if OS_CRITICAL_METHOD==3

OS_CPU_SR cpu_sr;

#endif

⋯⋯

OS_ENTER_CRITICAL();

⋯⋯ //需要硬保护的临界区代码

OS_EXIT_CRITICAL();

}


3.2调度器算法的改进

众所周知,μC/OS-II在设计时强调实时性。它采用单一的基于优先级的抢先式调度算法,有效地保证了实时性的要求。其另外一个特点是任务切换带来的时延窗口很小。在任务的逻辑状态中,只有就绪态中优先级最高的任务才可以被真正运行。μC/OS-II任务级的调度器是通过函数OSSched()实现的,0ssched()基本上分布在μC/OS-II的各种ITC功能块中。调度器函数的伪代码如下:

{

(1)如果锁定任务切换(配合软保护),则直接退出。

(2)计算当前优先级任务。

(3)如果当前任务就是最高优先级任务,则直接退出。

(4)将最高优先级任务编号(OSPrioHighRdy)赋给当前任务编号(OSPrioCur)。

(5)读出最高优先级任务的控制块数据指针到OSTCBHighRdy指针。

(6)保存当前任务的环境。保存当前任务的sP到OS_TCB结构中的堆栈指针。

(7)读出最高优先级任务OSTCBHighRdy及其中的SP,设置堆栈,恢复所改任务的环境,并读出堆栈中保存的PC(程序计数器,任务当前代码位置)设置好处理器的PC器存器,任务即可开始执行。



在任务数据结构0S_TCB描述中只能见到等待、休眠和就绪三个标记值。每个任务具有一个任务控制块OS_TCB,任务控制块负责记录任务执行的环境,包括任务的优先级、堆栈指针和相关事件控制块指针等。内核将系统中处于就绪态的任务在就绪表中进行标注,通过就绪表中的两个变量OSRdyGrp和OSRdyTbl[]可快速查找系统中就绪的任务。让任务进入等待、就绪等状态等标记任务状态描述值的功能是分散在其它模块中完成的,在此需要修OS_TCB中的OSTCBStat字段。如用ITC中的信号量把任务设置到等待态或者把相关任务设置为就绪态等。


为了提高μC/OS-II适应性,在保证其实时性的前提下,对μC/OS-II的任务状态图的等待或挂起态分离为阻塞和等待态,以便实现优先级与时间片结合式调度。从而可以从体系结构上避免μC/OS-II存在的不足。如缺乏时间片调度、低优先级的任务很难得到执行、不支持同优先级任务的调度、优先级反转等问题。改进的任务状态转换图2。

图2改进的任务状态转换图

3.3任务就绪算法的改进

改进的μC/OS-II可以管理多达255个任务甚至更多,并且提供功能齐全的实时操作服务。实际上,就绪任务表是一个位矩阵。OSRdyTb1矩阵中位的值为0或1,表示对应的prio任务是否就绪。prio的数据位分为两部分,Y表示纵坐标,x表示横坐标,和矩阵中的一位对应。OSRdyGrp是纵坐标上就绪任务组的纪录,只要该组中任何一位代表的任务就绪(非零),Os_RdyGrp纵坐标的对应位就标记为就绪。任务就绪算法和查询就绪算法如下:

(1)任务就绪算法:根据任务优先级数使任务进入就绪状态

OSRdyGrp 1=OSMapTbl[prio》》3]; //用Y映射出纵坐标位

OSRdyTb1[prio》》3] 1=OSMapTb1[prio&0x07]; //用X映射出横坐标位

(2)查询就绪算法:通过此算法。μC/OS-II可以找出进入就绪态的优先级最高的任务。

y = OSUnMapTbl[OSRdyGrp]; //直接对应出纵坐标

x = OSUnMapTbl[OSRdyTbl[y]]; //直接对应出横坐标

prio=(y《《3)+x; //算出优先级

由于老版本的μC/OS-II最多只能管理64个任务.分别对应优先级0~63,其中0为最高优先级,63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务.实际上用户可以使用的任务数仅有56个。就绪任务表其实是一个8x8的位矩阵,而且这个矩阵可以简化为横纵两个数组,同时保持了常数运算。对于要求用μC/OS-II管理更多任务的情况,如要管理255个任务,该算法仍然具有意义。改进前和改进后的任务就绪表如图3。

图3改进前和改进后的任务就绪表

此时。最低优先级OS_LOWEST_PRIO的定义值可以大于63,但不能大于254。当μC/OS-II初始化的时候。最低优先级OS_LOWEST_PRIO总是被赋给空闲任务idle task。就绪表(readv list)和事件等待表(event wait lists)由一个16x16的矩阵代替。从理论上讲.这也是最低优先级OS_LOWEST_PRIO的定义值不能大于254的原因。


3.4软保护算法

纯粹任务之间的保护称为软保护(SP,Soft Protect)。在μC/OS-II中,软保护包括OSSchedLock和OSSchedUnLock两个函数,用于保护纯任务间全局变量的访问。基本思路是借助硬保护递增(解锁时递减)标记变量OSLockNesting,并在任务调度器中判断此标记变量,以此锁住任务调度器。


4 改进的μC/OS-II在LPC2210上的移植

移植μC/OS-II到LPC2210上,需编写与处理器相关的几个文件:OS_CPU.H、OS_CPU_A.S、OS_CPU_C.C。除了编写这三个文件之外,还必须编写目标板的初始化启动代码,这是运行任何其它软件的基础。μC/OS-II要求所有*.c文件都要包含头文件includes.h,这样使得用户项目中的每个*.c文件不用考虑它实际上需要那些头文件。使用includes.h的缺点是可能会包含一些不相关的头文件,也可能会增加每个文件的编泽时间,但却增强了代码的可移植性。本移植不使用软中断SWI做底层接口,在OS_CPU.H中定义#define OS_CRITICAL_METHOD 3,即采用第三种方式实现开/关中断。具体用法已在前面作了介绍。


5 结束语

本文针对μC/OS-II的关键算法在分析的基础上进行了改进,并将其应用到了基于ARM7的RISC微处理器LPC2210上。通过实际的调试和在高级继电器保护装置中的应用,表明改进方案是可行的。在不损害实时性的前提下,增强了μC/OS-Ⅱ对需求的适应性、执行效率和对任务的管理能力。


本文创新点:(1)通过对μC/OS-Ⅱ的体系结构和关键算法的分析,指出了其在应用中存在的不足和改进的方法。(2)增强了μC/OS-II对需求的适应性、执行效率和对任务的管理能力。(3)对EasyARM2200开发板提供的例程做了改进并将其移植到了自己的开发板上,为应用功能的扩展打下了基础。


关键字:微处理器  LPC2210  μC  OS-Ⅱ  关键算法 引用地址:基于微处理器LPC2210实现μC/OS-Ⅱ关键算法的改进设计

上一篇:基于LPC2138芯片和LP02138 SOC实现智能数字量采集板的设计
下一篇:基于微处理器LPC2131和GSM模块实现无线测控系统的设计

推荐阅读最新更新时间:2024-11-18 10:12

stm32之IIC应用实例(AT24C02芯片,硬件和软件方式驱动)
写完回头一看发现字数还不少,如果你觉得文字太枯燥,那么可以跳到后面程序设计,直接动手做实验。如果想仔细了解关于IIC协议的细节,那么希望你能慢慢把看完,看完后一定有所收获。 概述:IIC BUS(Inter Integrated Circuit BUS,内部集成电路总线)是飞利浦公司推出的二线制串行扩展总线;在IIC总线上,只需要两条线——数据线SDA线和时钟线SCL;多个器件可连接到同一个IIC总线上,每一个器件有一个唯一的识别地址,可一对多、多对一、一对一通讯;标准模式下传输速度为100Kb/s,快速模式下为400Kb/s。优点:引脚少,硬件实现简单,成本低。 关于IIC的接口原理有些书可以描述出好几页,但有时候看完了
[单片机]
stm32之IIC应用实例(AT24<font color='red'>C</font>02芯片,硬件和软件方式驱动)
Altera Nios II C2H编译器荣获EDN 2006年度创新奖
2007年4月6号,北京—— Altera公司(NASDAQ: ALTR)今天宣布,Altera Nios II C语言至硬件加速编译器 (Nios II C2H编译器)荣获EDN的软件类2006年度创新奖。Nios II C2H编译器是一种效能工具,能够把性能关键的C语言子例程自动转换为硬件加速器,并集成到FPGA Nios II子系统中,从而有效地提高了嵌入式软件的性能。 Altera亚太区市场总监梁乐观认为:“Nios II C2H编译器这一可靠的高性能嵌入式计算平台标志着FPGA发展取得了重大进步。该奖项表明,这种工具能够提高效能和系统性能,用户对此非常满意。” EDN创新奖授予电子业界最优秀的工程产品,它首先经过EDN技
[焦点新闻]
S3C2440的存储器映射(27根地址线如何寻找1G的地址)
查S3C2440的数据手册可知S3C2440可寻址1G的地址范围,但是S3C2440的地址线只有27根,理论上只能寻址2的27次方等于128M的地址范围。 通过细致的分析可知:S3C2440通过一个BANK来解决了这个问题。S3C2440有8个存储器BANK,引出了8根BANK线(对应nGCS0~ nGCS7),通过这个8根线来选通和关闭不同的存储器,这样S3C2440最多就可以连接8个128M的存储器。对某个BANK地址的访问实际上就是选通该BANK,于是ARM核只要发出一个地址,然后S3C2440的储存控制器把该地址解释成两部分:一部分是BANK地址,一部分是连接到该BANK存储器内部的地址就可以访问了
[单片机]
S3<font color='red'>C</font>2440的存储器映射(27根地址线如何寻找1G的地址)
iPhone 7新功能曝光:或将支持Type-C接口
    日前传出消息,iPhone 7又多了一项新功能。外媒表示iPhone 7也将配备USB Type-C接口。据称,新MacBook Pro将配备4个USB Type-C接口,这个消息让iPhone 7配备USB Type-C接口有了可能性。     具体来说,新MacBook Pro可以利用USB Type-C接口进行快速充电、数据传输、外接显示器,以及连接一切可以兼容的外部设备。新MacBook Pro除了能自己提升充电速度,还可以给iPhone 7充电,提高其充电速度。   爆料称,苹果放弃iPhone 7的“USB to Lightning”设计,转而使用“USB-C to Lightning”接口,不过,
[手机便携]
基于ARM7微处理器LPC2138实现OLED显示器的应用系统设计
ARM处理器凭借其强大的功能、极低的功耗、较小的封装广泛应用于门禁、无线抄表、智能温控等小型系统中,在这些系统中人机交互界面一般由LCD完成,但是通常LCD在显示亮度、环境适应等方面存在缺陷,所以越来越多新技术新产品逐渐出现,OLED就是一种。本文介绍了一种基于OLED的显示器VGS12864E的结构原理,给出了其在ARM7微处理器LPC2138系统应用中的硬件连接和具体程序设计。 系统简述 LPC2138简介 LPC2138是基于支持实时仿真和嵌入式跟踪的32/16 位ARM7TDMI-S CPU 的微控制器,带有512 KB高速Flash和32KB的SRAM。128位宽度的存储器接口和独特的加速结构使32 位代码能够在最大
[单片机]
基于ARM7<font color='red'>微处理器</font>LPC2138实现OLED显示器的应用系统设计
基于STM32的传统USB 2.0接口到Type-C的转换方案
围绕USB Type-C接口的话题已经很火爆了,很多公司也推出了Type-C相关芯片。它的优势主要体现在不分正反双面接插、传输速度快、供电强悍、支持音视频传输。 我们知道,STM32芯片大多数型号都带USB DEVICE或USB OTG模块,随着Type-C接口的不断推广与普及,STM32芯片的USB模块如何与Type-C接口连接的问题,自然会逐渐出现在STM32应用工程师的面前。 ST官方有个应用笔记【AN4775】介绍了如何用USB Type-C替代传统USB 2.0连接器的方案建议。同时,笔记里也简单介绍了有关USB Type-C及USB电源传输的一些基础知识。 这里不妨一起先看看USBType-
[单片机]
基于STM32的传统USB 2.0接口到Type-<font color='red'>C</font>的转换方案
linux2.6.32 内核移植s3c2440 - DM9000网卡驱动移植
参考: http://caiming1987612.blog.163.com/blog/static/118556676200961752714307/ http://blog.chinaunix.net/u1/34474/showart_401078.html http://hi.baidu.com/%D3%F3%C4%E0%C4%EA%B8%E2/blog/item/6256fea7bfceac98d0435819.html 时序图和引脚连接 :http://blog.chinaunix.net/u1/57901/showart_2023852.html (一)打开arch/arm/mach-s3c2440/mach-test
[单片机]
基于嵌入式微处理器EP9315的二次开发技术
嵌入式系统已成为IT行业研发热点,但基于嵌入式系统的二次开发应用却存在很多难点,难以真正地将嵌入式系统投入到实际应用中。武汉中科院岩土力学所智能仪器室对基于ARM9的嵌入式系统进行二次开发,采用ARM9微处理器取代原有的51单片机实现对SY5声波检测仪的控制。其中高速微处理器与现有低速设备接口及在配套的操作系统中就SY5声波检测仪原有功能设计相应驱动是本文研究的重点。同时提出了可行的硬件调试方法,为今后基于ARM9微处理器的硬件开发提供了思路。 1 系统构成 1.1 高性能的ARM9嵌入式微处理器 本设计选择Cirrus Logle公司2004年7月推出的EP93XX系列中的高端产品EP9315。该微处理器是高度集成的片上系统处
[应用]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved