gudujiangone 发表于 2013-1-10 10:46:12

dzmcs 发表于 2013-1-10 10:46:13

头文件只声明,c文件定义

可以再c文件中 volatile uint8 Timer_1S,Timer_5S,Timer_10S,Timer_20S,Timer_40S;
在头文件中    extern volatile uint8 Timer_1S,Timer_5S,Timer_10S,Timer_20S,Timer_40S;

然后ISR的c文件中包含头文件,然后变量直接用就好了

gudujiangone 发表于 2013-1-10 11:03:03

gudujiangone 发表于 2013-1-10 18:28:47

xizi 发表于 2013-1-10 19:47:53

extern 是声明,不是定义。所以只做extern volatile uint8 Timer_1S;然后就用Timer_1S=1; 不可以的。
中断的为何必须加volatile,得先知道volatile有什么作用。volatile是告诉编译器每次使用变量时都要重新读取该变量值,而不是使用缓存值。
所以当中断与主程序共享变量时,要使用volatile。因为主程序不知道该变量何时会被中断改变,只好每次都读取。
但是在你的代码中,没有看到哪个主程序使用了中断变量i。这种情况下,volatile没有必要,虽然也没有坏处。

gudujiangone 发表于 2013-1-10 20:49:44

gudujiangone 发表于 2013-1-10 21:08:32

xizi 发表于 2013-1-11 02:37:40

本帖最后由 xizi 于 2013-1-11 03:19 编辑

百度百科举的例子与你的代码情况不一样,你的代码不会有两个地址问题。百度百科举的例子是数组,你的代码是单一变量。

首先说,“这俩次声明比如Timer_1S岂不是俩次......”证明你没有理解“定义”与“声明”的差别。
c文件中   volatile uint8 Timer_1S; 这是定义。
头文件中    extern volatile uint8 Timer_1S; 这是声明。
是一次定义,一次声明。不存在两次“声明”。

“定义”发生地址分配;而“声明”不发生地址分配,是表明该地址已经在别处发生了地址分配,请到其定义处去找变量。
语法上区分是,没有extern就是定义,有extern 就是声明。

然后说,数组与指针问题比较复杂。百度百科举的例子我也不是完全理解。

gudujiangone 发表于 2013-1-12 21:32:12

bingshuihuo888 发表于 2013-1-20 18:20:53

说的很详细,不错!!!!

jz701209李 发表于 2013-4-12 10:36:59

学习一下....
页: [1]
查看完整版本: 乡亲们:头文件定义问题:语法问题。帮帮我