IAR ERROR --- [Li006]

今天移植代码时遇到一个比较奇葩的问题,记录如下:

Error[Li006]: duplicate definitions for "Uart3"; in "E:\IAR_1768Pro_PCB799\Debug\Obj\Uart3_init.o", and "E:\IAR_1768Pro_PCB799\Debug\Obj\uModemG600.o"

重复定义 变量 Uart3

可是,uModemG600.c 文件中没有 Uart3 这个变量 ,只有 uart3.h 这个头文件,问题就出现在在这头文件中。

Uart3 这个变量的定义就放在 uart3.h 中,而且 uart3.h 在uart3.c 和 uModemG600.c 中都有#include , uart3.h 也未做条件编译,导致uart3.h 重复编译, 变量重复定义。

//===================问题描述完毕,一下是个人观点======================

我个人的做法是,变量/函数 定义在 *.c 文件中,变量/函数声明在 *.h 文件中, 并且 *.h 文件加编译条件,放置重复包含,格式如下:

user.c

 1 //user.c file
 2
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include "user.h"
 6
 7 signed char g_a = 0;
 8 unsigned char g_b = 0;
 9 signed int g_c = 0;
10
11 void fun1(void)
12 {
13     //do something
14 }
15
16 void fun2(void)
17 {
18     //do something
19 }

user.h

#ifndef _USER_H_
#define _USER_H_

extern signed char g_a;
extern unsigned char g_b;
extern signed int g_c;

void fun1(void);
void fun2(void);

#endif
时间: 2024-10-24 08:54:40

IAR ERROR --- [Li006]的相关文章

IAR:Error [Li005]:no definition for&quot;***&quot; 问题之连接

对于 IAR 出现的 Error[Li005] 链接错误,网上已经给出了比较详尽的解决方法,而对于这次记录,主要是记录解决问题的思路. 网上给出的方法:http://blog.csdn.net/yueniaoshi/article/details/7844653 问题的本质都是一样的,这在问题给出的描述中已经说的很清楚了,是某个函数或者变量没有定义. 新来的同事在将一个工程从keil移植到iar时,出现了上述的连接错误,第一次遇到这样的文体,我也很纳闷,因为根据提示 是有两个库函数没有定义,可是

弱性能穿戴设备App化之Lua For STM32

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 今年穿戴设备突然火起来......穿戴设备与概念未爆发前的电子产品不同于"可联网"和"支持app",使得一个封闭的小玩意可以加入多人的想象,屌丝的想象力很丰富的说.... 穿戴设备目前分为"屌丝"和"高富帅"两档配置,所谓"屌丝"配置也就是弱得装不上android,未来一段时间内,手表和手环都以"屌丝&quo

Zigbee调试问题 IAR编译出现 Fatal Error[e72]: Segment BANKED_CODE must be defined in a segment definition option (-Z, -b or -P)

转自:http://blog.163.com/ojb_123/blog/static/24177424201463012639205/ (作者:Bkey) 是链接(Link)时出错:Fatal Error[e72]: Segment BANKED_CODE must be defined in a segment definition option (-Z, -b or -P) 原因是IAR新版本使用旧版本文件 解决方法:打开project->options->linker->confi

【转】使用IAR时遇到的一些Error、Waring

http://hi.baidu.com/sendoc/blog 作为菜虫,在使用IAR的时候编写CC2430..Z-Stack2006程序会遇到如下一些错误,当然随着学习的深入,我会持续更新. 1 Q: Error[e16]: Segment XDATA_Z (size: 0x19a1 align: 0) is too long for segment definition. At least 0xe4c more bytes needed. The problem occurred while

IAR FOR STM8S 错误 An error occurred while retrieving GDI features: gdi-error [40201]解决方法

今早使用IAR调试编译调试一个工程,发现IAR竟然出现如下错误信息 An error occurred while retrieving GDI features: gdi-error [40201]: Can't access configuration database 在网上查看了一下,也有人出现这个问题,总体来说可以通过重装IAR debugger-support-files这个,解决问题. 我已经将工具上传到CSDN的下载页面, IAR for stm8 debugger-suppor

IAR EWAR 内联汇编 Error[Og010], Error [Og005], Error [Og006]

Error [Og005] + [Og006] when using inline assembler EW targets: 430, ARM, AVR EW component: C/C++ compiler Last update: April 3, 2013 Problem: When compiling a project with the IAR Embedded Workbench AVR v 6.12 the following errors might appear: Erro

IAR EWAR 内联汇编 调用外部函数 Error[Og005], Error[Og006]

How do I call a C function in another module from inline assembler in IAR EWARM? I have a bit of assembly in a hard fault handler. The assembly is basically meant to pass the current stack pointer as a parameter (in R0). It looks like so... __asm(" m

Zigbee 调试问题Error[e12]: Unable to open file &#39;lnk51ew_cc2530b.xcl&#39;

使用IAR Embedded Workbench编译zigbee程序时出现以下错误解决办法: Error[e12]: Unable to open file 'C:\Program Files\IAR Systems\Embedded Workbench 5.3\8051\config\lnk51ew_cc2530F256.xcl' 出现该错误应该是找不到config文件. 解决方法如下: 如果你是win7系统并且是64位的,那么就要修改link的路径,使用32位系统的时候安装程序是默认在\Pr

在IAR(EWARM)中移植STM32固件库

一.移植环境说明 (1).win10系统 (2).IAR(EWARM)7.7 (3).STM32标准固件库3.5.0 http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32054.html 二.移植步骤 (1).首先建立一个C语言的main工