当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]摘要:介绍源代码公开的实时操作系统μC/OS-II的特点、内核结构及ADSP—BF53l的硬件特征,同时给出将μC/0S-II移植到ADSP- BF531型数字信号处理器上的详细步骤和

摘要:介绍源代码公开的实时操作系统μC/OS-II的特点、内核结构及ADSP—BF53l的硬件特征,同时给出将μC/0S-II移植到ADSP- BF531型数字信号处理器上的详细步骤和关键代码。 关键词:RTOS;μC/OS-II;ADSP-BF53l;移植 引言 随着计算机技术的发展,嵌入式系统的应用愈来愈广泛,对人们的生活产生了巨大的影响。通常,嵌入式系统的软件部分都应用了实时操作系统(简称RTOS),在特定的RTOS之上开发应用软件,可以让程序开发人员屏蔽掉许多底层硬件细节,提高软件功能设计效率,简化开发难度,同时使得程序调试方便,移植简单,易维护,大大缩短开发周期,RTOS也因此越来越受到嵌入式系统开发人员的青睐。目前实时操作系统很多,如VxWorks、Windows CE、pSOS等,但这些软件的价格和使用成本(版权费、维护费等)都十分昂贵,因此商业级RTOS软件在使用上受到诸多的限制。而μC/OS-II则不同,它的源代码是全部公开的,并且完全免费,是一个自由操作系统,程序开发人员可以改写其中的源代码使之符合自己的要求。由于其极强的可移植性和可裁减性,用户可以根据自己的需要,裁剪掉不需要的部分,使操作系统变得小巧灵活,同时又能够满足用户特定操作系统的需要。μC/OS-II的可靠性完全可以与商业级RTOS软件相媲美,因此笔者在移植过程中选用了这一实时操作系统。 1 ADSP—BF531的硬件特征 Blackfin系列中的ADSP—BF531型数字信号处理器是由ADl和Intel公司合作,针对音频和视频信号的编解码、手持设备和移动通信设备而研发的16位定点处理器,是建立在微信号架构基础之上,集高性能数字信号处理器与微控制器于一身。ADSP-BF53l的内核工作频率最高可达 400MHz,处理器内核中包含2个16位MAC、2个40位ALU及4个8位ALU。专门用于视频信号的处理;还集成了许多片上外设,包括硬件 UART、SPI接口、PPI接口、同步串口、

看门狗电路、16个GPIO接口等。为了达到降低功耗的目的,该处理器具有多种工作模式,同时通过编程还可以动态改变处理器内核的工作频率和电压.这些特性都为手持设备提供了绝佳的选择。用户可以利用ADI公司提供的VisualDSP++3.0(或更高版本)集成开发环境对处理器进行编程、调试和开发。 2 实时操作系统介绍 μC/OS-II是一种专门为微处理器设计的占先式实时多任务操作系统,具有源代码公开、可移植性和可裁减性强、代码可固化、稳定性和可靠性高等特点。其内核主要提供任务管理、内存管理、时间管理等服务,系统最多可以支持64个任务(8个留于系统),每个任务均有自己独立的优先级。由于内核为占先式的,因此总是运行优先级最高的任务。系统提供了丰富的函数可供调用,实现任务间的通信和切换。μ/OS-II的大部分代码都是使用标准的A-NIS C编写的.只有与处理器相关的一部分代码使用汇编语言.因此具有极强的移植性,在大多数8位、16位和32位处理器上都能稳定的运行。 图1示出μC/OS-II的软硬件体系结构。从图中可以看出,要实现μC/OS-II的移植,必须为其编写OS_CPU.H、0S_CPU_C.C和 OS_CPU_A.ASM 3个文件,这3个文件都与处理器的硬件特性相关,提供任务切换和系统时钟功能。其余源文件的代码都是公开的,可以直接从μC/OS-II的官方网站下载。 3对编译器的要求 虽然μC/OS-II具有很强的移植性,但在移植时,对处理器的编译器有如下几点要求: 处理器的C编译器能够产生可重人代码; 用C语言可以打开和关闭中断; 处理器支持中断,并且能够产生定时中断; 处理器能够容纳一定量数据的硬件堆栈; 处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈空间或内存中的指令。 ADSP-BF531型处理器的集成开发环境Visu-al++3.0通过关键字asm能在C代码中嵌入汇编语言,同时内核定时器可以为系统提供定时中断,总数量达20kbyte的片上数据RAM和SP、FP、USP 3个堆栈指针寄存器为操作系统各任务提供了丰富的硬件堆栈空间及对堆栈的方便操作。笔者正是在这些基础上利用Visual++3.0编译环境成功地完成了对ADSP-BF531处理器的μC/OS-II移植。 4 移植μJLC/OS-II 4.1重定义OS_CPIJ.H文件 4.1.1与编译器相关的数据类型 不同的处理器有不同的字长,μC/OS-II不使用C的short、int、long等与编译器相关的数据类型,而是重新定义了一系列类型以确保系统的可移植性,在系统移植时必须在OS_CPU.H头文件中对这些数据类型重新定义,具体内容如下: typedef unsigned char BOOLEAN typedef unsigned char INT8U typedef signed char INT8S typedef unsigned short INTl6U typedef signed short INTl6S typedef unsigned int INT32U typedef signed int INT32S μC/OS-II中的指针根据处理器堆栈数据入口宽度定义为OS_STK类型: typedef unsigned int OS_STK 4.1.2临界代码 RTOS在进入系统临界区之前都必须先关中断,退出后再开中断,μC/OS-II定义了2个宏指令来关闭/打开中断:

