keil编译出错
加上下面一段代码出错union {
unsigned char LEDByte;
struct{
unsigned char LED_A :1;//位域 byte型,占1bit 为了节省内存
unsigned char LED_B :1;
unsigned char LED_C :1;
unsigned char LED_D :1;
unsigned char LED_E :1;
unsigned char LED_F :1;
unsigned char LED_G :1;
unsigned char LED_H :1;
} LEDBits;
} LEDDisplay;谁帮看下
LEDDisplay在多个文件中重复定义了————你是把它放在.h文件中的吧?这个.h文件被多个.c文件include了吧?这个.h文件中没有加守卫来防止重复包含吧? eduhf_123 发表于 2014-6-10 17:22
LEDDisplay在多个文件中重复定义了————你是把它放在.h文件中的吧?这个.h文件被多个.c文件include了吧 ...
额,是放在.h文件中,我看看,调整下 新手常犯的错误。。这种问题在坛子里太常见了。 这么一段程序
同样一段程序,Keil C51
frames=10;
while (frames--){
V_Zebra();
LCD_AC=!LCD_AC;
LED=!LED;
}
实际调试中发现,frames永远到不了0,一直在这个循环中打转,去不了后面的程序
这个变量只在这段程序中使用,未开任何中断 不就是个数字10吗,跟一下啊,看看数值变化 定义为位变量 不能写成unsigned char LED_A; 要把 char 去了 。正确写法unsigned LED_A; Jigsaw 发表于 2014-6-10 23:42
这么一段程序
同样一段程序,Keil C51
while(--i)而不是while(i--)。。
呵呵 jx_wwq 发表于 2014-6-10 23:52
定义为位变量 不能写成unsigned char LED_A; 要把 char 去了 。正确写法unsigned LED_A; ...
这是挑战编译器规则? 位域定义要用逗号,而不是分号,如
union {
unsigned char LEDByte;
struct{
unsigned char LED_A :1,//位域 byte型,占1bit 为了节省内存
unsigned char LED_B :1,
unsigned char LED_C :1,
unsigned char LED_D :1,
unsigned char LED_E :1,
unsigned char LED_F :1,
unsigned char LED_G :1,
unsigned char LED_H :1;
} LEDBits;
} LEDDisplay;谁帮看下 lswhome 发表于 2014-6-11 01:35
while(--i)而不是while(i--)。。
呵呵
应该不是这个原因
--i和i--的差别还是知道的
实际软件仿真发现,frames这个值只倒计数到5,然后直接回到了10 本帖最后由 qymcs 于 2014-6-11 09:39 编辑
写成 while(i-- > 0) 试试看 或是用for 语句替代下whlie 看看是哪里出的问题 Jigsaw 发表于 2014-6-10 23:42
这么一段程序
同样一段程序,Keil C51
单步执行看看啥时候变的5然后又怎样变成10
另外,吧赋值的那一句放到函数外试试,就是把 变量变成全局的试试 qymcs 发表于 2014-6-11 09:37
写成 while(i-- > 0) 试试看 或是用for 语句替代下whlie 看看是哪里出的问题
都试过
还试着把frames--放到执行段里,while括号内不加任何运算
结果一样
怀疑是全局变量和局部变量造成的,晚上回去试试
谢谢 xiaobendan 发表于 2014-6-11 09:46
单步执行看看啥时候变的5然后又怎样变成10
另外,吧赋值的那一句放到函数外试试,就是把 变量变成全局的 ...
谢谢
想一块了
晚上试试改成全局变量 单步跟踪了一晚上
实在想不出为啥在这个子程序里,frames值会被重置成9void V_Zebra(){
unsigned char x,y;
LCD_FLM=1;
//LCD_LP=1;
//LCD_LP=0;
LCD_M=LCD_AC;
for(y=0;y<240;y++){ //LCD_HEIGHT
for(x=0;x<40;x++){ //LCD_WIDTH/8
LCD_CP=1;
LCD_DATA=0xFF;
LCD_CP=0;
LCD_CP=1;
LCD_DATA=0x00;
LCD_CP=0;
}
LCD_LP=1;
LCD_LP=0;
LCD_FLM=0;
//delay_us(10);
}
LCD_LP=1;
LCD_LP=0;
}
页:
[1]