LiteOS移植常见问题分析

  • 1、CMSIS版本导致的问题
  • 2、无法下载和调试代码
  • 3、没有重定向printf导致程序死掉
  • 4、关于OS是否托管中断
  • 5、关于时间片轮转
  • 6、其他问题

发现很多人在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. 在线调试,日志打印等。

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

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

【LiteOS】LiteOS移植常见问题分析相关推荐

  1. 【LiteOS】LiteOS移植常见问题

    发现很多人在LiteOS的移植过程中总会遇到一些问题,现在简单做一些总结.后续有新的问题提再继续补充. 1.CMSIS版本导致的问题 问题现象一般如下图所示,编译后报错,Undefined symbo ...

  2. LiteOS内核源码分析:静态内存Static Memory

    本文分享自华为云社区<LiteOS内核源码分析系列十二 静态内存Static Memory>,原文作者:zhushy . 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包 ...

  3. LiteOS内核源码分析:动态内存之Bestfit分配算法

    本文分享自华为云社区<LiteOS内核源码分析系列十三 动态内存Bestfit分配算法>,原文作者:zhushy . 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包括内 ...

  4. LiteOS内核源码分析:消息队列Queue

    本文分享自华为云社区<LiteOS内核源码分析系列十 消息队列Queue>,原文作者:zhushy . 队列(Queue)是一种常用于任务间通信的数据结构.任务能够从队列里面读取消息,当队 ...

  5. LiteOS内核源码分析:任务LOS_Schedule

    本文分享自华为云社区<LiteOS内核源码分析系列六 -任务及调度(5)-任务LOS_Schedule>,原文作者:zhushy . 本文我们来一起学习下LiteOS调度模块的源代码,文中 ...

  6. LiteOS内核源码分析:任务栈信息

    本文分享自华为云社区<LiteOS内核源码分析系列六 -任务及调度(2)-任务LOS_Task>,原文作者:zhushy . 我们介绍下LiteOS任务栈的基础概念.LiteOS任务栈是高 ...

  7. LiteOS内核源码分析:位操作模块

    摘要:本文带领大家一起剖析了LiteOS位操作模块的源代码,代码非常简单,参考官方示例程序代码,实际编译运行一下,加深理解. 本文分享自华为云社区<LiteOS内核源码分析系列五 LiteOS内 ...

  8. DB2数据库移植常见问题全面解析

    DB2数据库移植常见问题全面解析[@more@] 安装与配置 在Linux下重新安装DB2之后无法建立DB2INST1的实例,提示已经存在 解决办法:删除 /var/db2/v81目录,再重新创建实例 ...

  9. 【JY】YJK前处理参数详解及常见问题分析(五):风荷载信息

    点击蓝字  求求关注 [风荷载信息详解] 一.基本参数 A区参数详解 1.执行规范 选择所执行的规范. 2.地面粗糙度类别 分为A.B.C.D四类. 3.修正后的基本风压 这里所说的修正后的基本风压, ...

最新文章

  1. visual assist x太卡了_LeetCode69. x 的平方根
  2. 乱乱乱!那些惨不忍睹的机房布线
  3. 理科生浪漫起来,谁都顶不住!
  4. weakhashmap_Java WeakHashMap values()方法与示例
  5. java接收二进制数据_java-从套接字读取二进制数据
  6. [css] 用css画出一把刻度尺
  7. 设计模式学习笔记——装饰(Decorator)模式
  8. ZeroMQ简介:一种高性能的异步消息传递库
  9. 免费直播:1 小时带你体验 Python 车牌识别实战
  10. OpenCV-图像处理(21、霍夫圆变换)
  11. 遥感数据下载网站整理
  12. 高速信号的预加重(Pre-emphasis)和去加重(De-emphasis)
  13. VC 读取usb相机
  14. matlab 双均线,双均线策略(CTA)
  15. dble安装zk及配置mysql主从模式,在已有mysql存在数据升级mysql配置
  16. ***技巧总结(zz)
  17. 关于Java使用 BigDecimal 的错误 Rounding necessary
  18. visual assist x太卡了_带你纵横职场的高阶EVO笔记本 华硕灵耀X纵横评测
  19. Understand Selections in D3
  20. AS400 - DB2 for i的加密、解密

热门文章

  1. 错误现象:(com.logicaldoc.core.security.dao.HibernateUserDAO 102) -- Packet for query
  2. 精确的目标检测中定位置信度的获取
  3. 电大计算机专业软件工程试题,2021国家开放大学电大本科《软件工程》期末试题及答案(试卷号:1260)...
  4. .Net Framework OleDb 数据提供程序要求 Microsoft Data Access Components(MDAC) 2.6 或更高版本
  5. 注会考试计算机应用技巧,2019年注会cpa考试机考系统计算器的操作技巧
  6. 使用xom实现xml文件数据的查找,删除,修改(转载)
  7. 关系数据库主码、超码、候选码、主码(键)
  8. 成吉思汗大都会灯谜答题器
  9. 【Maxwell】MySQL数据监听
  10. 查询域名 在线批量查询域名dns