TMS320F28335 为TI公司推出的C28x+FPU架构的32位处理器,主频150MHZ,内置68KBRAM,512KB FLASH(本质上一高档单片机),在电力电子领域内有比较广泛的应用。小弟有幸在Raw-OS作者txj的尽心指导下成功将Raw-OS移植到TMS320F28335处理器上。相信各位大部分在操作系统移植方面都是高手,对操作系统移植都有比较丰富的实战经验,关于操作系统移植的基本东西这里不进行详谈,由于TI公司针对自己的处理器在编译器方面有较多的优化,这些优化有标准的C语言有些不兼容的地方,因此会给操作系统移植带来一些不便,下面主要就编译器的不兼容问题谈一些自己的感想,给大家进行移植提供一些帮助。
1 数据类型移植
28335支持的数据类型如表所示:该编译器不支持8位的数据类型,TMS320F28335中以16bit作为基本的存储单元,16bit为一个byte。执行sizeof(char)=1,sizeof(int)=1。
由于不支持8位数据类型,给操作系统移植带来极大困难,经与Raw-OS作者txj协调对Raw-OS内核调度算法数据类型进行修改,可以兼容TMS320F28335。
在软件中涉及memory的copy,set,clear等问题必须以sizeof进行存储区结构大小的计算,才能保证得到正确的执行。
2 28335堆栈关键问题
Ø 堆栈增长方向:
堆栈增长方向为LOW to HIGH,这个与常用的处理器架构不一样。
Ø 堆栈指针大小:
TMS32028335的堆栈指针为16位,只能支持64KB空间的寻址,所以堆栈空间不能超过这个范围。
Ø 任务级别的上下文切换
TMS320F28335任务切换通过触发软中断实现asm(“TRAP#31”),中断服务子程序为port_task_switch,该函数全部通过汇编实现,中断发生过程TMS320F28335会自动进行如下7组寄存器的入栈ST0_T,AL_AH,PL_PH,AR0_AR1,ST1_DP,IER_DBGSTAT, Return address;
为保证上下文的完整性在28335入栈过程中需要进行剩余定点以及全部浮点寄存器的入栈操作:
RB RPC AR0H:AR1H XAR2 XAR3 XAR4 XAR5 XAR6 XAR7 R0H~R7H STF
Ø 中断环境下的上下文切换
中断级别的任务切换原本与任务级别的上下文切换相同,只需要在进入中断调用raw_enter_interrupt();
中断退出过程通过调用raw_finish_init()即可。但是TI的编译器针对DSP进行了优化,在中断函数内部会根据中断服务函数中涉及到的变量以及函数的调用自动进行相应的寄存器优化,该优化在裸机编程时候能极大减少中断相应时间,但是在实时操作系统环境下会导致上下文的不对称问题,因此不能采用这种优化,TI优化是通过interrupt关键字实现的,因此Raw-OS环境下进行中断服务子程序开发过程不能使用interrupt关键字。中断发生过程时候需要手动进行剩余上下文的堆栈保护,典型的中断服务程序如下:
aw-OS在DSP中的应用与展望
Ø 正在进行项目
Raw-OS推出至今,进行了大量的开源协议的移植验证,但是尚无一例工程应用实例,目前小弟手中有一个大功率多电平无功补偿与谐波治理的项目,初步设计功率为500KW,目前正在探索将该操作系统应用到实际的工程项目中,项目效果后续会有说明,希望能通过该工程项目为国产操作系统Raw-OS提供真正的工程项目支持。
Ø 后续发展
正在计划一个TI C6000 DSP平台开发的项目,选定的DSP为TMS320C6747,主频456MHZ,该处理器是一款真正意义的高速浮点DSP,内部八个独立的运算单元,单周期可以并行执行8条指令,数据运算性能远远超过同等速度的控制器,非常希望有兴趣进行bootloader开发的朋友共同挑战。如果该平台移植成功会真正将Raw-OS带入DSP的领域,前期主要涉及内核,NAND Flash,TCP/IP, USB,SD,bootloader等方面的移植,当然同时会有大功率实际工程项目的测试验证,为了更有效推广Raw-OS到实际项目中,欢迎有兴趣的朋友共同参与移植工作。
Ø 关于DSP处理器的说明
TMS320F28335不是真正意义的DSP,但是在工程项目中处理器的选择会综合很多因素,所以大家非喜勿喷。
本人主要从事算法研究的方向,在操作系统方面有很多不足,因此上述说明如有错误和不妥之处欢迎指证。
[
本帖最后由 凌海滨 于 2013-11-24 11:13 编辑 ]