发现很多人在LiteOS的移植过程中总会遇到一些问题,现在简单做一些总结。后续有新的问题提再继续补充。

1、CMSIS版本导致的问题

问题现象一般如下图所示,编译后报错,Undefined symbol __get_IPSR (找不到 符号__get_IPSR )。

分析:该问题一般出现在stm32f103系列的单片机使用标准库移植的情况下。F103系列单片机标准库只更新到3.5版本,cmsis版本较低。

内核相关的文件中缺少 __get_IPSR 函数。

解决办法有三种:

1、将标准库替换成HAL库。(代码改动大,有些人可能不愿意。但hal库是趋势,建议大家及早准备)

2、从mdk安装目录中复制最新的cmsis文件出来,替换掉当前工程目录下的文件。

即将MDK安装目录下 Packs\ARM\CMSIS\5.5.1\CMSIS\Core\Include 目录下的头文件,复制到当前工程目录下CMSIS头文件路径下。

3、将liteos源码中arch\arm\common\cmsis 目录下的文件,复制到当前工程目录下CMSIS头文件路径下。

2、无法下载和调试代码

问题现象一般是:首次下载代码后,无法进行调试,找不到器件;有的情况下也无法再下载程序。

分析:该问题一般是由于使用STM32CubeMX生成裸机工程导致的。在配置时,没有使能Debug功能,导致调试接口禁用。

解决方法:配置时,要使能串行调试功能(如果使用的是SWD接口)。如下图:

如果由于禁用了SWD导致已经不能下载程序了,那么需要先按住CPU的复位,然后再点击下载程序。

3、没有重定向printf导致程序死掉

内核在运行过程中,有时会打印一些日志,打印函数使用的是printf。

因此,如果没有重定向printf函数,那么会导致程序死掉。或者,你可以关闭日志打印功能,不使用printf函数。

重定向printf的示例代码如下,需要勾选使用微库:

///重定向c库函数printf到USART1
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到USART1 */
UART_SendByte(USART1, (uint8_t) ch);
return (ch);
} ///重定向c库函数scanf到USART1
int fgetc(FILE *f)
{
/* 等待串口1输入数据 */
while((USART1->SR&UART_FLAG_RXNE)==0);
return (int)USART1->DR&0xff;
}

4、关于OS是否托管中断

个人建议在移植的时候选择OS不托管中断(LOSCFG_PLATFORM_HWI 定义为 NO)。

如果选择OS托管中断(LOSCFG_PLATFORM_HWI 定义为 YES),那么移植相对比较复杂:

1.需要修改启动文件,将通过DCD指令开辟的中断向量表删除;

2. 同时,要修改sct文件,加入中断向量表存储地址相关的内容。

写程序时,应在内核初始化之后,再使用 LOS_HwiCreate 创建中断,绑定中断处理函数。

在内核初始化之前调用LOS_HwiCreate 是无效的,切记。

5、关于时间片轮转

如果 LOSCFG_BASE_CORE_TIMESLICE    定义为 NO ,关闭时间片轮转,则任务无法按时间片方式调度。

即:当任务优先级相同时,若任务不主动阻塞自己,则不会触发进行任务调度。表现为:如果创建了两个相同优先级的任务,则其中一个任务会一直占用 CPU,另外一个任务无法得到执行。

6、其他问题

其他问题,大家可以按如下方式排除:

1、排除配置问题,可以对比target_config.h中的宏定义,找出自己是否有配置不对的地方

2、在线调试,日志打印等。

至于使用问题,可以仔细阅读官方教程,还是蛮详细的。

在实际项目过程中,总会遇到各式各样的问题,大家需要掌握调试手段,善于解决问题,提高自己的能力!

作者:llb90

往期文章精选

如果让你手写个栈和队列,你还会写吗?

挑战10个最难的Java面试题(附答案)【上】

javascript基础修炼(13)——记一道有趣的JS脑洞练习题

【我的物联网成长记3】如何开发物联网应用?

【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!

对你没有看错!不到 10 行代码完成抖音热门视频的爬取!

Python面试的一些心得,与Python练习题分享

