【LiteOS】LiteOS移植常见问题

原文地址::【LiteOS】LiteOS移植常见问题_51CTO博客_liteOS移植

发现很多人在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;
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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、在线调试,日志打印等。

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

在实际项目过程中,总会遇到各式各样的问题,大家需要掌握调试手段,善于解决问题,提高自己的能力!
-----------------------------------
©著作权归作者所有:来自51CTO博客作者华为云开发者联盟的原创作品,请联系作者获取转载授权,否则将追究法律责任
【LiteOS】LiteOS移植常见问题
https://blog.51cto.com/u_15214399/2809851

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32是一款低功耗、高性能的无线模块,而LiteOS是华为推出的一种轻量级的操作系统。将LiteOS移植到ESP32上可以增强其操作系统支持,提高其可靠性和稳定性。 首先,ESP32和LiteOS都是开源的,可通过获取源代码进行移植移植过程需要下载ESP32专用的工具链和LiteOS源代码,然后根据硬件平台进行适配。 其次,为了将LiteOS移植到ESP32上,需要进行一些硬件适配工作。ESP32拥有双核心处理器、Wi-Fi和蓝牙模块等功能,需要在移植过程中考虑这些硬件的驱动程序和功能的支持。可以根据ESP32的硬件规格,修改LiteOS的驱动程序,以兼容ESP32的硬件平台。 另外,移植LiteOS还需要对内存管理、任务调度和外设驱动等进行配置。由于ESP32资源受限,需要根据实际硬件情况进行内存配置,确保操作系统的正常运行。同时,需要制定任务调度算法,合理安排任务的执行顺序,提高系统的运行效率。另外,还需要针对ESP32的外设进行驱动程序的编写,以实现对外设的控制和管理。 最后,进行移植后,需要进行测试和调试。通过一系列的测试,确保操作系统在ESP32上的正常运行。如果发现问题或异常情况,需要进行调试和修改,直至系统稳定可靠。 综上所述,将LiteOS移植到ESP32上需要进行硬件适配、配置和调试等工作。通过这一系列的步骤,可以实现ESP32上LiteOS的正常运行,提高其功能和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值