手把手教UCOS II移植到DSP 2803x(28035为例)

本文详细介绍了如何将UCOS II操作系统移植到DSP 2803x(以28035为例)的过程,包括删除不必要的文件,保留和修改与芯片相关的部分,设置中断和时钟节拍,编写CMD文件,调整堆栈大小,取消浮点运算支持,以及定义OS_CPU_RTOSINT_Handler中断等步骤。通过这些操作,成功地在定点芯片28035上运行了UCOS II。
摘要由CSDN通过智能技术生成


移植前说明:
相信学过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);  // 中断声明
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值