DSP

DSP56311的操作系统移植

2019-07-13 20:12发布

这种芯片是Motorola 公司的。移植完全是师姐搞的,我觉得做得很好,师姐教起来也是知无不言,言无不尽。最近用TI的DSP6437,所以去蹭dsp实验课了。 uC/OS是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。主要包括:os_core.c os_cpu_c.c os_task.c os_time.c os_flag.c os_mbox.c os_q.c os_sem.c os_mem.c os_cpu_a.asm。asm文件主要用来进行多任务及中断服务程序之间的切换,要用汇编修改,与硬件相关。uC/OS是面向中小型嵌入式系统的。如果包含全部功能(信号量、消息邮箱、消息队列及相关函数),编译后的uC/OS内核仅有6~10KB。
移植所需要修改的:
1. OS_CPU.H。包括了用#define 定义的与处理器相关的常量,宏和数据类型
的定义。例如:
typedef unsigned char BOOLEAN;
typedef unsigned char INT32U;
typedef unsigned long INT32U;
由于不同的微处理器有不同的字长,所以C 编译器对short、int、long 等数据类型进行不同的解释。
2. OS_CPU_C.C。包含6 个函数:OSTaskStkInit()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStatHook()、OSTimeTickHook()。 除第一个堆栈初始化函数OSTaSkstkInit()必须要写外,其他 5 个函数只要声明,
可以不包含代码,当用户需要额外的扩展功能时可以在这5 个函数中加入。函数
OSTaskStkInit()用于初始化任务的堆栈结构,不同的处理器在进行函数调用时需
保存的寄存器不同及用户设计的堆栈结构不同,所以必须要改写。而*Hook()函数是系统自动在任务发生、切换、删除等时执行。用户可以用来执行一些必要的操作。
3. OS_CPU_A.ASM。要求用户编写4 个汇编语言函数:OSStartHighRdy,
OSCtxSw(),OSIntCtxSw(),OSTickISR()。这 4 个函数主要用来进行多任务及
中断服务程序之间的切换,任何操作系统在实行任务调度时,都需要对处理器中
的部分寄存器进行保存和恢复,所以对不同的处理器这部分函数需要用不同的汇
编语言进行改写,且各寄存器保存的次序要同OSTaskStkInit()函数中初始化的堆
栈结构一致。