XEP100 BDM仿真时能写FLASH,直接运行时出错,为什么?
- UID
- 852707
|
XEP100 BDM仿真时能写FLASH,直接运行时出错,为什么?
我编了一个XEP100的bootloader,实现方法是将与FLASH操作有关的代码拷到RAM中运行,这样整个1M flash空间都能使用了。具体方法是当要执行FLASH操作时,用JMP跳到RAM中运行,执行完后还是用JMP跳回来。程序用BDM调试仿真通过了,没有任何问题,可是直接运行时,却出错了,单片机好像复位了,具体是在哪个地方复位还没查出来,我猜应该是FLASH操作过程中出错造成的。
很奇怪为什么BDM模式下运行成功了,为什么正常运行却不行呢?好像坛子里也有人遇到过同样的问题,不过没有解释和解决方法,不知现在有没有高手能解决这个问题了,不甚感激!!! |
|
|
|
|
|
- UID
- 852707
|
刚流览完了坛里的历史帖子,好像这个问题被问题过很多次了,可是一直没有一个明确的解释和解决方法,版主唯一的解释是说有些寄存器在非BDM下不能被多次设置,关于这点数据手册上并没有特别说明,版主是否可以详细介绍一下,帮忙列出相关的寄存器呢。
再者,很多人是在FLASH操作的时候对出问题,擦写操作的寄存肯定要多次设置,所以是否是另有原因呢? |
|
|
|
|
|
- UID
- 852707
|
好吧,没人理我,还好我自己把这个问题搞清楚了,关于FLASH的操作在BDM模式下和正常模式都是一样的,坛子中关于FLASH在正常模式下不能擦写的说法是不成立的,另外版主所说的某些寄存器不能多次赋值之说也没有找到根据。那么到底是什原因造成了BDM模式下和正常模式运行的区别呢,其实没区别,只是我们的错觉而已。
因为当我们使用BDM下程序时,它会将整个片子全部擦掉,仿真调试时写FLASH前不会擦写。而当你正常运行时,FLASH可能已经被编过程了,所以写之前必须擦除。而擦除操作一般耗时比较长,这样就会影响程序的正常时序。比如说我写的串口bootloader,因为我采用查询方式接受数据,所以如果擦除操作耗时太长的话,就会造成一些数据接收不到。
总之,大家在做FLASH操时,好好考虑一下由于FLASH擦写而占用的时间,以此来设计你的程序的时序,就不会出现我上面的问题了! |
|
|
|
|
|
- UID
- 822851
|
|
|
|
|
|