汇编程序: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多行...
初学嵌入式,各位帮帮忙了...感谢啊~~~