【LiteOS】LiteOS移植常见问题的更多相关文章

  1. linux移植常见问题

    *************1.给板子添加新的驱动**************** 一.       驱动程序编译进内核的步骤在 linux 内核中增加程序需要完成以下三项工作:1. 将编写的源代码复制 ...

  2. 【LiteOS】STM32F103-LiteOS移植教程(详细篇)【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. 【LiteOS】STM32F103-LiteOS移植教程(详细篇)

    总览 本文基于STM32F103C8T6,详细讲述华为LiteOS的移植过程.开发工具是MDK5.LiteOS官方已经适配过cortex M系列内核的单片机,因此移植过程非常简单. LiteOS有两种 ...

  4. 华为Liteos移植到stm32F03ZE

    华为Liteos和物联网设备侧sdk移植到stm32F03ZE霸道板子上 推荐官方教程:https://liteos.github.io/ 啥是LIteos "开源免费"的实时操作 ...

  5. 漫谈LiteOS之开发板-LiteOS移植(基于GD32450i-EVAL)

    1 为什么移植? 嵌入式设备的芯片型号和外设的差异较大,资源有限.而RTOS无法适配集成所有的驱动,因此会先适配部分开发板,然后通过移植使得适配更多的开发板. 可移植性是嵌入式操作系统与普通操作系统的 ...

  6. OpenHarmony LiteOS C-SKY指令集移植指北

    摘要:本文介绍在OpenHarmony社区LiteOS-M项目中新增C-SKY指令集的开发流程,以及适配相应qemu工程的方法和步骤,供LiteOS内核相关开发者学习交流. 本文分享自华为云社区< ...

  7. 科普干货|漫谈鸿蒙LiteOS-M与HUAWEI LiteOS内核的几大不同

    摘要:鸿蒙和LiteOS的内核都是一样的名字,可它们究竟有什么不同呢?一起来对比一下文件吧! HarmonyOS系统 HarmonyOS是一款"面向未来".面向全场景(移动办公.运 ...

  8. 华为方舟编译器 下载 和 LiteOS Studio Setup 2019-04-16.exe SDK下载

    华为方舟编译器是首个取代Android虚拟机模式的静态编译器,可供开发者在开发环境中一次性将高级语言编译为机器码.此外,方舟编译器未来将支持多语言统一编译,可大幅提高开发效率. 编译器下载 [Ark] ...

  9. 物联网打工人必备:LiteOS Studio图形化调测能力

    摘要:本文会给大家介绍下LiteOS Studio的调测的几个知识点,包括: 调测配置,监视变量,反汇编代码同步展示,数值进制切换,跨平台编译调测,Qemu模拟器调测,多核调测,远程设备调测等. 掌握 ...

随机推荐

  1. Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...

  2. Java基础系列4:抽象类与接口的前世今生

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 1.抽象类: 当编写 ...

  3. raw文件转mha文件

    raw格式 在体数据(volume)中,经常会遇到raw文件,raw文件就是其实就是所有体素组成的文件,raw文件必须还有一些描信息才能用(因为得知道数据的size,type,spacing等),就像 ...

  4. HtmlSpanner 使用小结 -- 安卓解析html

    如何利用 HtmlSpanner解析 HTML格式 的字符串: 1. GitHub 下载HtmlSpanner项目 https://github.com/NightWhistler/HtmlSpann ...

  5. 算法编程题积累(1)——网易笔试"工程师工作安排“问题

    首先理解题目意思:每个人只能做工作序号表里的一件工作且两个人不能同时做一件工作.AC思路:采用暴力枚举每种可能的分配方案,子问题的解决逐步向上解决了母问题,最终原问题得解. 标程作者:NotDeep( ...

  6. cmake 编译安装mysql5.5.32

    1.安装cmake 上传tar包 rz cmake-2.8.8.tar.gz 解压tar包,并进入解压后的文件夹 tar xf cmake-2.8.8.tar.gz cd cmake-2.8.8 编译 ...

  7. 为什么 HTTPS 比 HTTP 安全

    HTTP(超文本传输协议)是目前互联网应用最广泛的协议,伴随着人们网络安全意识的加强,HTTPS 被越来越多地采纳.不论是访问一些购物网站,或是登录一些博客.论坛等,我们都被 HTTPS 保护着,甚至 ...

  8. [ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统”

    ASP.NET Core应用 具有很多读取文件的场景,比如配置文件.静态Web资源文件(比如CSS.JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文 ...

  9. ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction

    跟Entity Framework之前的版本不同,Class DbContext不再有AcceptAllChanges()方法. 使用Transaction需要使用DbContext中的Databas ...

  10. redis 底层数据结构

    简单动态字符串SDS 包含字符串长度,剩余可用长度,字符数组 用于Redis中所有的string存储 字典(map) 数组+链表形式,跟hashMap很像 链地址法解决hash冲突 rehash使用新 ...