IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> IAR Error[Li006]: duplicate definitions for “g_stLosVersion“; -> 正文阅读

[嵌入式]IAR Error[Li006]: duplicate definitions for “g_stLosVersion“;

前言

用CubeMX按照实际MCU(STM32F103C8T6)定义生成IAR(8.40.2.22891)工程框架。
按照资料,将git上的旧版lite-os代码加入工程。
初次弄,将所有文件都手工加进去了。IAR中的group和文件名都与实际目录相对应。这样想在编程过程中浏览文件就方便了。
加完之后,尝试编译一下,出现如下报错。

Error[Li006]: duplicate definitions for "g_stLosVersion"; in "D:\test_dir\EWARM\test_F103C8\Obj\cmsis_liteos.o", ...

后面还有好多 “duplicate definitions”的报错

出现这种报错,一般就2个原因:

  • 变量不是定义在.c中,而是定义在.h中,编译时报错。
  • 变量虽然定义在.c中,但是改.c文件被当作头文件使用,引起了重复包含。

实验

将工程加入Source Insight 4.0.
看了g_stLosVersion的使用情况

---- g_stLosVersion Matches (3 in 1 files) ----
cmsis_liteos2.c (lite_os\components\cmsis\2.0) line 72 : const osVersion_t g_stLosVersion = {001, 001};
osKernelGetInfo in cmsis_liteos2.c (lite_os\components\cmsis\2.0) :         version->api = g_stLosVersion.api;
osKernelGetInfo in cmsis_liteos2.c (lite_os\components\cmsis\2.0) :         version->kernel = g_stLosVersion.kernel;

g_stLosVersion的定义和使用都在一个.c文件(cmsis_liteos2.c )中。
不是变量定义位置错误引起的报错。

莫非cmsis_liteos2.c被当作头文件重复包含了?
在SI中查 cmsis_liteos2.c 的包含关系。

---- cmsis_liteos2.c Matches (4 in 4 files) ----
cmsis_liteos.c (lite_os\components\cmsis) line 40 : #include "2.0/cmsis_liteos2.c"

果真啊,cmsis_liteos2.c 被当作头文件包含了。
\lite_os\components\cmsis\cmsis_liteos.c 的实现:

#include "los_config.h"

#if (CMSIS_OS_VER == 1)
#include "1.0/cmsis_liteos1.c"
#elif (CMSIS_OS_VER == 2)
#include "2.0/cmsis_liteos2.c"
#endif

lite-os的配置文件中,会指定使用哪种CMSIS, 在cmsis_liteos.c 中,就会选择包含cmsis_liteosx.c
那知道了,这种报错的原因是.c重复包含。
解决问题的方法:

  • 从IAR的group中去掉手工添加的cmsis_liteos2.c,由cmsis_liteos.c在编译时,自动包含cmsis_liteos2.c就好了。

手工去掉cmsis_liteos2.c后,再编译,此错误消失。
其他编译错误另外处理。

总结

现在能加入第三方IDE(MDK, IAR)的MCU工程只能使用git上的旧版lite-os.
gitee上的lite-os官方主库,已经全面倒向HUAWEI-LiteOS-Studio.
但是HUAWEI-LiteOS-Studio生成的MCU工程只支持部分MCU(6,7种的样子), 调试接口也只能使用JTAG, 不直接支持SWD, SWIM. 想用新版lite-os也只能眼馋啊。

你出了一种IDE(HUAWEI-LiteOS-Studio), 让大家用也挺好,不过要能支持市面上的大部分MCU才好。
在没有全面支持所有MCU之前,还是跟随新版lite-os出个移植文档的好。
要不想换新版lite-os也无从下嘴啊。

很多公司现在产品使用的是第三方IDE, 如果不用换IDE, lite-os官方每次出最新版,都更新一下移植说明,我觉得这比出IDE(HUAWEI-LiteOS-Studio)还实用。

现在市面上出的lite-os的书,也是针对git上的旧版lite-os写的。
lite-os官方关于使用第三方IDE的工程例子,也只在lite-os早期版本中才有。

希望lite-os官方以后能支持最新版lit-os不使用HUAWEI-LiteOS-Studio的场景(使用第三方IDE),那样大家肯定都喜欢转到lite-os上来。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:59:50  更:2021-08-06 10:01:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:42:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码