- C/C++ code
extern long int result;void Main(void){ for(;;) { int str[7] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; int i,j,k=0,lamp=0,l=0,m=0; int ch[16] = {0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; int c[7]; if(result >999999) { for(m=0;m<6;m++) c[m] = 0xb0; k=6; } else { while(result != 0) { int a = result % 10; result = result /10; c[k++] = ch[a]; } } while(1) { *((unsigned char *)0x10000004)=c[l++]; //数字 *((unsigned char *)0x10000006)=str[lamp++]; //灯 if(l == k) { l=0; lamp=0; } } }}
result 是汇编返回的结果,假设是5050.上面这段程序要做的是在6位数码管上显示一直5050.
单步调试的情况下,在这段在代码
- C/C++ code
[color=#FF0000]*((unsigned char *)0x10000004)=c[l++]; //数字[/color]
执行之前,也就是while(1)的时候,数码管的第一个已经亮了,而且显示的是5.然后继续单步,5又变到了第二个数码管上,第一个才变成0.在加了
- C/C++ code
[color=#FF0000]*((unsigned char *)0x10000006)=0xff; //灯[/color]*((unsigned char *)0x10000004)=c[l++]; //数字
之后,数码管才显示正常,也就是while(1)的时候不显示,到下面显示数字的时候开始显示0了。
请问大家,这是为什么啊?我是新手,初学嵌入式啊。
------解决方案--------------------
反汇编看看代码,就知道具体原因。
上电初始化,需要对LED以及LAMP初始化。按照开发要求处理。
就是所谓的初始化函数,这是常规要求。
------解决方案--------------------
*((unsigned char *)0x10000004)=c[l++]; //数字
*((unsigned char *)0x10000006)=str[lamp++]; //灯
这两句话换个顺序试试。