请教李老师几个问题
做前面几个实验时,碰到几个问题,实在搞不明白,尤其是实验三存储器映射部分,感觉好困惑。问题如下:1.实验二:
leg_blink.s文件,如果我将最后一句"B loop"注释掉,生成的bin固化至flash,蜂鸣器会响,这是什么原因???
2.能不能这样说:只要程序用c语言编写,那么一定要有bootloader,因为涉及到函数参数入栈出栈等问题???
3.实验三:
1) startup.s中RomEndAddr EQU &20 语句中&表示什么意思???
2) ldr r0,=0x03FF5000和ldr r0,#0x03ff5000有什么区别?
3) 存储器重映射没看懂,另外,为什么要进行重映射?
4)
RemapMemory
; ++++++++++++++++++++++++++++++++
ldr r1, =0x0002030 ; show led = 1110
ldr r0, =0x03FF5008
str r1,
; ++++++++++++++++++++++++++++++++
adr r0, RemapMemPara
ldmia r0, {r1-r11}
ldr r0, =ROMCON0
stmia r0, {r1-r11}
...
上述四句话应该是保存r1-r11吧,可是这与存储器空间映射有什么关系呢?
4.实验三:
RemapMemPara
DCD &12040060
DCD &10842060
DCD &10842060
DCD &10842060
DCD &10842060
DCD &10842060
DCD &10000398
DCD &10040398
DCD &10040398
DCD &10040398
DCD &ce2983fd
这些内存单元的值为什么是这样?有什么依据要这样设置?
5.实验三:
ldr lr, GotoMain
b RemapMemory
GBLS MainEntry
MainEntry SETS "main"
IMPORT $MainEntry
GotoMain DCD $MainEntry
其中ldr lr,GotoMain语句是将GotoMain这个字内存单元地址赋给lr呢还是将GotoMain字内存单元中的值即$MainEntry赋给lr?
呵呵,不好意思,一口气问了这么多问题!
谢了先! 1) 蜂鸣器响就是和 gpio16 的设置和输出有关,输出1就响,输出0就不响。
2) 程序调用函数的时候,会进行堆栈操作,需要保证sp可用就可以。你说的因果关系很牵强。bootloader 还有很多其他的作用,而且C语言也可以内嵌汇编。
3) 这几个汇编指令我也不太熟悉,回头查一下 ads 的文档再告诉你。
存储器重映射,主要就是让 0 地址在 ram 中,可以提高中断响应速度。
4) 内存配置寄存器的写法请看一下 s3c4510 的数据手册,每一位都有特定含义。
5) lr 指令执行的结果,你可以用 ARMulator 仿真运行一下就清楚了,看看 lr里面究竟是什么。:wink: 谢谢李老师。
我的问题比较繁琐,主要是因为刚开始学,心里着急,一碰到问题自己不思考就想从别人那里知道答案,典型的拿来主义。
以后得改下,先自己琢磨一下。
我想问一下,你们正在做44b0板子吧,什么时候能出来?到时你能不能也编一个step by step啊? :-D
页:
[1]