打印

arm程序从flash复制到sdram中的问题

[复制链接]
2357|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happy_mcu|  楼主 | 2007-6-22 13:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我的程序    
         adr r0,ResetEntry
    ldr r2,BaseOfROM
    cmp r0,r2
    ldreq r0,TopOfROM
    beq InitRam
    ldr r3,TopOfROM

0
    ldmia r0!,{r4-r7}
    stmia r2!,{r4-r7}
    cmp r2,r3
    bcc %B0


    sub r2,r2,r3
    sub r0,r0,r2
    
InitRam
    ldr r2,BaseOfBSS
    ldr r3,BaseOfZero

0
    cmp r2,r3
    ldrcc r1,[r0],#4
    strcc r1,[r2],#4
    bcc %B0


    mov r0,#0
    ldr r3,EndOfBSS
1
    cmp r2,r3
    strcc r0,[r2],#4
    bcc %B1
         
         b Main

我有这样几个问题
1.通过上面的程序可以实现将flash中的代码复制到sdram中吗?
2.为什么在程序的最后用b Main可以进入main函数,而用ldr pc,=Main却不可以呢?

相关帖子

沙发
himalayan| | 2007-6-22 14:16 | 只看该作者

关于b Main

其实执行b Main 后程序并没有调到c语言的main()函数
而是先执行一些堆栈的初始化
以及ram清零等操作后才进入main()函数的

使用特权

评论回复
板凳
high| | 2007-6-22 14:50 | 只看该作者

b Main就是跳到Main

2楼说的是b __main

b __main就会把rw,zi搬运过去内存,初始化库等工作然后跳到main
即如果用ads,如果c里面有main()函数,自动产生一个__main给startup调用
b __main

---


使用特权

评论回复
地板
阿南| | 2007-6-22 20:16 | 只看该作者

high high说的很对

使用特权

评论回复
5
luhuaren| | 2007-6-22 22:01 | 只看该作者

re

第一个问题:是的。首先比较  刚一上电时候的PC值和RO的值是不是一样,如果不一样,那么就要把进行代码拷贝,如果一样,那就不需要了。

使用特权

评论回复
6
xieqin| | 2007-6-23 00:00 | 只看该作者

2

b Main可以进入Main函数;ldr pc,=Main也是可以的。

推荐用法:
            LDR     R12, =Main
            MOV     LR, PC
            BX      R12 

使用特权

评论回复
7
happy_mcu|  楼主 | 2007-6-23 08:08 | 只看该作者

谢谢各位的热心帮助!!

    我把上面的程序通过Flash Programmer烧到flash点close后程序能运行,但是重新复位或者重新开机后却没反映了,跟没有程序一样。那是怎么回事呢?

使用特权

评论回复
8
himalayan| | 2007-6-23 09:00 | 只看该作者

3楼说的对!

是我说错了!

使用特权

评论回复
9
xieqin| | 2007-6-23 10:13 | 只看该作者

专解问题2

显然楼主所说的b Main是CODE32.

如果Main()函数所在C文件也是用armcc.exe编译的,那么b Main和LDR PC,=Main都是正确的.

而Main()函数所在C文件也是用tcc.exe编译的,那么b Main是正确的, LDR PC,=Main则是错误的. 因为b Main会被编译器纠正优化(ARM程序调用Thumb程序),而LDR,PC=Main不会被优化.所以运行的时候会出错.

也就是说b Main这条指令,linker知道它是用来实现函数调用,所以linker会自动在把它转成ARM程序调用thumb程序. 而LDR PC,=Main这条指令,linker并不会把它转成ARM程序调用thumb程序.

本问题的根本原因是: ARM与Thumb程序混合调用的方法错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

28

帖子

0

粉丝