方案1:在一个文件中定义全局变量“类型 tmp”,注意是全局变量。另一个文件全局变量的位置使用“extend 类型 tmp”。
方案2:把hal.c文件里的函数参数加一个指向tmp的指针,tmp在main中,在hal.c里的文件使用tmp时,把地址传过去就行了。
例如:
mian()
{
char tmp
.....
.....
}
function(&tmp......)
...
}
在hal.c里面
function(char *tmp......)
{
....
}
这样就行了
方案1、2都不用hal.h
方案3:你把hal.c的子函数写进hal.h,在mian函数之前include一下就行了。
但不推荐此方法。
对你出现的问题的理解:
你在hal.h中声明了tmp,在两个文件里都包含它,表示包含了两次,C语言规定如果没有限定为局部变量,则各个文件都可以调用,这就导致你声明了两个名称相同的同类型变量,当然不行。
如果定义为局部变量,那么另一个文件就没办法用它了,或者这么说:两个文件各有一个tmp但不是同一个tmp,改变一个的值,另一个不变。
常用方法就是extend一下(方案1)。
顺便说一句,我从来没用过unsigned char类型,因为char类型本身就是非负的,可能是因为编译器的关系吧
osal_msg_receive它的返回值是uint8 *
其实这种一般都定义成void *的
因为可能用它返回任何结构的地址。
这里 就是返回了一个afIncomingMSGPacket_t 结构体的首地址。
要把它还原,就需要赋值到afIncomingMSGPacket_t *的指针变量MSGpkt 上
但是 MSGpkt 和返回值uint8*类型不匹配
这里就做一个强制转换 避免编译出错或者warning
我几案我经VC使用都没问题试试:案1:文件定义全局变量类型 tmp注意全局变量另文件全局变量位置使用extend 类型 tmp
案2:hal.c文件函数参数加指向tmp指针tmpmainhal.c文件使用tmp址传行
例:
mian()
{
char tmp
.....
.....
}
function(&tmp......)
...
}
hal.c面
function(char *tmp......)
{
....
}
行
案1、2都用hal.h
案3:hal.c函数写进hal.hmian函数前include行
推荐
现问题理解:
hal.h声明tmp两文件都包含表示包含两C语言规定没限定局部变量则各文件都调用导致声明两名称相同同类型变量行
定义局部变量另文件没办用或者说:两文件各tmp同tmp改变值另变
用extend(案1)
顺便说句我没用unsigned char类型char类型本身非负能编译器关系吧