#define OS_ENTER_CRITICAL0 asm(“cli%O:”:”=d”(InterrupLach)) #define OS_EXIT_CRITICAL() asm(“sti%0:”::”=d”(InterrupLaeh)) 其中InterrupLaeh为一全局变量,用于开关中断时 IMASK寄存器内容的恢复和保存。 4.1.3堆栈增长方向设定 在OS CPU.H头文件中还必须根据处理器堆栈的增长方向对OS_STK_GROWTH进行宏定义,由于ADSP-BF531是按照由高地址到低地址的结构组织处理器堆栈,因此宏定义如下: #define OS_STK_GROWTH 1 4.1.4 OS_TASK_SW0宏定义 OS_TASK_SW0在μC/OS-II从低优先级任务切换到高优先级任务时被调用,定义如下: #define OS_TASK_sw() asm(“raise 13;”) 4.2编写OS_CPU_C.C文件 μC/OS-lI的移植要求用户在OS_CPU_C.C文件中编写6个简单的C函数,其中主要是完成OS-TaskStkInit (),其余5个函数可以不作处理。OS-TaskStkInit()负责任务堆栈的初始化,使得任务堆栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。不同的编译器在函数调用时有不同的入栈方法,因此在具体实现时必须根据处理器的编译环境进行调整。VisualDSP++3.0在函数调用时的堆栈结构如图2所示。 OSTaskStkInit()调用时需要传递任务代码起始地址(task)、用户参数指针(pdata)、任务堆栈顶端的地址(堆栈栈顶指针 ptos)、返回参数为新任务堆栈栈顶指针,函数原型如下: void OSTaskStkInit() {OS_STK*stk; stk=(void *)ptos; opt=opt; *stk--=fINT32U)pdata;//用户数据区 *stk--=fINT32U)(task);//RETI寄存器 *stk--=fINT32U)ptos;//FP寄存器 (由于需要入栈的寄存器数量比较多,限于篇幅,在此省略其中多数) *stk--=fINT32U)0; //SEQSq、AT寄存器 *stk--=fINT32U)0;//ASTAT寄存器 retum((void*)stk);} 任务建立时调用该函数对新建任务的堆栈进行初始化,初始化后的堆栈结构如图3所示。 4.3编写OS_CPU_A.ASM文件 μC/OS-II移植的最后还需要用户编写4个重要的汇编函数,包括OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()及 OSTickISR()。分别介绍如下: 4.3.1 OSStartltighRdy()函数 该函数由OSStart()调用,用以运行优先级最高的就绪任务,其运行过程:调用用户定义的OS-TaskSwHook()数→获取任务堆栈指针→置位全局 变量0SRunning 出栈CPU寄存器 中断返回。在ADSP-BF531中的实现如下: _OSStartHighRdy: call_OSTaskSwHook; p0.1=_OSTCBHighRdy; p0.h=_0STCBHighRdy; pl=[p0]; ssync; sp=[p1]; p0.1=_OSRunning; p0.h=_OSRunning; r0=TRUE; [p0]=r0; ASTAT=[sp++]; SEQSTAT=[sp++]; FP =[sp++]; RETI=[sp++; rti; 4.3.2 OSCtxSw()函数 实时操作系统内任务级的切换是通过处理器的软中断实现的,并且软中断服务例程的向量地址必须指向OSCtxSw()函数,因此该函数的汇编程序代码如下: _OSCtxSw: [--sp]=RETI; [--sp]=FP; [--sp]=SEQTAT; [--sp]=ASTAT; p0.1=_OSTCBCur; p0.h=_OSTCBCur; pl=[p0]; ssync; [pl]=sp; call_OSTaskSwHook; p0.1 =_OSPrioHighRdy; p0.h=_OSPrioHighRdy; r0=[p0]; p0.1=_0SPrioCur; p0.h=_OSPrioCur; [p0]=r0; p0.1=_OSTCBHighRdy; p0.h=_OSTCBHighRdy; pl=[p0];[!--empirenews.page--]

