Liteos|LiteOS移植到STM32F103系列单片机,非常简单

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

LiteOS移植到STM32F103系列单片机

  • 前言
  • 一、下载老版本liteos
  • 二、参考官方的推荐移植步骤
    • 1.新建项目
      • 1.1打开keil创建 一个空项目,命名为test_liteos

前言 一直想把liteos移植到STM32单片机或者GD32的单片机,最近有点空闲,找了相关资料,发现官方提供的资料非常的全面,唯一的缺点就是,资料上提供的移植方法和git上下载的liteos源码对应不上,所以就找了一下老版本的liteos源码用来练习,后面再下载最新的liteos源码来移植
老版本liteos下载链接
liteos中文网
[LiteOS移植]目标芯片STM32F1系列汇总贴

提示:以下是本篇文章正文内容,针对老版本liteos移植的使用说明,新手对移植有点懵的可以尝试一下,你会发现怎么这么简单。。。。。。
一、下载老版本liteos 【Liteos|LiteOS移植到STM32F103系列单片机,非常简单】老版本liteos下载链接,从此链接下载的文件,我把其它没用的干扰文件全部删除掉了,当你需要深入学习时可以从git上再去下载完整版本。
从git上下载下来的完整文件夹是这样的
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

但是对移植有用的只有arch和kernel文件夹,其它的文件或者相关文档你要有兴趣也可以打开看看
二、参考官方的推荐移植步骤 1.Keil平台 5.18a
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

CMSIS版本:5.2.0
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

1.新建项目 使用keil5新建一个项目,并且使用版本较高的CMSIS,如果移植后编译提示缺少 __get_IPSR 函数,就是CMSIS版本过低导致的。(不建议使用STM32标准库移植,因为标准库的版本比较低,移植会出错)
1.1打开keil创建 一个空项目,命名为test_liteos
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

单片机我选择的是STM32F103VE
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

然后选择CMSIS核心文件和启动文件
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

新建一个名称为main.c的源文件,保存后将文件加入到项目中
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

添加基本代码到main.c文件
#include "stm32f10x.h" int main(void) { while (1) { } }

选择编译器版本,我的只有选择V5.06才能编译
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

在当前界面中勾选微库,必选项
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

编译代码,如果没有错误就可以进行下一步了
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

将下载好的Liteos老版本源码,拷贝到项目中
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

在项目中,arch文件夹下添加Liteos相关源码
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

添加后如图:
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

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|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

OS_CONFIG可以选择性的添加,我添加的目的是为了修改方便
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

文件添加完成后还需要将用到的源文件的所有目录添加到项目中,否则在编译时会提示找不到源文件等错误。
Liteos|LiteOS移植到STM32F103系列单片机,非常简单
文章图片

任务创建测试:将如下代码复制到main.c文件中,然后编辑
#include "stm32f10x.h"#include "los_sys.h" #include "los_task.ph" #include "los_memory.ph"static void Led1Task(void) { while(1) { //LED1_ON(); LOS_TaskDelay(1000); //LED1_OFF(); LOS_TaskDelay(1000); } } static void Led2Task(void) { while(1) { //LED2_ON(); LOS_TaskDelay(200); //LED2_OFF(); LOS_TaskDelay(200); } } UINT32 RX_Task_Handle; UINT32 TX_Task_Handle; static UINT32 AppTaskCreate(void) { UINT32 uwRet = LOS_OK; TSK_INIT_PARAM_S task_init_param; task_init_param.usTaskPrio = 4; task_init_param.pcName = "RxTask"; task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)Led1Task; task_init_param.uwStackSize = 512; uwRet = LOS_TaskCreate(&RX_Task_Handle, &task_init_param); if (uwRet != LOS_OK) { //printf("Led1Task create failed,%X\n",uwRet); return uwRet; } task_init_param.usTaskPrio = 4; task_init_param.pcName = "TxTask"; task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)Led2Task; task_init_param.uwStackSize = 512; uwRet = LOS_TaskCreate(&TX_Task_Handle, &task_init_param); if (uwRet != LOS_OK) { //printf("Led2Task create failed,%X\n",uwRet); return uwRet; } return LOS_OK; }int main(void) { /* USER CODE BEGIN 1 */ UINT32 uwRet = LOS_OK; LOS_KernelInit(); uwRet = AppTaskCreate(); if(uwRet != LOS_OK) { //printf("LOS Creat task failed\r\n"); } LOS_Start(); while (1) { } }

添加完成后编辑即可,如果遇到online错误,只需要将报错的地方将online删除即可。

    推荐阅读