[应用相关] UCOSIII移植到STM32

[复制链接]
3112|27
 楼主| gaoke231 发表于 2019-5-27 17:32 | 显示全部楼层 |阅读模式
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文件夹。
528945cebaed5789bd.png

 楼主| gaoke231 发表于 2019-5-27 17:34 | 显示全部楼层
从官方下载已近移植好的uCOS-III工程(基于STM32F107版本的),我们要和UCOSII移植一样从该工程中复制一些需要的文件。
29285cebaf20d4c16.png

 楼主| 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文件添加到我们的工程文件中。
211825cebaf42d607d.png

 楼主| gaoke231 发表于 2019-5-27 17:35 | 显示全部楼层
在基础工程中添加相应的文件夹UCOSIII,将下载的UCOSIII源码中的uC-CPU uC-LIB uCOS-III这三个文件复制到工程中。
191915cebaf5adfdd2.png
 楼主| gaoke231 发表于 2019-5-27 17:36 | 显示全部楼层
在UCOSIII文件夹中还需要再添加两个文件夹,uC-CONFIG、uC-BSP两个文件夹。
962455cebaf8ec2e63.png

 楼主| gaoke231 发表于 2019-5-27 17:36 | 显示全部楼层
向uC-CONFIG添加文件,从移植好的F107工程下的UCOSIII目录下复制下面8个文件到uC-CONFIG文件夹中。
7285cebafadb6f9a.png

 楼主| gaoke231 发表于 2019-5-27 17:37 | 显示全部楼层
uC-CONFIG文件下,复制后的8个文件。
961915cebafcc6d6a8.png

 楼主| gaoke231 发表于 2019-5-27 17:37 | 显示全部楼层
向uC-BSP添加文件,同样是从移植好的F107工程下的BSP目录下,只需要复制bsp.c和bsp.h两个文件。
418995cebafe9795b8.png

 楼主| gaoke231 发表于 2019-5-27 17:38 | 显示全部楼层
uC-BSP文件下,复制后的2个文件。
548905cebb031e8927.png
 楼主| gaoke231 发表于 2019-5-27 17:39 | 显示全部楼层
在keil工程中添加UCOSIII六个分组,分别是UCOSIII-CORE、UCOSIII-CPU、UCOSIII-PORT、UCOSIII-BSP、UCOSIII-COBFIG、UCOSIII-LIB。
626545cebb0494859b.png
 楼主| gaoke231 发表于 2019-5-27 18:52 | 显示全部楼层
UCOSIII-CORE添加文件,从工程文件夹下的uCOS-III\Source路径下添加。
845785cebc14f5da5e.png
 楼主| 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
 楼主| gaoke231 发表于 2019-5-27 18:52 | 显示全部楼层
向UCOSIII-BSP添加文件,从工程文件夹下的UCOSIII\uC-BSP路径下添加。
326615cebc1840265e.png
 楼主| gaoke231 发表于 2019-5-27 18:53 | 显示全部楼层
向UCOSIII-PORT添加文件,从工程文件夹下的
UCOSIII\uC-LIBuCOS-III\Ports\ARM-Cortex-M3\Generic\RealView路径下添加。
918975cebc19f025a1.png
 楼主| 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
 楼主| gaoke231 发表于 2019-5-27 18:54 | 显示全部楼层
向UCOSIII-CONFIG添加文件,从工程文件夹下的UCOSIII\uC-CONFIG路径下添加。
39165cebc1cc72cae.png
 楼主| gaoke231 发表于 2019-5-27 21:07 | 显示全部楼层
向各个分组添加完文件后不要忘记添加对应的头文件。
149295cebe101ae533.png
 楼主| gaoke231 发表于 2019-5-27 21:07 | 显示全部楼层
编译一下,观察是否会出错,这里需要修改bsp文件,该文件是与板级相关的文件,uCOS III 源码的bsp 肯定是与我们的板子不一样,所以就需要进行修改,而且以后我们的板级文件都在bsp.c 文件进行初始化,所以按照我们修改好的源码进行修改即可。
462815cebe1138e1e4.png
 楼主| gaoke231 发表于 2019-5-27 21:08 | 显示全部楼层
bsp.c文件修改后如下:
  1. #define  BSP_MODULE
  2. #include <bsp.h>                     
  3. CPU_INT32U  BSP_CPU_ClkFreq_MHz;
  4. static  void  BSP_LED_Init   (void);
  5. static  void  BSP_StatusInit (void);
  6. #define  DWT_CR      *(CPU_REG32 *)0xE0001000
  7. #define  DWT_CYCCNT  *(CPU_REG32 *)0xE0001004
  8. #define  DEM_CR      *(CPU_REG32 *)0xE000EDFC
  9. #define  DBGMCU_CR   *(CPU_REG32 *)0xE0042004
  10. #define  DBGMCU_CR_TRACE_IOEN_MASK       0x10
  11. #define  DBGMCU_CR_TRACE_MODE_ASYNC      0x00
  12. #define  DBGMCU_CR_TRACE_MODE_SYNC_01    0x40
  13. #define  DBGMCU_CR_TRACE_MODE_SYNC_02    0x80
  14. #define  DBGMCU_CR_TRACE_MODE_SYNC_04    0xC0
  15. #define  DBGMCU_CR_TRACE_MODE_MASK       0xC0
  16. #define  DEM_CR_TRCENA                   (1 << 24)
  17. #define  DWT_CR_CYCCNTENA                (1 <<  0)
  18. void  BSP_Init (void)
  19. {
  20.     LED_Init();
  21. }
  22. CPU_INT32U  BSP_CPU_ClkFreq (void)
  23. {
  24.     RCC_ClocksTypeDef  rcc_clocks;
  25.     RCC_GetClocksFreq(&rcc_clocks);
  26.     return ((CPU_INT32U)rcc_clocks.HCLK_Frequency);
  27. }
  28. #if ((APP_CFG_PROBE_OS_PLUGIN_EN == DEF_ENABLED) && \
  29.      (OS_PROBE_HOOKS_EN          == 1))
  30. void  OSProbe_TmrInit (void)
  31. {
  32. }
  33. #endif
  34. #if ((APP_CFG_PROBE_OS_PLUGIN_EN == DEF_ENABLED) && \
  35.      (OS_PROBE_HOOKS_EN          == 1))
  36. CPU_INT32U  OSProbe_TmrRd (void)
  37. {
  38.     return ((CPU_INT32U)DWT_CYCCNT);
  39. }
  40. #endif
  41. #if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
  42. void  CPU_TS_TmrInit (void)
  43. {
  44.     CPU_INT32U  cpu_clk_freq_hz;


  45.     DEM_CR         |= (CPU_INT32U)DEM_CR_TRCENA;               
  46.     DWT_CYCCNT      = (CPU_INT32U)0u;
  47.     DWT_CR         |= (CPU_INT32U)DWT_CR_CYCCNTENA;
  48.     cpu_clk_freq_hz = BSP_CPU_ClkFreq();
  49.     CPU_TS_TmrFreqSet(cpu_clk_freq_hz);
  50. }
  51. #endif
  52. #if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
  53. CPU_TS_TMR  CPU_TS_TmrRd (void)
  54. {
  55.     return ((CPU_TS_TMR)DWT_CYCCNT);
  56. }
  57. #endif


您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1310

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部