This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
请问例程中函数DSP28x_usDelay和InitFlash()不能共用一个段(ramfuncs)嘛?
我把这个2个函数都加进工程,运行进入DSP28x_usDelay函数后,会进入非法中断,换句话说就是程序跑飞了,是不是函数DSP28x_usDelay和InitFlash()不能共用一个段(ramfuncs)啊?
请专家们指教~!不甚感激!
好奇怪啊,~!!
刚刚开始连接时,就进入非法中断。
把DSP28x_usDelay去掉,,就不进入非法中断!!!
但是呢,不断开连接的情况下,再加入又可以了,此时不进入非法中断了~@!
附件为CMD文件和MAP文件,烦请帮忙看看,谢谢~~!!
片子为28015~!!
我好像找到问题所在了:
函数MemCopy()处在DELAY_US()函数的后面,在调用DELAY_US()时,前面没有执行MemCopy(),不知道这是不是导致此问题的原因呢;
你好。
你找到的原因是对的。
在你的MAP文件中:
00008000 _InitFlash
0000801b _DSP28x_usDelay
ramfuncs 0 003f4000 0000001f RUN ADDR = 00008000
003f4000 0000001b DSP280x_SysCtrl.obj (ramfuncs)
003f401b 00000004 DSP280x_usDelay.obj (ramfuncs)
可以看到InitFalsh和usDelay的函数入口都在RAM中。但usDelay原始程序是放在Falsh中的003f401b处。所以,上电后需要先执行Memcopy,如果在这之前调用usDelay函数,CPU会从0000801b处去取指,那样就出现错误了。
补充一下:所有放在FLASH中但在后运行在RAM中的函数,都需要保证在做完memcopy之后才去执行这些函数,否则PC跳到RAM里执行这些函数时,因为RAM里的内容是乱的,因此相当于CPU跑分掉了。
我试了下,把MemCopy函数单纯放在DSP28x_usDelay位置前面,解决不了问题,只有把这个语句删除了,才可以。请问在不删除DSP28x_usDelay程序的前提下
怎么样做,调试程序才能不进入非法中断里去呢?万分感激!