打印

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

[复制链接]
2494|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
playlinus|  楼主 | 2008-9-19 17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ChangeBigEndian ;//here ENTRY_BUS_WIDTH=16
;@0x24
    [ ENTRY_BUS_WIDTH=32
        DCD    0xee110f10    ;0xee110f10 => mrc p15,0,r0,c1,c0,0
        DCD    0xe3800080    ;0xe3800080 => orr r0,r0,#0x80;  //Big-endian
        DCD    0xee010f10    ;0xee010f10 => mcr p15,0,r0,c1,c0,0
        ;对存储器控制寄存器操作,指定内存模式为Big-endian
        ;因为刚开始CPU都是按照32位总线的指令格式运行的,如果采用其他的话,CPU别不了,必须转化
        ;但当系统初始化好以后,则CPU能自动识别
    ]
    [ ENTRY_BUS_WIDTH=16
        DCD 0x0f10ee11
        DCD 0x0080e380
        DCD 0x0f10ee01
        ;因为采用Big-endian模式,采用16位总线时,物理地址的高位和数据的地位对应
        ;所以指令的机器码也相应的高低对调
    ]
    [ ENTRY_BUS_WIDTH=8
        DCD 0x100f11ee
        DCD 0x800080e3
        DCD 0x100f01ee
    ]
    DCD 0xffffffff  ;swinv 0xffffff is similar with NOP and run well in both endian mode.
    DCD 0xffffffff
    DCD 0xffffffff
    DCD 0xffffffff
    DCD 0xffffffff
    b ResetHandler

这段DCD就可以实现ChangeBigEndian了吗,具体怎么实现的,高手请赐教.

相关帖子

沙发
high| | 2008-9-20 23:02 | 只看该作者

其实就是指令了

 samsung的大小端是可以控制的, 从big 切换 到little
 
 如果cpu处于little模式, 程序可以运行很好, 因为代码也是little的。

 如果cpu处于big, 先切换成little。否则cpu无法取指,更准确说, 取到的指令的字节序是反的。 

  因为代码是编译成为little的。所以不能直接写代码切换, 否则都被编译成为little的。

使用特权

评论回复
板凳
playlinus|  楼主 | 2008-9-22 09:24 | 只看该作者

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

使用特权

评论回复
地板
农民讲习所| | 2008-9-22 09:31 | 只看该作者

指令转换为数据而已

使用特权

评论回复
5
playlinus|  楼主 | 2008-9-22 11:50 | 只看该作者

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

使用特权

评论回复
6
l0p0c| | 2008-9-22 11:51 | 只看该作者

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

使用特权

评论回复
7
high| | 2008-10-23 00:35 | 只看该作者

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

p15可以控制endian。注释已经很明白了。

使用特权

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

本版积分规则

102

主题

518

帖子

2

粉丝