2019物联网开发者大会 12.06 北京北辰洲际酒店→ 报名参会 ←
电子产品世界 » 论坛首页 » 高校专区 » 坤创E-Geek/天科大新电社 » uCOS III操作系统 在STM32上的移植

共9条 1/1 1 跳转至

uCOS III操作系统 在STM32上的移植

高工
2019-10-10 22:10:45    评分

1. 相对于UCOSII,UCOSIII的性能有了进一步提升,支持时间片轮转调度,极短的关中断事件等。移植的准备材料:STM32基础工程;UCOSIII源码。

2. 从uCOS的官网获取 uCOS III 的官方的源码包:http://micrium.com/

3. 打开下载好的UCOSIII源码,可以看到四个文件,分别是EvalBoards、 uC-CPU、 uC-LIB、 uCOS-III。

EvalBoards:文件夹里面包含评估板相关文件,在移植时我们只提取部分文件。

uC-CPU:和CPU紧密相关的文件,里面的一些文件很重要,都是我们需要使用的。

uC-LIB:Micrium公司提供的官方库,可用可不用。

uCOS-III:关键目录,我们下来着重分析的文件位于此目录下,包含了Source文件夹。

图片16.png

 

4. 从官方下载已近移植好的uCOS-III工程(基于STM32F107版本的),我们要和UCOSII移植一样从该工程中复制一些需要的文件。

图片17.png

5. 将UCOSIII目录下的app_cfg.h、cpu_cfg.h、includes.h、lib_cfg.h、os_app_hooks.c、os_app_hooks.h、os_cfg.h、os_cfg_app.h文件添加到我们的工程文件中。

图片18.png


 6. 在基础工程中添加相应的文件夹UCOSIII,将下载的UCOSIII源码中的uC-CPU、 uC-LIB、 uCOS-III这三个文件复制到工程中。

图片19.png

7. 在UCOSIII文件夹中还需要再添加两个文件夹,uC-CONFIG、uC-BSP两个文件夹。

图片20.png

8. 向uC-CONFIG添加文件,从移植好的F107工程下的UCOSIII目录下复制下面8个文件到uC-CONFIG文件夹中。

图片21.png

9. uC-CONFIG文件下,复制后的8个文件。

图片22.png

10. 向uC-BSP添加文件,同样是从移植好的F107工程下的BSP目录下,只需要复制bsp.c和bsp.h两个文件。

图片23.png

11. uC-BSP文件下,复制后的2个文件。

图片24.png

12. 在keil工程中添加UCOSIII六个分组,分别是UCOSIII-CORE、UCOSIII-CPU、UCOSIII-PORT、UCOSIII-BSP、UCOSIII-COBFIG、UCOSIII-LIB。

图片25.png

13. 向UCOSIII-CORE添加文件,从工程文件夹下的uCOS-III\Source路径下添加。

图片26.png

14. 向UCOSIII- CPU添加文件,从工程文件夹下的UCOSIII\uC-CPU路径下添加,不要忘记uC-CPU\\ARM-Cortex-M3\RealView下的cpu_c.c与cpu_a.asm文件。

图片27.png

15. 向UCOSIII-BSP添加文件,从工程文件夹下的UCOSIII\uC-BSP路径下添加。

图片28.png

16. 向UCOSIII-PORT添加文件,从工程文件夹下的

UCOSIII\uC-LIBuCOS-III\Ports\ARM-Cortex-M3\Generic\RealView路径下添加。

图片29.png

17. 向UCOSIII-LIB添加文件,从工程文件夹下的UCOSIII\uC-LIB路径下添加,不要忘记UCOSIII\uC-LIB\Ports\ARM-Cortex-M3\RealView 的lib_mem_a.asm文件。

图片30.png

18. 向UCOSIII-CONFIG添加文件,从工程文件夹下的UCOSIII\uC-CONFIG路径下添加。

图片31.png

19. 向各个分组添加完文件后不要忘记添加对应的头文件。

图片32.png

20. 编译一下,观察是否会出错,这里需要修改bsp文件,该文件是与板级相关的文件,uCOS III 源码的bsp 肯定是与我们的板子不一样,所以就需要进行修改,而且以后我们的板级文件都在bsp.c 文件进行初始化,所以按照我们修改好的源码进行修改即可

图片33.png

 

21. bsp.c文件修改后如下:

