主题 : 我的这段LED程序怎么无法执行if语句...(所有判断都是假) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 47324
精华: 0
发帖: 28
金钱: 140 两
威望: 28 点
综合积分: 56 分
注册时间: 2011-05-21
最后登录: 2017-10-31
楼主  发表于: 2011-05-21 16:30

 我的这段LED程序怎么无法执行if语句...(所有判断都是假)

汇编程序:crt0.S
@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@******************************************************************************      

.text
.global _start
_start:
            ldr     r0, =0x56000010     @ WATCHDOG寄存器地址
            mov     r1, #0x0                    
            str   r1, [r0]              @ 写入0,禁止WATCHDOG,否则CPU会不断重启
            
            ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                @ 调用C程序中的main函数
halt_loop:
            b       halt_loop


C程序:led_on_c.c
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)

int main(){
    int i = 2;
    GPBCON = 0x00010000;  //点亮LED4
    GPBDAT = 0x00000000;
    i = 2;
    if(i>1)    //这应该成立的吧!!可LED2就是不亮
    {
        GPBCON = 0x00011000;
        GPBDAT = 0x00000000;
    }/*else{  //如果把注释消了,LED2可以被点亮
        GPBCON = 0x00011000;
        GPBDAT = 0x00000000;
    }*/
    
    while(i > 0)  // 同上,无论什么条件都不执行循环
    {
        GPBCON = 0x00011000;
        GPBDAT = 0x00000000;
        break;
    }    
    return 0;
}


-----------------------------
总而言之,经实验,所有有判断条件if语句都是false,除非写if(1)一类的语句,否则都不行
各位...这怎么回事呢?
我用国嵌视频里头带的LED程序,就能使用,证明不是硬件问题.我怀疑是不是那段引导C语言的汇编代码的问题???
因为国乔个LED程序,引导用的汇编程序有800多行,这里这个才10多行...
初学嵌入式,各位帮帮忙了...感谢啊~~~