新人求指导,ok6410裸机跑不了有C语言的程序 10
用的是ok6410开发板。程序小于8K从SD卡启动,并把程序放到内存卡倒数9K的位置;或者用usb安装linux(非一键安装),把烧写uboot那一步换成生成的二进制裸机...
用的是ok6410开发板。程序小于8K
从SD卡启动,并把程序放到内存卡倒数9K的位置;
或者用usb安装linux(非一键安装),把烧写uboot那一步换成生成的二进制裸机代码,然后从nandflash启动都没有效果;
但是当程序全用汇编编写,程序顺利运行。
如下这个流水灯程序就不行:
/************** start.S **************/
.globl _start
_start:
#define Base_addr 0x70000000
ldr r0, =Base_addr
orr r0, #0x13
mcr p15,0,r0,c15,c2,4
#define WTCON 0x7E004000
ldr r0, =WTCON
mov r1, #0
str r1, [r0]
ldr sp, =8*1024
bl led_main
halt:
b halt
/************** led.c **************/
#define u32 volatile unsigned int
#define GPMCON (*(u32 *)(0x7F008820))
#define GPMDAT (*(u32 *)(0x7F008824))
void delay()
{
u32 i = 0x10000;
while(i--);
}
void led_main()
{
u32 tmp;
GPMCON |= 0x1111;
GPMDAT |= 0x1111;
while(1)
{
tmp = GPMDAT;
tmp <<= 1;
tmp &= 0xF;
if(tmp != 0xE)
tmp |= 1;
GPMDAT &= ~0xF;
GPMDAT |= tmp;
delay();
}
}
/************** Makefile **************/
led.bin : start.o led.o
arm-linux-ld -Ttext 0 -o led.elf $^
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
%.o : %.c
arm-linux-gcc -o $@ $^ -c
%.o : %.S
arm-linux-gcc -o $@ $^ -c
clean:
rm *.o *.elf *.dis *.bin 展开
从SD卡启动,并把程序放到内存卡倒数9K的位置;
或者用usb安装linux(非一键安装),把烧写uboot那一步换成生成的二进制裸机代码,然后从nandflash启动都没有效果;
但是当程序全用汇编编写,程序顺利运行。
如下这个流水灯程序就不行:
/************** start.S **************/
.globl _start
_start:
#define Base_addr 0x70000000
ldr r0, =Base_addr
orr r0, #0x13
mcr p15,0,r0,c15,c2,4
#define WTCON 0x7E004000
ldr r0, =WTCON
mov r1, #0
str r1, [r0]
ldr sp, =8*1024
bl led_main
halt:
b halt
/************** led.c **************/
#define u32 volatile unsigned int
#define GPMCON (*(u32 *)(0x7F008820))
#define GPMDAT (*(u32 *)(0x7F008824))
void delay()
{
u32 i = 0x10000;
while(i--);
}
void led_main()
{
u32 tmp;
GPMCON |= 0x1111;
GPMDAT |= 0x1111;
while(1)
{
tmp = GPMDAT;
tmp <<= 1;
tmp &= 0xF;
if(tmp != 0xE)
tmp |= 1;
GPMDAT &= ~0xF;
GPMDAT |= tmp;
delay();
}
}
/************** Makefile **************/
led.bin : start.o led.o
arm-linux-ld -Ttext 0 -o led.elf $^
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
%.o : %.c
arm-linux-gcc -o $@ $^ -c
%.o : %.S
arm-linux-gcc -o $@ $^ -c
clean:
rm *.o *.elf *.dis *.bin 展开
4个回答
展开全部
SD卡的启动源代码和启动具体的原理不知道,所以我一直用的是Nandflash启动,自己编写了一个裸板程序,可以使用串口接收bin文件并写入到Nandflash中。SD卡启动比较麻烦,推荐使用Nandflash启动。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也是遇到同样的问题,咨询了一下,西安某所高校的博导,他的意见是
c语言编译出的程序是要设置堆、栈的地址,需要初始化一些东西
但是我现在暂时也是没有找到具体的原因
c语言编译出的程序是要设置堆、栈的地址,需要初始化一些东西
但是我现在暂时也是没有找到具体的原因
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然没有效果啦,c语言运行需要一定的条件,要对BSS段初始化,对栈初始化等等,不然不能用C语言
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加条import led_main 试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询