.h和.c文件
全局变量定义和声明
报错:
error #10056: symbol "_bChannel" redefined: first defined in "./src/Source/schedule.obj"; redefined in "./src/Source/main.obj"
// 错误:仅在.h中定义并初始化
// .h文件
INT8U g_ucSocketNum = 1;
INT16U g_usTxPort = 8080;
INT8U g_ucChannel = 0;
// .c文件
没有
// 正确:
// (1)全局变量:需要在.h中用extern声明,在.c中定义并初始化,如果是结构体、需要专门写函数初始化。
// .h文件
extern INT8U g_ucSocketNum;
extern INT16U g_usTxPort;
extern INT8U g_ucChannel;
// .c文件
INT8U g_ucSocketNum = 1;
INT16U g_usTxPort = 8080;
INT8U g_ucChannel = 0;
// (2)文件变量:仅仅在.c中使用,只需要在.c中定义并初始化,.h中不用体现。
// .c文件
INT8U ucSocketNum = 1;
INT16U usTxPort = 8080;
INT8U ucChannel = 0;
指针
1、memcpy的参数
报错:
No source available for "0x100100"
TMS320C6713: Error: Memory Map Error: READ access by CPU to address 0x64010000, which is RESERVED in Hardware.
INT16U SocketRev(INT8U bSocketNum, INT8U *bRxdata, INT32U *dwTxIP, INT16U *wTxPort, INT8U bChannel)
{
INT32S len = 31 + 2 + 256;
//memcpy(&bRxdata, (void *) 0x80000000, len); // 错误 已经是指针了,就不必再取地址了。
memcpy(bRxdata, (void *) 0x80000000, len); // 正确
return 0;
}
2、数组名作为参数传递时,到底带不带&符号?【都可以,为了懒,一般不带】
3、结构体嵌套时,访问成员变量用·
而不是->
编译报错:#45 expression must have pointer type
废了好大劲儿才找到问题所在。
// 错误:pstCfkMsg_o->stCfkMsgData->uiCode
memcpy(&pstCfkMsg_o->stCfkMsgData->uiCode, &pucRxBuf_i[index], byteNum);
// 正确:pstCfkMsg_o->stCfkMsgData.uiCode
// ST_CfkMsgData stCfkMsgData = pstCfkMsg_o->stCfkMsgData; //【不能用局部变量,会导致无法赋值!!!】
// memcpy(&(stCfkMsgData.uiCode), &pucRxBuf_i[index], byteNum); //一波未平一波又起,找了半天才发现错在这里,为了省事儿在函数中搞了个局部变量stCfkMsgData,结果这里的memcpy并没有修改原始的pstCfkMsg_o->stCfkMsgData。真是醉了,还是不要偷懒了。
memcpy(&(pstCfkMsg_o->stCfkMsgData.uiCode), &pucRxBuf_i[index], byteNum);
局部变量和全局变量
定义了全局变量,又重复定义了同名局部变量,导致赋值无效
注意:在变量上移到全局时,不要忘了把局部的定义去掉!
void main(){
INT8U ucCmdH = 0x0; // 指令字的高8位
if (revFlag == BTRUE)
{
ucCmdH = g_stCfkMsgA.stCfkMsgData.ucCfkCmd[1];
// INT8U ucCmdH = g_stCfkMsgA.stCfkMsgData.ucCfkCmd[1]; //【错误代码】这里重复定义了同名局部变量,实际上是在变量上移时、忘了把定义去掉
}
switch (ucCmdH) //错误代码导致,每次到这里,ucCmdH都会清零,气死了,搞了一下午才找到错。
{
case 0x10:
xxx;
break;
case 0x20:
xxx;
break;
}
}
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。