|
使用BL __main时需要重实现__user_initial_stackheap吗?
[复制链接]
我的arm是S3C2410,SDRAM起始地址为0x30000000
利用HJtag-wigger-AXD裸机开发,一般都是在ads把RO=0x30000000,然后在axd中调试没有os的程序,
在2410init.s中,有一句是跳到自己的main函数的,
BL main;可以正常跳到我的main函数
但是当我设置为 BL __main时,程序就跑飞了,
我单步跟踪,BL __main执行后进入
_main
_rt_entry
_rt_stackheap_init
_user_initial_stackheap
问题就出现在这个_user_initial_stackheap,在里面调用了
mov r0,#0x16
swi 0x123456
因为我没有写swi中断处理函数,所以就跑飞了。
下面是没有__user_initial_stackheap时的截图:
我看了一下我原来的atmel9200的程序,用bl __main是可以跳到main的c函数的,但是在9200的rm9200.s启动文件中有
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + USR_Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
这样一段代码,如果我把这一段删掉,bl __main也出现跑飞跑到0x08(swi中断向量表的位置)的问题
我理解的是只要BL __main就需要自己重定义__user_initial_stackheap,但是网上的说法是好像只有用到分散加载时,才要求去自己实现__user_initial_stackheap,不知道是我的理解有问题,还是网上的说法有问题?
谢谢
|
|