文档首页 > > 最佳实践> 最佳实践> 移植教程> OS移植> STM32 系列(MDK-ARM)

STM32 系列(MDK-ARM)

分享
更新时间: 2018/12/16 GMT+08:00

移植工程下载

编译并验证裸机工程

默认的裸机工程如下图所示,会按照代码功能组织好。我们可以执行编译检查工程是否 OK。

拷贝LiteOS内核源码及测试相关代码

在 STM32Cube 裸机工程中创建 Middlewares/LiteOS 目录,拷贝上图中源码目录到该目录下。

├─ Middlewares
│  └─ LiteOS
│     ├─ arch
│     ├─ examples
│     └─ kernel

创建LiteOS分组并添加.c源文件

如下图增加 LiteOS 源代码:

arch 需要添加 los_dispatch_keil.S,los_hw.c,los_hw_tick.c 和 los_hwi.c,这 4 个文件。

说明:

MDK-ARM 默认添加 .c 源码文件,需要按照如下配置才能看到 .S 汇编文件。

kernel 需要添加的文件比较多:

  • los_init.c
  • base/core 下面全部 .c 文件
  • base/ipc 下面全部 .c 文件
  • base/mem/bestfit_little 下面全部 .c 文件
  • base/mem/common 下面全部 .c 文件
  • base/mem/membox 下面全部 .c 文件
  • base/misc 下面全部 .c 文件
  • base/om 下面全部 .c 文件
  • extended/tickless 下面全部 .c 文件(如果没有使用 tickless,可以不必添加)

需要注意的是,LiteOS 提供了 3 套动态内存分配算法,位于 LiteOS\kernel\base\mem 目录下,分别是 bestfit、bestfit_little、tlsf 这三套动态内存算法只需要添加其中一套就行了,对于资源有限的芯片,建议选择 bestfit_little,上面的示例也是添加了这一套动态分配算法;另外 LiteOS\kernel\base\mem\membox 目录下是 LiteOS 提供的静态内存算法,与动态内存算法不冲突,需要添加;LiteOS\kernel\base\mem\common 目录的内容需要全部添加

配置C/C++源码.h头文件路径

编译代码并处理移植中的编译错误

编译会发现如下错误,提示缺少 los_builddef.h 文件,这个文件没有包含在源码中,需要从其他示例工程中COPY过来。

我们在 STM32F103RB_NUCLED 发现OS_CONFIG目录,将该目录拷贝到本地工程中。

也别忘记把 OS_CONFIG 目录配置到头文件路径中。

OS_CONFIG/target_config.h 文件有两处需要适配您的开发环境进行调整:

  1. 正确修改导入 ST 官方驱动文件,如果是 M4 系列芯片是 stm32f4xx.h 文件

  2. 将内存设置为匹配当前芯片 SRAM 大小,查找数据手册可以了解芯片内存大小

再次编译代码,之前的大量报错应该就清理得差不多了。

如果编译后还发现上图中的两个错误,显示有两个函数重复定义。您可以直接注释掉这两个函数,但为了保证 STM32Cube 生成工程不会再次覆盖修改后代码,建议按下图所示操作,在 STM32Cube 中屏蔽这两个函数生成。

PendSV_HandlerSysTick_Handler 这两个函数只有在 LiteOS Kernel 有对应实现才能够屏蔽,如果不进行 OS,不可屏蔽盖函数,否则会导致芯片跑不起来。

编译无误,OS移植大功告成

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区