wshini7316 发表于 2010-9-8 10:03:26

ucos2在iar中定义全局变量这样可以吗extern volatile unsigned int b1;在.h中

如题:在.h中定义extern volatile unsigned int b1;这样的变量可以吗?
为什么在任务中调用的函数包括了上面定义的变量时就会报告说没有明确的定义啊?
Error: Undefined external "b1" referred in DS18B20 ( E:\iar project\ucos0901\osshyprojet\Debug\Obj\DS18B20.r90 )
Error while running Linker

STM8L103 发表于 2010-9-8 10:42:48

在某个C文件里写上:
volatile unsigned int b1;

wshini7316 发表于 2010-9-8 10:46:05

回复【1楼】STM8L103
-----------------------------------------------------------------------

可是我有几个.c文件都要用到这一个变量啊。

xuxi2009 发表于 2010-9-8 11:02:19

这样做不是很理智

wshini7316 发表于 2010-9-8 11:04:53

回复【3楼】xuxi2009
-----------------------------------------------------------------------

那怎么处理各个函数共用的全局变量?

wshini7316 发表于 2010-9-8 11:08:47

现在是把原有的程序移植到操作系统中,原来设计是用了很多的全局变量,但现在都转成信号消息队列比较困难。有什么好的解决方法吗?

STM8L103 发表于 2010-9-8 11:13:38

回复【2楼】wshini7316
回复【1楼】stm8l103
-----------------------------------------------------------------------
可是我有几个.c文件都要用到这一个变量啊。
-----------------------------------------------------------------------

又没让你在所有C文件都定义b1,
仅仅是在一个C文件定义b1,

工程里所有C文件使用b1,包含头文件就可以使用。

STM8L103 发表于 2010-9-8 11:18:16

extern volatile unsigned int b1;

意思是告诉编译器,b1是个外部变量,其定义由外部提供。

所有C文件都说b1由外部提供,结果连接的时候,都去去找b1的定义,
肯定找不到,当然报错。
都去用,没人提供,不行。


要有个C文件说,b1我已经定义好,你们要用就来用吧,这样连接通过。
一个人定义,所有人都可以用。


如果多个C文件都定义外部变量b1,也会出错,b1重复定义了。
多个人都定义同一个变量,也不行,会冲突。

wshini7316 发表于 2010-9-8 11:28:56

回复【6楼】STM8L103
-----------------------------------------------------------------------

不行,我把所有的全局变量都放在c的一个文件中,在其他函数中就会报告变量没有定义。

wshini7316 发表于 2010-9-8 11:29:58

回复【8楼】wshini7316
-----------------------------------------------------------------------

我在试试啊

wshini7316 发表于 2010-9-8 11:33:42

回复【7楼】STM8L103
-----------------------------------------------------------------------

谢谢!受教了。现在编译通过了。
页: [1]
查看完整版本: ucos2在iar中定义全局变量这样可以吗extern volatile unsigned int b1;在.h中