2410启动代码中的ChangeBigEndian是如何实现的,下示相关代码 .

[复制链接]
3152|6
 楼主| playlinus 发表于 2008-9-19 17:25 | 显示全部楼层 |阅读模式
ChangeBigEndian&nbsp;;//here&nbsp;ENTRY_BUS_WIDTH=16<br />;@0x24<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=32<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;0xee110f10&nbsp;&nbsp;&nbsp;&nbsp;;0xee110f10&nbsp;=&gt&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;0xe3800080&nbsp;&nbsp;&nbsp;&nbsp;;0xe3800080&nbsp;=&gt&nbsp;orr&nbsp;r0,r0,#0x80;&nbsp;&nbsp;//Big-endian<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;0xee010f10&nbsp;&nbsp;&nbsp;&nbsp;;0xee010f10&nbsp;=&gt&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;对存储器控制寄存器操作,指定内存模式为Big-endian<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;因为刚开始CPU都是按照32位总线的指令格式运行的,如果采用其他的话,CPU别不了,必须转化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;但当系统初始化好以后,则CPU能自动识别<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x0f10ee11<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x0080e380<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x0f10ee01<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;因为采用Big-endian模式,采用16位总线时,物理地址的高位和数据的地位对应<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;所以指令的机器码也相应的高低对调<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x100f11ee<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x800080e3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x100f01ee<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff&nbsp;&nbsp;;swinv&nbsp;0xffffff&nbsp;is&nbsp;similar&nbsp;with&nbsp;NOP&nbsp;and&nbsp;run&nbsp;well&nbsp;in&nbsp;both&nbsp;endian&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;ResetHandler<br /><br />这段DCD就可以实现ChangeBigEndian了吗,具体怎么实现的,高手请赐教.
high 发表于 2008-9-20 23:02 | 显示全部楼层

其实就是指令了

&nbsp;samsung的大小端是可以控制的,&nbsp;从big&nbsp;切换&nbsp;到little<br />&nbsp;<br />&nbsp;如果cpu处于little模式,&nbsp;程序可以运行很好,&nbsp;因为代码也是little的。<br /><br />&nbsp;如果cpu处于big,&nbsp;先切换成little。否则cpu无法取指,更准确说,&nbsp;取到的指令的字节序是反的。&nbsp;<br /><br />&nbsp;&nbsp;因为代码是编译成为little的。所以不能直接写代码切换,&nbsp;否则都被编译成为little的。<br />
 楼主| playlinus 发表于 2008-9-22 09:24 | 显示全部楼层

楼上答非所问哈,高手请赐教!

  
农民讲习所 发表于 2008-9-22 09:31 | 显示全部楼层

指令转换为数据而已

  
 楼主| playlinus 发表于 2008-9-22 11:50 | 显示全部楼层

楼上能否讲详细点,以上代码是怎样实现大小端模式转换的 ?

  
l0p0c 发表于 2008-9-22 11:51 | 显示全部楼层

我到现在启动代码都没有弄明白呢!

  
high 发表于 2008-10-23 00:35 | 显示全部楼层

可能你还理解不了,不是我答非所问。

p15可以控制endian。注释已经很明白了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

518

帖子

2

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