ucos-ii在ti dsp 28377芯片上的运行过程和移植过程

本文详细记录了将UCOS-II实时操作系统移植到TI DSP 28377芯片上的过程,包括文件组织、任务无法跳转、延时问题以及异常中断等挑战。通过分析和调试,解决了CPU初始化、BSP替换、时间中断设置等问题,实现了UCOS-II在28377D上的成功运行。
摘要由CSDN通过智能技术生成

 

 

1、移植过程

在将ucos移植到28377d平台上时主要遇见了下面几个问题,

  1) 文件怎么组织,是通过修改micrim上提供的28335一直代码修改而成的,下载地址为:https://www.micrium.com/。

  2)移植完成后发现创建任务完成后,任务无法跳转,移植在主函数中来回循环

  3)当使用ostimedly()函数对任务延时,当延时时间已经完成,系统无法跳出空任务循环,移植在IdleTask中运行

  4)任务切换过程中总是跳入到异常中断中。

 

移植思路:

  开始移植过程时,下载了micrium官网上提供的关于28335的移植历程,他的历程导入后整体框架如下图所示:

  

上图中主要包含了5个文件夹分别是APP  BSP  UC-CPU  UC-LIB  UCOS-II

APP 主要包含了应用代码,主要是官方自己编写的一个小程序,其中各种.h文件是对ucos的一些配置

BSP称作板级支持包,这个就按照通俗理解的官方提供的历程中所使用的各种.c文件,比如我需要控制IO口,就要使用F2837xD_GPIO.C中的一些函数,这些就是BSP

UC-CPU暂时未用,好像有包含

UC-LIB暂时未用,貌似是一些支持库,但是F28377D本身自带就有一些运算支持库

UCOS-II这个是重头戏,里面包含了两个文件夹

      source 文件夹下是ucos的无关核代码,这些不需要修改

      prots->c28x->generic->ccs里面的代码是和内核有关的代码,无非也就是操作堆栈,保存cpu的当前寄存器值以及恢复等等,这些是需要修改的

                    但是下载的代码已经帮我们修改好了。直接使用

 

最开始的移植思路是 : 

BSP 板级支持包不使用micrum提供的,查阅代码可以发现BSP中无非就是对外设的控制和上电初始化芯片的过程,这些完全可以倒入一个F28377D的历程

使用历程中的例子来完成初始化,这样更加方便

 

提供给ucos的时间中断,这个就人为的使用cputimer来做一个中断,中断函数里面调用ostimetick函数来实现。

 

步骤如下:

首先在28377D的历程中导入一个blink灯闪的历程,修改后的框架如下图所示:

同样包含了下面几个文件夹,这个只是我自己用的,和历程不一样,这个是随意的:

cmd  driver  pcore  uc-cpu  uc-lib  ucos-ii

cmd中存放的是历程的cmd文件

driver存放的就是那些调用外设的驱动程序,也就是用来替换BSP的

pcore是放置应用程序的。h文件的定义,直接从micrum中复制过来的

uc-cpu  uc-lib  ucos-ii  是和micrum提供的源码一样的(复制过来的)

主函数被放置在了processflow中,这里没有打开显示。

 

代码如下所示:

 

修改后的mian函数如下:

#include <string.h>
#include "F28x_Project.h"
#include "F2837xD_Ipc_drivers.h"
#include <app_cfg.h>
#include <ucos_ii.h>
#include <cpu_core.h>
#include <lib_def.h>
__interrupt void cpu_timer0_isr(void);
//#pragma CODE_SECTION(App_TaskStartStk , "RAMGS0");
//#pragma CODE_SECTION(App_TaskPendStk , "RAMGS0");
//#pragma CODE_SECTION(App_TaskPostStk , "RAMGS0");
CPU_STK_SIZE App_TaskStartStk[APP_CFG_TASK_STK_SIZE];
/* Ping Task's    stack.*/
CPU_STK_SIZE App_TaskPendStk[APP_CFG_TASK_STK_SIZE];
/* Pong Task's    stack.*/
CPU_STK_SIZE App_TaskPostStk[APP_CFG_TASK_STK_SIZE];
static OS_EVENT *AppTaskObjSem;
/*********************************************************************************************
************
* FUNCTION PROTOTYPES
**********************************************************************************************
***********
*/
/* Start Task.*/
static void App_TaskStart(void *p_arg);
/* Ping Task. */
//
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值