欢迎来到天天文库
浏览记录
ID:23150150
大小:53.00 KB
页数:5页
时间:2018-11-04
《基于dsp的嵌入式实时操作系统的设计研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于DSP的嵌入式实时操作系统的设计研究实时嵌入式操作系统的应用日益广泛,本论文将DSP技术与嵌入式操作系统结合起来,分析探讨了面向DSP内核的嵌入式实时操作系统的设计,重点研究了嵌入式操作系统对DSP处理器内核的移植,分析探讨了移植的前提条件及修改问题,对于进一步提高面向DSP技术的嵌入式操作系统的研究应用具有一定借鉴意义。关键词:DSP设计;嵌入式系统;实时操作系统;内核移植1 引言 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用性
2、系统,嵌入式系统的核心是嵌入式操作系统,嵌入式操作系统可以统称为应用在嵌入式系统的操作系统,它具有一般操作系统的功能,同时具有嵌入式软件的特点。本论文将采用DSP设计技术对嵌入式操作系统进行设计,主要方法是将目前常用的实时嵌入式操作系统移植到具有嵌入式操作系统内核的DSP处理器上,以期从中找到能够可供借鉴或指导的有效的实时嵌入式操作系统的设计方法,并和广大同行分享。2 嵌入式处理器内核的分析2.1嵌入式操作系统选择 μC/OS-II是源代码公开的嵌入式实时内核,提供多任务调度与管理、时间管理、任务间同步与通信、内存
3、管理及中断服务等功能。自1992年诞生以来,μC/OS-II己经被广泛地应用于各种嵌入式系统。2.2DSP嵌入式处理器内核分析 要开发基于DSP的嵌入式实时操作系统,选择合适的嵌入式DSP芯片至关重要。本文选用了S3C44B0X嵌入式处理器。本实验是在英培特公司推出的EmbestEDUKIT-III型开发板上进行的。EmbestEDUKIT-III型开发板是一款基于Samsung公司的S3C44BOX处理器(ARM7TDMI)的全功能ARM开发板。硬件系统包含了嵌入式系统开发应用所需的大部分设备,如串口、以太X口、
4、USB口、音频输出、LCD及TSP触摸屏、5*4的小键盘、固态硬盘、大容量的Flash和SORAM等等。 S3C44B0X是16/32位的RISC(ReducedInstructionSetputer)处理器。它为手持设备和一般类型应用提供了高性价比和高性能的微控制器解决方案。为了降低成本,S3C44BOX提供了丰富的内置部件,包括:8KBcache,内部SRAM,LCD控制器,带自动握手的2通道UART,4通道DMA,系统管理器,代用P功能的5通道定制器,FO端口,RTC,8通道10位ADC,IIC-BUS接口,
5、IIS-BUS接口,同步SIO接口和PLL倍频器。S3C44B0X采用的是ARM7TDMI内核。3 嵌入式实时操作系统的移植3.1移植的前提条件分析 要使μC/OS-II正常运行,处理器必须满足以下要求: (1)处理器的C编译器能产生可重入代码。 (2)用C语言就可以打开和关闭中断。 (3)处理器支持中断,并且能产生定时中断(通常在10至100Hz之间)。 (4)处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。 (5)处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的指令。3.2μC
6、/OS-II中需要修改的代码 由于μC/OS-II为开源软件,我们可以很轻松的获得其初始源代码。然后根据移植的需要进行修改和移植。 (1)OS_CPU.H中需要针对具体处理器的字长重新定义一系列数据类型。 μC/OS-II自己定义了一套数据类型,如INT16U表示16位无符号整型,对于ARM这样的32位内核,INT16U是unsignedshort型,如果是16位的处理器,则是unsignedint型。 (2)OS_CPU.H中需要声明几个用于开关中断和任务切换的宏。 OS_ENTER_CRITICAL()
7、和OS_EXIT_CRITICAL():这两个宏用来禁止和允许中断。OS_TASK_SETHOD=1的情况,这种方法非常的简单,就是直接使用处理器指令CLI来关中断,STI来开中断。第二中方法是OS_CRITICAL_METHOD=2的情况,这种方法时将元中断状态保存到堆栈中然后关中断,在开中断之前再处理器寄存器原来的内容进行恢复。第三种方法是OS_CRITICAL_METHOD=3的情况,这种方法是写一个函数将CPU的状态寄存器保存到局部变量中,OS_EXIT_CRITICAL()通过调用另一个函数,从这个局部变量
8、中恢复寄存器,我们使用的这两个函数分别为OSCPUSaveSR()和OSCPURestoreSR()。 (3)OS_CPU.H中需要设置一个常量来标识堆栈增长方向。 在μC/OS-II中,用OS_STK_GROWTH来设置堆栈的增长方向#defineOS_STK_GROWTHl;//堆栈从高地址向低地址增长#defineOS_STK_GRO
此文档下载收益归作者所有