rO=[p0]; ssync; sp=[p1]; p0.1=_OSTCBCur; p0.h=_OSTCBCur; [p0]:r0; 、 ASTAT=[sp++]; SEQSTAT=[sp++]; FP:[SP++]; RETI=[sp++]; rti; 4.3.3 OSIntCtxSw()函数 OSIntCtxSw()用于实现中断级任务切换,由于该函数在中断服务程序中调用,因此在函数代码中不需要寄存器入栈,但堆栈结构中还包含了一些用户不需要的函数调用返回地址,因此该函数必须在最初清理堆栈(调整堆栈指针的位置),其汇编程序代码如下: _OSIntCtxSw: p0=20; sp=sp+p0; p0.1=_OSTCBCur; p0.h=_OSTCBCur; pl=[p0]; ssync; [p1]=sp; call_OSTaskSwHook; p0.1=_OSPrioHighRdy; p0.h=_OSPrioHighRdy; r0=[p0]; p0.1=_OSPrioCur; p0.h=_OSPfioCur; [po]=10; p0.1=_OSTCBHighRdy; p0.h=_OSTCBHighRdy; pl=[p0]; r0=[p0]; ssync; sp=[p1]; p0.1=_OSTCBCur; p0.h=_0STCBCur; [po】=r0; ASTAT=[sp++]; SEQSTAT=[sp++]; FP =[sp++]; RETI=[sp++]; rti; 4.3.4 OSTicklSR()函数 μ,C/OS-II要求用户提供一个时钟资源来实现时间的延时和期满功能。笔者在移植过程中使用内核定时器产生时钟节拍,并通过定时器中断服务例程 OSTickISR0实现任务切换等功能,该函数的汇编程序代码如下: _OSTicklSR: [--sp】=RETI; [--sp]=FP; [--sp]=SEQTAT; [--sp]=ASTAT; call_OSIntEnter; call_OSTimeTick; call_OSIntExit; ASTAT=[sp++]; SEQSTAT=[sp++]; FP =[sp++]; RETI=[sp++]; rti; 4.4程序下载及调试 完成以上文件的修改和编写之后。就可在Vi-sualDSP++3.0环境中对所有的源文件进行编译和连接,生成处理器可执行的.dxe文件,通过 JTAG直接下载到处理器内核的程序区运行。由于VisualD-SP++3.0提供了强大的调试功能,用户能够很清楚地了解μC/OS--II在处理器内的运行情况,这无疑也对μC/OS-Ⅱ向ADSP—BF531移植提供了强大的支持。 5 结束语 详细介绍了向ADSP—BF531型处理器移植μC/OS-II实时操作系统的步骤和与处理器相关函数的代码编写,并成功地进行移植。通过测试,实时操作系统各任务之间的调用、中断处理、任务之间的通信等都能够稳定的运行。μC/OS-II实时操作系统的使用。将程序员从冗繁的流程图中解放出来,使得应用程序的设计过程大大简化,并且程序的可读性、扩展性、可靠性也得到了很大的改善。 ------------ 关于μC/OS-II系列软件版权的说明 Micrium 公司产品包括μC/OS-II,μC/GUI,uC/FS,μC/TCP-IP,μC/USB等。Micrium 公司提供嵌入式系统应用方面的产品,并对其软件拥有知识产权。Micrium花费了大量的时间和财力为嵌入式领域提供高质量的软件产品。所有上述产品都以源代码的形式提供给客户,具有极大的适用性。产品不是免费软件,也不是开放源码的软件,因此,不能免费使用,需要清楚的阐明μC/OS-II和系列的软件不是开放源码的免费软件,这是和Linux完全不一样的。 开发和研究者可以通过购买Micrium公司的Jean先生的μC/OS-II的书籍,而得到μC/OS-II源代码,但是仅可以作为个人和学校学习使用,所有和μC/OS-II直接和间接相关的商业目的行为,必须购买使用μC/OS-II及系列产品的商业授权,包括芯片/单板/系统厂家的任何参考设计,教学设备和最终的产品,如果没有得到Micrium公司Jean先生签字的合法授权都是不合法的使用, 这在μC/OS-II的书籍Micrium公司(www.micrium.com)和中国代理商-北京麦克泰软件公司网站(www.bmrtech.com)上面中有明确规定。 Micrium公司其它软件如μC/GUI,μC/FS,μC/TCP-IP,μC/USB 等的销售模式与μC/OS-II不同,如果没有购买使用授权,完全不可以拥有该源代码,也不能将源代码用于产品的设计,培训,教学和生产。 μC/OS-II, μC/GUI,μC/FS,μC/TCP-IP,μC/USB 等授权方式有:单个产品、产品线(系列)、按照CPU 划分的产品三种形式,μC/OS-KA,μC/OS-VIEW 等工具是按照使用人的数目收取费用的,相对起传统的RTOS 动辄2-3万美圆的开发费用和每块单板的使用费(根据数量从数百到几个美圆),μC/OS-II及系列产品是采用一次性的收费方式,应该只是大约相当于传统RTOS 的10-20% 的总体费用。 如果您正在将μC/OS-II系列软件用于您的产品,您需要购买并获得正式使用授权。 北京麦克泰软件技术有限公司

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2023年2月16日 /美通社/ -- 近日,诺华中国宣布与中国红十字基金会正式启动"中国地中海贫血救助项目"广西地区专项援助,将在当地定向资助困难家庭地中海贫血患儿,同时通过相关医生培...

关键字: BSP 控制 移植 大众

北京2022年12月7日 /美通社/ -- 2022年12月3日,由高博医学(血液病)广东研究中心南方春富(儿童)血液病研究院、南方医科大学南方医院共同主办的高博医学论坛·华南造血干细胞移植论坛通过线下线上...

关键字: 移植 HD PID 血细胞

捐款近4000万 上海2022年12月7日 /美通社/ -- 2022年12月7日下午,中芯国际"芯肝宝贝计划"十年纪念暨2022年度捐赠仪式在上海仁济医院举行。十年来,该项目捐赠善款总额近4000...

关键字: 中芯国际 移植

北京2022年11月14日 /美通社/ -- 2022年10月,高博医学(血液病)北京研究中心北京高博博仁医院造血干细胞移植科迎来了五周岁"生日"。在吴彤主任带领下,移植科于2017年从无到有,历经五...

关键字: 移植 OS MT CD

上海2022年11月6日 /美通社/ -- 在第五届中国国际进口博览会期间,武田制药携5款创新产品亮相武田罕见遗传与血液疾病领域专场发布会。用于移植后抗巨细胞病毒(CMV)感染或疾病治疗[1]的马立巴韦[2]迎来&quo...

关键字: 移植 BSP CD FDA

亘喜生物科技集团宣布正在中国开展的、旨在全面评估GC007g治疗复发/难治性急性B淋巴细胞白血病效果的1/2期注册性临床试验顺利进入2期研究阶段,首例入组患者已给药。GC007g是亘喜生物旗下的一款靶向CD19的供者来源...

关键字: 移植 CD

北京2022年9月9日 /美通社/ -- 诺诚健华(香港联交所代码:09969)今天宣布,tafasitamab (Minjuvi®)联合来那度胺治疗不适合自体干细胞移植 (ASCT) 条件的复发/难治弥漫性大B...

关键字: VI NJU BSP 移植

苏州2022年8月19日 /美通社/ -- 近日,华中科技大学同济医学院附属协和医院心外科董念国教授团队运用与心擎医疗联合研发的短中期体外全磁悬浮心室辅助装置MoyoAssist®,成功救治三例危重的终...

关键字: 磁悬浮 移植 IC 静脉

上海2022年8月17日 /美通社/ -- 2022年8月16日,聚焦于基因和细胞治疗的上海邦耀生物科技有限公司(以下简称"邦耀生物")宣布,其...

关键字: CD 移植 BSP ISP

苏州2022年6月28日 /美通社/ -- 2022年6月23日,首都医科大学附属北京安贞医院(以下简称安贞医院)与苏州心擎医疗技术有限公司(以下简称心擎)在北京、苏州两地线上连线,隆重召开体外心室辅助系统临床...

关键字: BSP 磁悬浮 创始人 移植
关闭
关闭