毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

以太网LED图文显示系统的设计 第4页

更新时间:2009-6-3:  来源:毕业论文

能对资源的分配以及任务调度不当导致系统死锁,从而降低了系统的可靠性,此时就
需要引入TRO[s9,‘01。RTOS是嵌入式系统启动后首先执行的背景程序,他作为主控程序
管理整个系统的资源,对系统中的各个任务进行调度。用户的应用程序是运行于RTOS
上的各个任务,每个任务均有一个优先级,RTOS根据各个任务的优先级和任务所处的
状态,动态的在各任务间进行切换[‘Jl。
林/cos一11是一个公开源代码的实时操作系统内核,它提供了实时系统所需的基本功
能。核心部分代码只有8.3KB,短小精悍。拜C/os一n的特点主要有[81:开源、可裁减和扩
展、可占先、可确定性、多任务。拜C/OS一n内核大部分由C语言实现,有很好的移植性,
在多种不同的CPU上实现只需做很少的工作。开放性、移植的简化以及内核的可裁减使
其在与其它商业化嵌入式软件的竞争中占有了一定的市场。事实表明,该系统能适应通
讯类产品的实时应用。图2.1表示的是拼C/os一n的文件结构以及与硬件的关系。
2.2
2.2.1
pC/05一11的分析
临界段管理
代码的临界段指的是不可分割的代码。一旦这部分代码开始执行,则不允许任何中
断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完
以后要立即开中断。
微处理器一般都有关中断/开中断指令,用户使用的C语言编译器必须有某种机制能
够在C中直接实现关中断/开中断的操作。拜CO/S一11定义两个宏m(~)s来关中断和开中
断,以便避开不同C编译器厂商选择不同的方法来处理关中断和开中断。拜Co/S一11中的
这两个宏调用分别是:05--ENTE--RCRITICALO和05_EXI几C班TICALO。因为这两个
宏的定义取决于所用的微处理器,故在文件05夕P.uH中可以找到相应宏定义。每种微
处理器都有自己的05CP.UH文件。
2.2.2任务管理
拜C/OS一n可以管理多达64个任务,但目前版本的拜C/OS一n有两个任务己经被系统占
用了。保留了优先级为0、1、2、3、05LOW王STP班O一3、05LOWESTPRIO一2、
05一OWEST一PRIO一1以及05少OWESTP一RIO这8个任务优先级以被将来使用。
05LOWESTPRIO是作为定义的常数在05CF.GH文件中用定义常数语句#define
ocnstnat定义的。因此用户可以有多达56个应用任务。必须给每个任务赋以不同的优先
级,优先级可以从。到05工oWEST--PRIO一2。优先级号越低,任务的优先级越高。拜/cos一11
总是运行进入就绪态的优先级最高的任务。任务状态如图2.2所示[sJ。
大连理工大学硕士学位论文
一般情况下,每个任务都是一个无限的循环。每个任务都处在图2.2所示的5种状态
,这5种状态是休眠态,就绪态、运行态、挂起态(等待某一事件发生)和被中断态。
态相当于该任务驻留在内存中,但并不被多任务内核所调度。就绪意味着该任务己
图2.2pC/05一H任务的状态
Fig.2.2Satteof环CO/S一11,taks
备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时
运行。运行态的任务是指该任务掌握了CPU的控制权,正在运行中。挂起状态也
以叫做等待事件态WATI创G,指该任务在等待,等待某一事件的发生。.最后,发生
时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断

图2.3中的函数使任务从一种状态变到另一种状态。
2.3时间管理
拜C/OS一H(其它内核也一样)要求用户提供定时中断来实现延时与超时控制等功能。
定时中断叫做时钟节拍,它应该每秒发生10至100次。时钟节拍的实际频率是由用
的应用程序决定的。时钟节拍的频率越高,系统的负荷就越重。
拜C/OS一n提供了这样一个系统服务:申请该服务的任务可以延时一段时间,这段时
的长短是用时钟节拍的数目来确定的。实现这个系统服务的函数叫做OSTimeD1y()。
该函数会使井C/OS肛进行一次任务调度,并且执行下一个优先级最高的就绪态任务。
时钟节拍何时发生,拜C/OS一n都会将一个32位的计数器加1。这个计数器在用户调用
St斌0初始化多任务和,4294,967,295个节拍执行完一遍的时候从o开始计数。
2.4任务之间的通信与同步
基于以太网的ELD图文显示系统的设计
在林C/Os一11中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯。
除了共享数据以外还可以有信号量、邮箱和消息队列。
一个任务或者中断服务子程序可以通过事件控制块ECB但vnetCnoortlBlokc)s来向
另外的任务发信号。这里,所有的信号都被看成是事件E(veni)。一个任务还可以等待另
一个任务或中断服务子程序给它发送信号。只有任务可以等待事件发生,中断服务子程
序是不能这样做的。对于处于等待状态的任务,还可以给它指定一个最长等待时间,以
此来防止因为等待的事件没有发生而无限期地等下去。
多个任务可以同时等待同一个事件的发生。在这种情况下,当该事件发生后,所有
等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪状态,准备执行。上
面讲到的事件,可以是信号量、邮箱或者消息队列等。当事件控制块是一个信号量时,
任务可以等待它,也可以给它发送消息。
2.2.5内存管理
在ANslc中可以用malloc()和erfeo两个函数动态地分配内存和释放内存。但是,在
嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成
许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,
使得程序到后来连非常小的内存也分配不到。
︸曰︸日曰日曰︸门目目目目Pa币tion浮1Parttiion浮2lll一}}}lll111}}}}}}}}}}}}}}}lll
}}}!!!
!!!」」
llllll
llllll
}}}lll
图2.3多个内存分区
Fig.2·3MultiPlememoyrPartition
在井/cos一n中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数
个大小相同的内存块。利用这种机制,拜C/oS一n对malloc()和rfeeo函数进行了改进,使
得它们可以分配和释放固定大小的内存块。这样一来,malloco和rfeeo函数的执行时间
也是固定的了。如图2.3[8],在一个系统中可以有多个内存分区。这样,用户的应用程序
大连理工大学硕士学位论文
以从不同的内存分区中得到不同大小的内存块。但是,特定的内存块在释放时必须
放回它以前所属于的内存分区。显然,采用这样的内存管理算法,上面的内存碎片
就得到了解决。
3移植pC/05一11
3.1概述
目前,针对ARM处理器核的C语言编译器有很多,如SDT、ADS、IAR、TASKE呵G
CC等。目前在国内最流行的是SDT、ADS和GCC。SDT和ADS均为ARM公司自己开
ADS为SDT的升级版,鉴于以后ARM公司不再支持SDT,所以不选择SDT。GCC虽
持广泛,很多开发套件使用它作为编译器,但与ADS比较其编译效率较低,这对充
挥芯片性能很不利,所以,权衡后最终确定使用ADS编译程序和调试〔‘〕。
ARM7处理器核具有用户、系统、管理、中止、未定义、中断和快中断七种模式,
除用户模式外其它均为特权模式。为了尽量减少任务代码错误对整个程序的影响,
的任务模式定为用户模式,可选为系统模式,同时提供接口使任务可以在这两种模
切换。带T变量的ARM7处理器核具有两个指令集,标准犯位ARM指令集和16位
叮b指令集,为了最大限度地支持芯片的特性,任务应当可以使用任意一个指令集并
以自由切换,而且不同的任务应当可以使用不同的指令集,移植代码应该实现这一点。
3.2移植介绍
所谓移植,就是使一个实时内核能够在其他的微处理器或微控制器上运行。环C/OS一n
代码绝大部分是使用移植性很强的ANSIC写的,与微处理器硬件相关的部分是使用
语言写的。汇编语言写的部分己经压缩到最低的限度,以使林C/OS一n便于移植到其
处理器上。
要使拜C/Os一n正常运行,处理器必须满足以下的要求:处理器的c编译器能产生可
型代码;处理器支持中断,并且能产生定时中断;用C语言就可以开关中断;处理
支持一定数量的数据存储硬件堆栈;处理器有将堆栈指针以及其他CPU寄存器的内
出、并存储到堆栈或内存中去的指令。
移植拜C/OS一H只需要更改那些和硬件相关的文件,而大部分源代码可以保持不变。
更改项如表2,1所示。
3.3关于头文件1ne1udes,h和eonf1g.h
拜/cos一n要求所有.C的文件都要包含头文件incutdes.h,这样使得用户项目中的每个
件不用分别去考虑它实际上需要哪些头文件。使用includes.h的缺点是它可能会包含
些实际上不相关的头文件,使每个文件的编译时间增加,但这样做可以增加代码的可
基于以太网的ELD图文显示系统的设计
表2.1pC/OS一工工需要移植的代码[Jl
Tab.2.lCodesubjeettortansPlnat
移植内容类型所属文件描述
数据类型
数据类型
与编译器无关的数据类

堆栈的数据类型
05CPU.h
开关中断的代码
常量
函数
函数
BOOLEAN、I’NTSU、INTSS、INT16U、
INT16SINT32U、NIT32S、FP32、FP64
05STK
OSweENTEReeCRInCALO和
OSeeEXI几CRPTICALO
05STKGROWTH
05TASKSW
OSTaskstklnito
OSnliHtoo妞卿no、OSnliHtookEndO、
0STasCkreatHook()、OSTaskDe1Hook()、
OSTaskSWHookO、0STSakStatHook()、
OSTCBIniHtokoo、OSTimeTickHokoO、
OSTaskidleHooko
定义堆栈的增长方向
任务切换时执行的代码
任务堆栈初始化函数
05CPUC
.
e
函数
拜005一n在执行某些操作
时调用的函数,一般为空
函数0SStartHighRdy()
05CPUA.asm
函数OSIntC饮SwO
中断服务程序05石e妙SRO
进入多任务环境时运行
优先级最高的任务
中断退出时的任务切换
函数
时钟节拍中断服务程序
移植性。在本文的移植中另外增加了一个头文件ocnfig.h,要求所有用户程序必须包含
ocnfi.gh,在ocnfi.gh中包含inchides.h和特定的头文件和配置项。而拜C/OS一n的系统文件
依然只是包含inchide.sh,所有的配置改变包括头文件的增减均在ocnfi.gh中进行。这样,
拜C/OS一n的系统文件需要编译的次数大大减少,编译时间随之减少。
2.3.4编写05多PU.H
在编写05CP.UH时需要做以下工作:
()l为了增强系统的可移植性,拜C/OS一n不使用C语言中的与处理器类型相关short,
int和olng等数据类型的定义。在移植中定义了一些不依赖于编译的整数数据类型,这样
的数据类型即直观可移植性又强。
(2)使用软中断SWI作底层接口
ARM处理器核有2个指令集,用户任务还可以有两种处理器模式:用户模式和系统
模式,组合起来具有4种方式,各种方式对系统资源有不同的访问控制权限。同时,移
植需要兼顾把井C/OS一11内核事先固化在Flash中,事后任务从别的地方调入应用。为了使
底层接口函数与处理器状态无关,同时使任务调用相应的函数不需要知道函数位置。本

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

以太网LED图文显示系统的设计 第4页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。