新人求指导,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
展开
 我来答
登注册录1234
2014-04-21 · TA获得超过139个赞
知道答主
回答量:70
采纳率:0%
帮助的人:82.9万
展开全部
SD卡的启动源代码和启动具体的原理不知道,所以我一直用的是Nandflash启动,自己编写了一个裸板程序,可以使用串口接收bin文件并写入到Nandflash中。SD卡启动比较麻烦,推荐使用Nandflash启动。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
namt2008
2014-06-13
知道答主
回答量:2
采纳率:0%
帮助的人:2734
展开全部
我也是遇到同样的问题,咨询了一下,西安某所高校的博导,他的意见是
c语言编译出的程序是要设置堆、栈的地址,需要初始化一些东西

但是我现在暂时也是没有找到具体的原因
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可乐吧kaito
2015-10-24
知道答主
回答量:9
采纳率:0%
帮助的人:3.2万
展开全部
当然没有效果啦,c语言运行需要一定的条件,要对BSS段初始化,对栈初始化等等,不然不能用C语言
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莫及剑
2015-01-10
知道答主
回答量:33
采纳率:0%
帮助的人:10.8万
展开全部
加条import led_main 试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式