#define  BSP_MODULE
#include <bsp.h>                     
CPU_INT32U  BSP_CPU_ClkFreq_MHz;
static  void  BSP_LED_Init   (void);
static  void  BSP_StatusInit (void);
#define  DWT_CR      *(CPU_REG32 *)0xE0001000
#define  DWT_CYCCNT  *(CPU_REG32 *)0xE0001004
#define  DEM_CR      *(CPU_REG32 *)0xE000EDFC
#define  DBGMCU_CR   *(CPU_REG32 *)0xE0042004
#define  DBGMCU_CR_TRACE_IOEN_MASK       0x10
#define  DBGMCU_CR_TRACE_MODE_ASYNC      0x00
#define  DBGMCU_CR_TRACE_MODE_SYNC_01    0x40
#define  DBGMCU_CR_TRACE_MODE_SYNC_02    0x80
#define  DBGMCU_CR_TRACE_MODE_SYNC_04    0xC0
#define  DBGMCU_CR_TRACE_MODE_MASK       0xC0
#define  DEM_CR_TRCENA                   (1 << 24)
#define  DWT_CR_CYCCNTENA                (1 <<  0)
void  BSP_Init (void)
{
    LED_Init();
}
CPU_INT32U  BSP_CPU_ClkFreq (void)
{
    RCC_ClocksTypeDef  rcc_clocks;
    RCC_GetClocksFreq(&rcc_clocks);
    return ((CPU_INT32U)rcc_clocks.HCLK_Frequency);
}
#if ((APP_CFG_PROBE_OS_PLUGIN_EN == DEF_ENABLED) && \
     (OS_PROBE_HOOKS_EN          == 1))
void  OSProbe_TmrInit (void)
{
}
#endif
#if ((APP_CFG_PROBE_OS_PLUGIN_EN == DEF_ENABLED) && \
     (OS_PROBE_HOOKS_EN          == 1))
CPU_INT32U  OSProbe_TmrRd (void)
{
    return ((CPU_INT32U)DWT_CYCCNT);
}
#endif
#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
void  CPU_TS_TmrInit (void)
{
    CPU_INT32U  cpu_clk_freq_hz;
 
 
    DEM_CR         |= (CPU_INT32U)DEM_CR_TRCENA;                
    DWT_CYCCNT      = (CPU_INT32U)0u;
    DWT_CR         |= (CPU_INT32U)DWT_CR_CYCCNTENA;
    cpu_clk_freq_hz = BSP_CPU_ClkFreq();
    CPU_TS_TmrFreqSet(cpu_clk_freq_hz);
}
#endif
#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
CPU_TS_TMR  CPU_TS_TmrRd (void)
{
    return ((CPU_TS_TMR)DWT_CYCCNT);
}
#endif


22. bsp.h文件修改后如下:

#ifndef  BSP_PRESENT
#define  BSP_PRESENT
#ifdef   BSP_MODULE
#define  BSP_EXT
#else
#define  BSP_EXT  extern
#endif
#include  <stdio.h>
#include  <stdarg.h>
#include  <cpu.h>
#include  <cpu_core.h>
#include  <lib_def.h>
#include  <lib_ascii.h>
#include  <stm32f10x_conf.h>
#endif


23. 对该工程进行第一次编译,编译是没有错误的,并且工程模板也是可用的,但是此时还不是我们最适合使用的工程模板,最适合的工程往往是根据需要进行配置的,而 uCOS 提供裁剪的功能,我们可以按需对系统进行裁剪。

图片34.png

24. os_cfg.h文件,os_cfg.h 文件是系统的配置文件,主要是让用户自己配置一些系统默认的功能,用户可以选择某些或者全部的功能,比如消息队列、信号量、互斥量、事件标志位等,系统默认全部使用的,如果如果用户不需要的话,则可以直接关闭, 在对应的宏定义中设置为 0即可, 这样子就不会占用系统的 SRAM,以节省系统资源。

25. cpu_cfg.h 文件主要是配置 CPU 相关的一些宏定义,我们可以选择对不同的 CPU 进行配置,当然,如果我们没有对 CPU 很熟悉的话,就直接忽略这个文件即可,在这里我们只需要注意关于时间戳与前导零指令相关的内容,我们使用的 CPU 是 STM32,是 32 位的CPU,那么时间戳我们使用 32 位的变量即可,而且 STM32 支持前导零指令,可以使用它让系统进行寻找最高优先级的任务更加快捷。

26. os_cfg_app.h 是系统应用配置的头文件,简单来说就是系统默认的任务配置,如任务的优先级、堆栈大小等基本信息,但是有两个任务是必须开启的,一个就是空闲任务,另一个就是时钟节拍任务,这两个是让系统正常运行的最基本任务,而其他任务我们自己按需配置即可。

     至此,我们的uCOS III在STM32上的移植已经全部进行完了~大家可以愉快地开启uCOSIII之旅了~




关键词: UOSIII     STM32     操作系统移植    

菜鸟
2019-10-11 12:31:16    评分
2楼

整理的真完善  祝老师要向操作系统进军了哈


助工
2019-10-11 14:00:27    评分
3楼
顶一个

菜鸟
2019-10-11 21:57:54    评分
4楼

哇!舒服!


助工
2019-10-15 18:31:11    评分
5楼

牛逼奥


专家
2019-10-15 21:58:11    评分
6楼

现在都是ucosIII了。

下一步这是要移植各种中间件了


助工
2019-10-26 14:28:10    评分
7楼

赞一个   都是干货  谢谢分享


助工
2019-10-26 14:34:45    评分
8楼

不错不错 学习了


助工
2019-10-26 14:57:51    评分
9楼

谢谢分享


共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]