6248|17

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教WINCE6.0 Eboot的Startup,部分地方看不懂 [复制链接]

最近在看WINCE6.0 Eboot的Startup的代码,看得一知半解,请教如下

;------------------------------------
;     Clear DRAM       
;------------------------------------

    [ CLEAR_DRAM_ON_EBOOT                                                                                                                                                       
        mov      r1, #0                                                                                                                                                               
        mov      r2, #0                                                                                                                                                               
        mov      r3, #0                                                                                                                                                               
        mov      r4, #0                                                                                                                                                               
        mov      r5, #0                                                                                                                                                               
        mov      r6, #0                                                                                                                                                               
        mov      r7, #0                                                                                                                                                               
        mov      r8, #0                                                                                                                                                               

        ldr      r0, =IMAGE_NK_PA_START        ; Start address (Physical 0x5010.0000)       
        ldr      r9, =(DRAM_SIZE-IMAGE_NK_OFFSET)     ; 127 MB of RAM (1MB + 127MB)                       
10
        stmia     r0!, {r1-r8}       
        subs      r9, r9, #32                               
        bne       %B10                                                     
    ]


特别是最后几行,更是没看懂,请教高手解答,谢谢,随便说下,如果哪位有启动代码的详细点的解释,请给予点参考,谢谢

最新回复

RAM的空间分配要看EBOOT文件夹下的.bib文件,NK的通常在FILES目录下叫platform.bib。 扩充RAM不仅要改这里,要改BIB文件,还要改内存映射表等,好几个地方,如果不同BANK使用不连续的内存空间要更麻烦一些。  详情 回复 发表于 2009-12-31 17:25
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这段代码是将RAM清0
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
清除NK大小的NK指定的地址数据~
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
    ldr      r0, =IMAGE_NK_PA_START        ; Start address (Physical 0x5010.0000)
        ldr      r9, =(DRAM_SIZE-IMAGE_NK_OFFSET)    ; 127 MB of RAM (1MB + 127MB)



总体功能知道,但是最后几行汇编不是很清楚

    ldr      r0, =IMAGE_NK_PA_START        ; Start address (Physical 0x5010.0000)
        ldr      r9, =(DRAM_SIZE-IMAGE_NK_OFFSET)    ; 127 MB of RAM (1MB + 127MB)

第一句指定了DRAM中OS镜像的起始位置吗,
第二句计算出了总共的DRAM的大小吗
如果我需要在当前基础上扩展DRAM 到 256MB,除了硬件上添加DRAM,在启动代码里怎么修改呢?

 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
10
        stmia    r0!, {r1-r8}
        subs      r9, r9, #32
        bne      %B10   

下面这三句汇编又是怎么理解呢?

stmia    r0!, {r1-r8}  是将R0指向地址的数据传送到r1到r8,每次传送地址+4
subs      r9, r9, #32   计算了整个数据传送的地址偏移  4*8 = 32
bne      %B10    ? 怎么理解,为什么告诉编译器向后搜索 标号10,10不是在前面吗?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
可以这样给你解释:
假设:IMAGE_NK_PA_START = 400;DRAM_SIZE = 1000;IMAGE_NK_OFFSET = 700;
目的是将地址400到700的数位段清0.
mov      r1, #0
........
mov      r8, #0
将r1 到r8都设置成0。
ldr      r0, =IMAGE_NK_PA_START        ; Start address (Physical 0x5010.0000)
ldr      r9, =(DRAM_SIZE-IMAGE_NK_OFFSET)    ; 127 MB of RAM (1MB + 127MB)
设置清0的起始地址R0 = 400,设置清0的数据段长度:r9 = 1000 - 700 = 300;
stmia    r0!, {r1-r8} :从R0地址开始以存储R1到R8的形式把这段清0.
subs      r9, r9, #32 :由于R是32位的,四字节,8*4 =32字节,所以R9要减掉32字节。
bne      %B10    :判断R9是不是到0了,如果到0了就是清0结束,否则跳到前边的stmia    r0!, {r1-r8}处继续执行
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
%B10    是向后的10,就是之前的语句中查找。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
IMAGE_NK_PA_START = 400;DRAM_SIZE = 1000;IMAGE_NK_OFFSET = 700;

ldr      r0, =IMAGE_NK_PA_START        ;  
ldr      r9, =(DRAM_SIZE-IMAGE_NK_OFFSET)    ;

那不是r0 = 400,
     r9 = 1000-700 = 300,
怎么是 400 到 700的RAM清零呢?

 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

9
 
期待解释,谢谢
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
sorry,由于举的例子正好怎么减都是300没太细看。
正常r9应该是要清的数据段大小,可以是整个NK的存储空间。
但是你的代码的确挺奇怪的,不知道那两值如何定义的,
我的代码是
ldr                r0,=0x30100000   ; Start address (physical 0x3000.0000).
ldr                r9,=0x03F00000   ; 64MB of RAM.
目的是将从0x30100000开始的0x03F00000长度的数据清0,这个应该比较好理解吧?
 
 
 

回复

66

帖子

1

TA的资源

一粒金砂(初级)

11
 
太粗心了,看漏了,理解了,谢谢
Veabol
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

12
 
你的代码中IMAGE_NK_PA_START和 IMAGE_NK_OFFSET是不是同样的含义同样的值啊?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
IMAGE_NK_OFFSET             EQU    (0x00100000)
DRAM_SIZE                   EQU     (0x08000000)
IMAGE_NK_PA_START           EQU     (DRAM_BASE_PA_START+IMAGE_NK_OFFSET)
DRAM_BASE_PA_START          EQU     (0x50000000)


所以, r0 = IMAGE_NK_PA_START  = 0x5001 0000
      r9 = DRAM_SIZE - IMAGE_NK_OFFSET  = 0x08000000 - 0x00100000 = 0x07F00000 = 127M
看来是对的,但是有如下几个问题,
(1)为什么NK不直接在DRAM的起始地址,而是要偏移下呢?
(2)这里算下来是127M大小,每个大小是32位的,也就是4BYTES,那空间应该是127M * 4BYTES呀,
为什么写的直接是 127MB,是我算错了吗


      

   
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

14
 
我想了下,第2个问题说错了,是127MB,不好意思
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

15
 
(1)为什么NK不直接在DRAM的起始地址,而是要偏移下呢?
EBOOT本身是在DRAM运行的啊,全清了它怎么办
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

16
 
额,就是哈,也就是所1M的空间是EBOOT占用的?

我在代码里,没有发现1M空间是如何分配的,请问下。
还有一点就是如果我将先后的内存从128M空间到256M,
软件上,只用在startup初始化的时候定义
DRAM_SIZE                  EQU    (0x08000000)
DRAM的大小就是了吗
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

17
 
要开元旦晚会了,谢谢Veabol,我先弄的驱动,现在要移植了,才开始看BOOTLOADER,在这方面多向你请教,也谢谢你耐心的解释,祝你新年快乐,晚上回来结贴 !
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

18
 
RAM的空间分配要看EBOOT文件夹下的.bib文件,NK的通常在FILES目录下叫platform.bib。

扩充RAM不仅要改这里,要改BIB文件,还要改内存映射表等,好几个地方,如果不同BANK使用不连续的内存空间要更麻烦一些。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表