STM32F103移植LiteOS保姆级教程(基于Huawei-LiteOS-studio)

前言

开始按照官方教程进行安装和配置发现会有一些问题,经过不断尝试终于可以在huawei-liteos-studio下编译移植成功。以下为STM32F103ZE移植LiteOS详细的完整教程。


步骤

1.安装liteos-studio
进入官方链接:https://liteos.gitee.io/liteos_studio/
点击下载软件下载.exe文件进行安装
在这里插入图片描述
下载完成后,按照官方文档进行安装和配置中文环境,以及安装git for window和make构建软件:https://liteos.gitee.io/liteos_studio/#/install
其中会下载得到.bat后缀的文件,双击文件就会自动下拉安装相关的软件,默认位置于C:\Users\xxx.huawei-liteos-studio当中。
经过尝试从官网下载的arm-none-eabi编译器编译过程会存在些许问题,后面直接从ARM官网下载交叉编译器自行配置。

2.新建工程
打开huawei-liteos-studio,点击图标在这里插入图片描述
出现新建工程界面。配置相关信息,选择相应的开发板型号后点击确认,软件会自动在工程目录下创建工程,这需要一点点等待时间。
在这里插入图片描述
创建工程成功后,左边的资源管理器出现源码目录如下:
在这里插入图片描述
点开左侧目录下的target,哎有点不对劲,我没选择C8T6啊,所以需要手动删除STM32F103_C8T6文件夹。
在这里插入图片描述

3.配置相关依赖
点开左侧目录tools->menuconfig->README_CN.md,可知编译除了交叉编译器还需要python环境和kconfiglib依赖。
python官方推荐建议安装3.2+版本
python官网下载链接:https://www.python.org/downloads/
安装完成并配置好环境变量之后,接下来调出CMD窗口,输入以下命令进行kconfiglib的安装:

pip install kconfiglib

4.部署arm交叉编译器
从官方教程中下载的编译器会有些问题,需要到arm官网自行安装编译器进行编译,下载地址:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads#
推荐下载安装2019之后的版本,避免编译器版本过旧无法编译。
安装路径将Arm GNU Toolchain arm-none-eabi\11.2 2022.02字样改成arm-none-eabi,之后进行安装和配置环境变量。
在这里插入图片描述
配置完成后点击studio的.png)
图标点击编译器进行更改,将路径改成编译器的安装路径下的bin目录,点击保存。

5.编译
九九八十一难终于来到编译环节了。诶居然报了下面的错?不要紧张,只是头文件声明和定义不符。
在这里插入图片描述
到lib->libc->include->stdlib.h的第695行将unsigned short [3]改成 unsigned short *s即可。
在这里插入图片描述
编译,终端出现以下字样则说明编译成功。
在这里插入图片描述

6.将elf文件转化为hex文件
编译成功后会在工程目录下的out->STM32F103_FIRE_Arbitrary下生成HuaweiLiteOS.elf和.bin文件,但是还没办法烧录到开发板,我们需要将elf文件转化为hex文件才能烧录。点击菜单栏处终端->新终端调出powershell,进入elf文件所在目录执行以下命令:

arm-none-eabi-objcopy -O ihex Huawei_LiteOS.elf Huawei_LiteOS.hex

在这里插入图片描述
在这里插入图片描述可以看到目录下生成了.hex文件,烧录后看到板子灯在闪烁,则证明移植成功。

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,在HUAWEI-LiteOS Studio中创建三个任务,如下所示: ```c #include "los_task.h" #include "los_typedef.h" #include "los_sys.h" #include <stdio.h> #define TASK_STACK_SIZE 0x400 static UINT32 g_task1ID; static UINT32 g_task2ID; static UINT32 g_task3ID; static void Task1(void) { while (1) { printf("Task1 is running.\n"); LOS_TaskDelay(1000); } } static void Task2(void) { while (1) { printf("Task2 is running.\n"); LOS_TaskDelay(1000); } } static void Task3(void) { while (1) { printf("Task3 is running.\n"); LOS_TaskDelay(1000); } } int main() { UINT32 uwRet = LOS_OK; uwRet = LOS_KernelInit(); if (uwRet != LOS_OK) { return LOS_NOK; } uwRet = LOS_TaskCreate(&g_task1ID, "Task1", Task1, TASK_STACK_SIZE, 0x11); if (uwRet != LOS_OK) { return LOS_NOK; } uwRet = LOS_TaskCreate(&g_task2ID, "Task2", Task2, TASK_STACK_SIZE, 0x11); if (uwRet != LOS_OK) { return LOS_NOK; } uwRet = LOS_TaskCreate(&g_task3ID, "Task3", Task3, TASK_STACK_SIZE, 0x11); if (uwRet != LOS_OK) { return LOS_NOK; } LOS_Start(); return 0; } ``` 在上述代码中,我们创建了三个任务`Task1`、`Task2`和`Task3`,它们的优先都为0x11,即相同优先。 编译并下载程序到板子上后,打开终端观察输出结果,如下所示: ``` Task2 is running. Task1 is running. Task3 is running. Task2 is running. Task1 is running. Task3 is running. Task2 is running. Task1 is running. Task3 is running. ... ``` 从输出结果可以看出,三个任务的优先相同,因此它们轮流运行,没有出现某个任务一直占用CPU的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值