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

[复制链接]
3476|7
 楼主| ff_1wq 发表于 2008-2-29 22:15 | 显示全部楼层 |阅读模式
GBLL&nbsp;&nbsp;&nbsp;&nbsp;THUMBCODE&nbsp;&nbsp;&nbsp;&nbsp;;global&nbsp;logical&nbsp;variable,&nbsp;init.&nbsp;to&nbsp;{false}<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;{CONFIG}&nbsp;=&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;][=if,{CONFIG}:build-in&nbsp;variable&nbsp;defined&nbsp;by&nbsp;ARM&nbsp;assembler,16=assembing&nbsp;Thumbcode.<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;&nbsp;&nbsp;{TRUE}&nbsp;&nbsp;&nbsp;;SETL:set&nbsp;the&nbsp;logic&nbsp;variable<br />&nbsp;&nbsp;&nbsp;&nbsp;CODE32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;changing&nbsp;from&nbsp;Thumb&nbsp;state&nbsp;to&nbsp;Arm&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;|=else<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;&nbsp;&nbsp;{FALSE}<br />&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;]=endif<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;CODE32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;for&nbsp;start-up&nbsp;code&nbsp;for&nbsp;Thumb&nbsp;mode???<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />首先是bootload里的以上这段代码,这段代码的目的我的理解是无论如何以下的代码将会以32位编译,也就是说bootload是以32位方式编译的,但是在bootload结束时有出现如下代码:<br /><br />[&nbsp;:LNOT:THUMBCODE&nbsp;&nbsp;&nbsp;;if(!thumbcode)&nbsp;arm&nbsp;state;<br />&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Don't'&nbsp;use&nbsp;main()&nbsp;because&nbsp;......<br />&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;THUMBCODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;for&nbsp;start-up&nbsp;code&nbsp;for&nbsp;Thumb&nbsp;mode;<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lr,pc,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;CODE16<br />&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Don't&nbsp;'use&nbsp;main()&nbsp;because&nbsp;......<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;CODE32<br />&nbsp;&nbsp;&nbsp;]<br /><br />这段是什么意思呢?&nbsp;这样做有什么意义?&nbsp;&nbsp;我直接用&nbsp;BL&nbsp;Main&nbsp;似乎对程序的运行也没有影响。。
wishcom 发表于 2008-3-1 17:08 | 显示全部楼层

这只是一个编程问题

ARM处理器的启动默认模式就是使用ARM指令集<br />你的程序中<br />[相当于C语言中的#ifdef<br />]相当于C语言中的#endif<br /><br />也就是说在编译的时候编译程序会根据用户是否配置了THUMB模式而编译。<br /><br />另外:后面的那个Main函数你也要注意,如果之前走的是ARM指令,那么Main函数这个C文件就应该使用ARMCC来编译,而如果使用的是THUMB指令,则需要使用TCC来编译Main函数所在的C文件<br /><br />其实在我自己看来三星的这个BootLoader写的其实很一般,很多地方都在故弄玄虚。
 楼主| ff_1wq 发表于 2008-3-2 22:06 | 显示全部楼层

re

不是说main用thumb状态编译代码效率比较高吗?<br />bootloader用arm状态编译,而main用thumb状态编译不是更好吗?<br />而三星的这个bootloader&nbsp;前面定义了用arm状态编译,那后面为什么还有判断的那段代码?&nbsp;我试过了,直接bl&nbsp;main&nbsp;也是没问题的
 楼主| ff_1wq 发表于 2008-3-3 21:09 | 显示全部楼层

re

没人解答一下吗?<br />bootloader&nbsp;用32位模式编译,而用16位模式编译main主函数,这样不可以吗?
 楼主| ff_1wq 发表于 2008-3-4 22:32 | 显示全部楼层

re

真的是三星在故弄玄虚还是这段代码有别的意思?
wangharry 发表于 2008-3-5 14:37 | 显示全部楼层

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

  
 楼主| ff_1wq 发表于 2008-3-6 16:04 | 显示全部楼层

re

这些伪操作码我都知道的。。。。。想问的是CONFIG的作用是什么
daipan 发表于 2008-4-12 18:46 | 显示全部楼层

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

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

本版积分规则

16

主题

45

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部