打印
[应用相关]

UCOSIII移植到STM32

[复制链接]
2594|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
UCOSIII移植到STM32相比UCOSII稍微复杂一点, 相对于UCOSIIUCOSIII的性能有了进一步提升,支持时间片轮转调度,极短的关中断事件等。准备材料:STM32基础工程;UCOSIII源码。获取到uCOS III 的官方的源码包:http://micrium.com/

使用特权

评论回复
沙发
gaoke231|  楼主 | 2019-5-27 17:33 | 只看该作者
打开下载好的UCOSIII源码,可以看到四个文件,分别是EvalBoards、uC-CPU、uC-LIB、uCOS-III。
EvalBoards:文件夹里面包含评估板相关文件,在移植时我们只提取部分文件。
uC-CPU:和CPU紧密相关的文件,里面的一些文件很重要,都是我们需要使用的。
uC-LIB:Micrium公司提供的官方库,可用可不用。
uCOS-III:关键目录,我们下来着重分析的文件位于此目录下,包含了Source文件夹。

使用特权

评论回复
板凳
gaoke231|  楼主 | 2019-5-27 17:34 | 只看该作者
从官方下载已近移植好的uCOS-III工程(基于STM32F107版本的),我们要和UCOSII移植一样从该工程中复制一些需要的文件。

使用特权

评论回复
地板
gaoke231|  楼主 | 2019-5-27 17:35 | 只看该作者
将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文件添加到我们的工程文件中。

使用特权

评论回复
5
gaoke231|  楼主 | 2019-5-27 17:35 | 只看该作者
在基础工程中添加相应的文件夹UCOSIII,将下载的UCOSIII源码中的uC-CPU uC-LIB uCOS-III这三个文件复制到工程中。

使用特权

评论回复
6
gaoke231|  楼主 | 2019-5-27 17:36 | 只看该作者
在UCOSIII文件夹中还需要再添加两个文件夹,uC-CONFIG、uC-BSP两个文件夹。

使用特权

评论回复
7
gaoke231|  楼主 | 2019-5-27 17:36 | 只看该作者
向uC-CONFIG添加文件,从移植好的F107工程下的UCOSIII目录下复制下面8个文件到uC-CONFIG文件夹中。

使用特权

评论回复
8
gaoke231|  楼主 | 2019-5-27 17:37 | 只看该作者
uC-CONFIG文件下,复制后的8个文件。

使用特权

评论回复
9
gaoke231|  楼主 | 2019-5-27 17:37 | 只看该作者
向uC-BSP添加文件,同样是从移植好的F107工程下的BSP目录下,只需要复制bsp.c和bsp.h两个文件。

使用特权

评论回复
10
gaoke231|  楼主 | 2019-5-27 17:38 | 只看该作者
uC-BSP文件下,复制后的2个文件。

使用特权

评论回复
11
gaoke231|  楼主 | 2019-5-27 17:39 | 只看该作者
在keil工程中添加UCOSIII六个分组,分别是UCOSIII-CORE、UCOSIII-CPU、UCOSIII-PORT、UCOSIII-BSP、UCOSIII-COBFIG、UCOSIII-LIB。

使用特权

评论回复
12
gaoke231|  楼主 | 2019-5-27 18:52 | 只看该作者
UCOSIII-CORE添加文件,从工程文件夹下的uCOS-III\Source路径下添加。

使用特权

评论回复
13
gaoke231|  楼主 | 2019-5-27 18:52 | 只看该作者
本帖最后由 gaoke231 于 2019-5-27 20:51 编辑

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

2.png (209.24 KB )

2.png

使用特权

评论回复
14
gaoke231|  楼主 | 2019-5-27 18:52 | 只看该作者
向UCOSIII-BSP添加文件,从工程文件夹下的UCOSIII\uC-BSP路径下添加。

使用特权

评论回复
15
gaoke231|  楼主 | 2019-5-27 18:53 | 只看该作者
向UCOSIII-PORT添加文件,从工程文件夹下的
UCOSIII\uC-LIBuCOS-III\Ports\ARM-Cortex-M3\Generic\RealView路径下添加。

使用特权

评论回复
16
gaoke231|  楼主 | 2019-5-27 18:53 | 只看该作者
本帖最后由 gaoke231 于 2019-5-27 20:52 编辑

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


1.png (186.86 KB )

1.png

使用特权

评论回复
17
gaoke231|  楼主 | 2019-5-27 18:54 | 只看该作者
向UCOSIII-CONFIG添加文件,从工程文件夹下的UCOSIII\uC-CONFIG路径下添加。

使用特权

评论回复
18
gaoke231|  楼主 | 2019-5-27 21:07 | 只看该作者
向各个分组添加完文件后不要忘记添加对应的头文件。

使用特权

评论回复
19
gaoke231|  楼主 | 2019-5-27 21:07 | 只看该作者
编译一下,观察是否会出错,这里需要修改bsp文件,该文件是与板级相关的文件,uCOS III 源码的bsp 肯定是与我们的板子不一样,所以就需要进行修改,而且以后我们的板级文件都在bsp.c 文件进行初始化,所以按照我们修改好的源码进行修改即可。

使用特权

评论回复
20
gaoke231|  楼主 | 2019-5-27 21:08 | 只看该作者
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


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1310

帖子

5

粉丝