五.出现的问题与解决方法
1> 每次重新装载程序进行调试时,Remap_Flag没有等于0。
原因是进入C代码前,没有初始化存储器的内容。用户可以将起动代码中的“b main”改成“b __main”,即在跳入到main()函数前执行__main初始化库函数,也可自己加入初始化存储器的代码。程序如下:
InitReset
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
;********************************************************
;* Copy and paste RW data/zero initialized data *
;********************************************************
LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base|
;Zero init base => top of initialised data
CMP r0, r1 ; Check that they are different
BEQ %F1
0
CMP r1, r3 ; Copy init data
LDRCC r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4
STRCC r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, r1, #4
BCC %B0
1
LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment
MOV r2, #0
2
CMP r3, r1 ; Zero init
STRCC r2, [r3], #4
BCC %B2
如果想详细了解该部分的原理,可以参考三星公司为44B0写的起动代码部分资料。
2> 这个实验浪费了很多的时间,原因就是因为我一直用的atm6124.sys和atm6124.inf驱动程序以及BasicUSB_6124.exe来做此实验,当执行BasicUSB_6124.exe后,总是出现“设备不能连接”。为此我专门去书店买了《USB2.0应用与设计》参考,再研究和调试源代码,再加上仔细的阅读“BasicUSB Application.pdf”文件,后来改用atm6124ser.inf驱动程序与超级终端来完成了本次实验。
六.总结
如果一开始就很成功的完成了本次实验,我可能对USB的原理等不会了解到多少,正是因为出现了问题,我才会为了解决问题而去找相关的资料学习,最终到问题的解决。因此出现问题并不是一件什么坏事,相反,问题的出现会引导我们静下心来向更深层次去探究,最终更深刻更全面地掌握知识。