嵌入式系统原理实验课的一个有关问题,数码管显示结果

嵌入式系统原理实验课的一个问题,数码管显示结果。
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++]; //灯 
这两句话换个顺序试试。