打印

又有问题了,44b0 bootload中thumb,arm状态的切换?

[复制链接]
2564|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ff_1wq|  楼主 | 2008-2-29 22:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GBLL    THUMBCODE    ;global logical variable, init. to {false}
    [ {CONFIG} = 16         ;][=if,{CONFIG}:build-in variable defined by ARM assembler,16=assembing Thumbcode.
THUMBCODE SETL    {TRUE}   ;SETL:set the logic variable
    CODE32               ;changing from Thumb state to Arm state
    |                    ;|=else
THUMBCODE SETL    {FALSE}
    ]                    ;]=endif

    [ THUMBCODE
    CODE32               ;for start-up code for Thumb mode???
    ]

首先是bootload里的以上这段代码,这段代码的目的我的理解是无论如何以下的代码将会以32位编译,也就是说bootload是以32位方式编译的,但是在bootload结束时有出现如下代码:

[ :LNOT:THUMBCODE   ;if(!thumbcode) arm state;
    BL     Main            ;Don't' use main() because ......
    B    .                        
    ];

    [ THUMBCODE            ;for start-up code for Thumb mode;
    orr     lr,pc,#1
    bx      lr
    CODE16
    BL      Main        ;Don't 'use main() because ......
    b       .
    CODE32
   ]

这段是什么意思呢? 这样做有什么意义?  我直接用 BL Main 似乎对程序的运行也没有影响。。

相关帖子

沙发
wishcom| | 2008-3-1 17:08 | 只看该作者

这只是一个编程问题

ARM处理器的启动默认模式就是使用ARM指令集
你的程序中
[相当于C语言中的#ifdef
]相当于C语言中的#endif

也就是说在编译的时候编译程序会根据用户是否配置了THUMB模式而编译。

另外:后面的那个Main函数你也要注意,如果之前走的是ARM指令,那么Main函数这个C文件就应该使用ARMCC来编译,而如果使用的是THUMB指令,则需要使用TCC来编译Main函数所在的C文件

其实在我自己看来三星的这个BootLoader写的其实很一般,很多地方都在故弄玄虚。

使用特权

评论回复
板凳
ff_1wq|  楼主 | 2008-3-2 22:06 | 只看该作者

re

不是说main用thumb状态编译代码效率比较高吗?
bootloader用arm状态编译,而main用thumb状态编译不是更好吗?
而三星的这个bootloader 前面定义了用arm状态编译,那后面为什么还有判断的那段代码? 我试过了,直接bl main 也是没问题的

使用特权

评论回复
地板
ff_1wq|  楼主 | 2008-3-3 21:09 | 只看该作者

re

没人解答一下吗?
bootloader 用32位模式编译,而用16位模式编译main主函数,这样不可以吗?

使用特权

评论回复
5
ff_1wq|  楼主 | 2008-3-4 22:32 | 只看该作者

re

真的是三星在故弄玄虚还是这段代码有别的意思?

使用特权

评论回复
6
wangharry| | 2008-3-5 14:37 | 只看该作者

[]相当于C语言中的#ifdef

使用特权

评论回复
7
ff_1wq|  楼主 | 2008-3-6 16:04 | 只看该作者

re

这些伪操作码我都知道的。。。。。想问的是CONFIG的作用是什么

使用特权

评论回复
8
daipan| | 2008-4-12 18:46 | 只看该作者

同样迷惑了我这只菜鸟~~~

我用sdt测试过:
mov  r0,#{CONFIG}
结果好像r0=0x20,那就应该是Thumbcode啊,(具体多少记不清了,反正不是16)
;for start-up code for Thumb mode???
后面的代码都是Thumbcode?
可是实际上却是arm模式。晕了
就算{CONFIG} = 16,那也是都进入了arm编译模式啊。怎么会有
for start-up code for Thumb mode?这句话呢?
  [ THUMBCODE   (如果THUMBCODE为真)
    CODE32      进入arm编译模式         ;for start-up code for Thumb mode???  启动代码是Thumb模式(矛盾!!!)
    ]
不知我的理解怎么样?英语太差了~~~
谁能解惑???      

使用特权

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

本版积分规则

16

主题

45

帖子

1

粉丝