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

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


前言

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


提示:以下是本篇文章正文内容,针对老版本liteos移植的使用说明,新手对移植有点懵的可以尝试一下,你会发现怎么这么简单。。。。。。

一、下载老版本liteos

老版本liteos下载链接,从此链接下载的文件,我把其它没用的干扰文件全部删除掉了,当你需要深入学习时可以从git上再去下载完整版本。
从git上下载下来的完整文件夹是这样的
在这里插入图片描述
但是对移植有用的只有arch和kernel文件夹,其它的文件或者相关文档你要有兴趣也可以打开看看

二、参考官方的推荐移植步骤

1.Keil平台 5.18a
在这里插入图片描述
CMSIS版本:5.2.0
在这里插入图片描述

1.新建项目

使用keil5新建一个项目,并且使用版本较高的CMSIS,如果移植后编译提示缺少 __get_IPSR 函数,就是CMSIS版本过低导致的。(不建议使用STM32标准库移植,因为标准库的版本比较低,移植会出错)

1.1打开keil创建 一个空项目,命名为test_liteos

在这里插入图片描述
单片机我选择的是STM32F103VE
在这里插入图片描述
然后选择CMSIS核心文件和启动文件
在这里插入图片描述
新建一个名称为main.c的源文件,保存后将文件加入到项目中
在这里插入图片描述
添加基本代码到main.c文件

#include "stm32f10x.h"
int main(void)
{
  while (1)
  {
  }
}

选择编译器版本,我的只有选择V5.06才能编译
在这里插入图片描述
在当前界面中勾选微库,必选项
在这里插入图片描述
编译代码,如果没有错误就可以进行下一步了
在这里插入图片描述
在这里插入图片描述
将下载好的Liteos老版本源码,拷贝到项目中
在这里插入图片描述
在项目中,arch文件夹下添加Liteos相关源码
在这里插入图片描述
在这里插入图片描述
添加后如图:
在这里插入图片描述
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,可以不必添加)

添加完成后如图:
在这里插入图片描述
OS_CONFIG可以选择性的添加,我添加的目的是为了修改方便
在这里插入图片描述
文件添加完成后还需要将用到的源文件的所有目录添加到项目中,否则在编译时会提示找不到源文件等错误。
在这里插入图片描述

任务创建测试:将如下代码复制到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删除即可。

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将stm32f103c8t6的代码移植stm32f103c6t6时,需要进行以下几个步骤: 1. 首先,需要修改单片机型号。在代码中找到相关的宏定义或配置文件,将其中的型号修改为stm32f103c6t6。 2. 接下来,需要修改启动文件。找到原来的启动文件startup_stm32f10x_md.s,并将其替换为适用于stm32f103c6t6的启动文件startup_stm32f10x_hd.s。 3. 进一步修改链接文件。找到链接脚本文件,一般是以.ld为后缀名的文件,将其中的链接脚本修改为适用于stm32f103c6t6的链接脚本。 4. 最后,需要修改编译器和汇编器的相关参数。在编译器和汇编器的配置文件中,将相关的宏定义和参数修改为适用于stm32f103c6t6的配置。 通过以上步骤,就可以将stm32f103c8t6的代码成功移植stm32f103c6t6上了。请注意,这个移植方法也适用于其他STM32单片机之间的移植。 #### 引用[.reference_title] - *1* *2* [stm32f103rct6的代码移植stm32f103c8t6教程](https://blog.csdn.net/qq_40305944/article/details/107448072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32开发项目:STM32CubeIDE中如何手动修改MCU的型号](https://blog.csdn.net/u013441358/article/details/106771818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值