我现在的情况是:<br /><br />已经写好了一些程序,里面的首要功能类似bootloader.然后有sctter文件将vector如下:<br />FLASH 0x8000<br />{<br /> FLASH 0x8000<br /> {<br /> init.o (Init, +First)<br /> * (+RO)<br /> }<br /><br /> 32bitRAM 0x0000<br /> {<br /> vectors.o (Vect, +First)<br /> interrupt.o<br /> * (+RW,+ZI)<br /> }<br /><br /> HEAP +0 UNINIT<br /> {<br /> heap.o (+ZI)<br /> }<br /><br /> STACKS 0x40000 UNINIT<br /> {<br /> stack.o (+ZI)<br /> }<br /><br />}<br />现在的问题是:<br /><br />因为板子上本来就有一个bootloader运行着在,板子上本身跑的bootloader需要地址0x0后的32k单元.<br />我用bootloader提供的指令load这个ads生成的.bin文件,<br /><br />如果运行g 0x8000,程序死在那里,没有一点反应.我觉得,这是因为bootloader在0x0那里占着位置,所以运<br /><br />行的时候才出问题.<br /><br />但是,如果我不用scatter形式生成.bin,而用simple,ro指定位0x8000,rw不指定,程序却能从串口打印一些<br /><br />我想要的,预料之中的信息,但不完全.不完全的原因是其他我想要的输出是和irq中断处理有关的.我用<br /><br />simple形式生成.bin,那么,无疑在地址0x0处不能放置我写的vector在那里.所以,即使板子的irq到来,我<br /><br />也不能运行我的程序.<br /><br /><br />我现在想了下,如果将我的程序的scatter文件中的FLASH后的地址改成remap后flash处的地址,然后将.bin<br /><br />下载到flash开始的地方,那样在板子重新上电的时候,我的程序应该就能运行了.<br /><br />各位说下,这样可用么?<br /><br />另外,看了下armulator的semihosting,倒是可以利用这种机制,但是如果这样需要armulator来模拟我所要<br /><br />的硬件.按照我现在的水平,还有时间的考虑,这样估计不行了.<br /><br />各位dx,还有其他的方法,我可以用来完成我的调试么?比如用simple形式生成的.bin有方法来完成么?<br /><br /><br />我是初学者中的初学者啊,各位说说建议把.! |
|