移植前说明:
相信学过UCOS的人都看过下面这张图,这张图讲解了UCOS移植的方法。这是ARM芯片移植UCOS的体系结构图,当然对于其它芯片也是适用的,只是个别文件名不同而已。移植的时候,图示红色部分是不需要去修改的,需要修改的是蓝色部分(这部分与芯片的型号是相关的,不同芯片是不一样的),绿色部分也可以适当更改。可以通过os_cfg.h裁剪UCOS代码,因为UCOS相对来说还是比较臃肿的。
移植前准备:
一、 准备一个28035的开发例程(也可以自己写的,注:我使用的是CCS7.2版本,不同版本文件结构可能不同)
下面是一个28035的例程整体框架,例程功能是定时器time0每500ms中断一次,中断程序中翻转GPIO口的输出状态,以此来让开发板上的LED灯闪烁。文件说明:include是头文件,在这里没有展开。这是一个最基本的28035开发例程。
二、准备UCOS II移植文件
在Micrium官网下载micrium提供的关于28335的移植例程(到目前为止只有28335),整体框架如下图所示。
文件很多,这里先不用理会,后面会讲各个文件的功能。
三、 开始移植
1、 把前面两个工程文件合并起来。
官网下载的移植文件说明:一共就这几个文件,分别是APP, BSP, UC_CPU, UC_LIB, UCOS_II。
APP包含了用户应用代码,其中各种.h文件是对ucos的一些配置。.h文件保留,并新建一个CONFIG文件夹保存起来。app.c文件删除,用自己写的文件代替。
BSP称作板级支持包,这个相当于官方提供的例程中所使用的各种.c文件。这个文件也要删除,用.c文件代替。为什么要删除BSP文件,因为这个是为28335写的文件,在28035已经不适用了。还有一个问题是,官网28335这个例程只是定义了一些用到的寄存器,还有很多寄存器没有定义,如果要用到那些寄存器则要自己去定义,这就相当于本来提供的各种.c文件都要自己重新写,很烦锁。
uC_CPU是基于 micrium 官方评估板的 ucosii 移植代码,这个直接复制过来。
uC_LIB这个是micrium 官方的一个库代码,也复制过来。
uCOS_II这个文件是ucos_ii源代码,移植的时候需要修改的文件。但是官方已经帮我们修改好了。所以直接复制过来用就可以了。
可能有人会有疑问,这个28335的CPU文件适用于28035么?答案是肯定的。看到上面的C28X目录么,就是说这个移植文件是适用于所有C28X芯片的。因为28335和28035都属于C28X系列,所以此文件也适用于28035芯片。
把上面几个文件复制到第一个工程例程,修改后的框架如下图所示:
文件说明:CONFIG文件夹文件是从上面APP文件夹里复制而来的.h文件。main文件的Example_2803xLEDBlink.c是要修改的,下一步会介绍。SXD28035_common及SXD28035_headers文件,是原来工程的文件,没有修改。uC_CPU, uC_LIB, uCOS_II这三个文件是从官网例程复制过来的。F28035.cmd文件也要自己写。
2、 修改文件路径
3、 编写主程序(主程序代替APP程序)
main / Example_2803xLEDBlink.c程序如下:
#include <app_cfg.h>
#include <ucos_ii.h>
#include <cpu_core.h>
#include <lib_def.h>
#include <os_cpu.h>
#include "DSP28x_Project.h"
#define LED0 GpioDataRegs.GPBTOGGLE.bit.GPIO34
CPU_STK_SIZE App_TaskStartStk[APP_CFG_TASK_STK_SIZE];
CPU_STK_SIZE App_TaskPendStk[APP_CFG_TASK_STK_SIZE];
CPU_STK_SIZE App_TaskPostStk[APP_CFG_TASK_STK_SIZE];
static OS_EVENT *AppTaskObjSem;
static void App_TaskStart(void *p_arg);
static void App_TaskPing (void *p_arg);
static void App_TaskPong (void *p_arg);
interrupt void cpu_timer0_isr(void); // 中断声明