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.
写二次boot的时候,仿照历程,运行Fapi_setActiveFlashBank函数,就会进入ILLEGAL_ISR函数中,从而死循环,这个现象是什么原因?在怎么样的情况下会进入这样的ILLEGAL_ISR函数中?
请参阅TRM中的以下内容:
假设您的应用程序正在使用嵌入式flash API(加载到flash并从 RAM 运行),您是否在执行任何flash API 函数之前调用了 memcpy()?
如果没有,请执行 memcpy() 将 flash API 从 flash 复制到 RAM。
应该是执行了的。
出现这样的现象之前,我的程序都是ok的,能够正常刷写code(我是拿着ok的程序进行修改的)。
我这边是修改了一个APP层的一个.c文件,修改的地方主要是运行到某个状态下增加对某些参数的赋值。
这时候我重新编译,发现在initation阶段,我调用flash api,就会进入这个非法中断。
我并没有修改底层的相关文件。
我们会在初始化的时候,就最开始运行memcpy函数,将flash内的code放到RAM里面运行。
我这边的疑问点在于,我修改的是APP层的程序,代码量也没有修改很多,这时候,出现这个非法中断的位置在初始化阶段,有点没有能理解,是由于哪种原因?
请尝试以下操作:
1) 在 memcpy() 之后打断点。这意味着 memcpy() 应该在停止执行之前执行。
2) 遇到断点时,请您检查目标RAM内容和这个flash API函数对应的flash内容是否相同。
3)之后,运行您的应用程序,然后当进入非法ISR时,检查目标RAM内容和这个flash API函数对应的flash内容是否相同。
您能检查 RAM 中是否存在相同的函数吗? flash 和 RAM 中的内容应在 memcpy() 之后匹配。
您可以检查映射文件以了解此函数对应的 RAM 位置。
您好,我咨询一下,我这边利用#pragma CODE_SECTION(Init_FlashAPI, ".TI.ramfunc");函数,将Init_FlashAPI放到ram里面运行
这里面的程序如图所示
这是ram里面的数据
这是flash里面的Fapi_initializeAPI
这是flash里面的Fapi_setActiveFlashBank
麻烦TI的工程师帮忙看下,是否有问题
您是否忘记创建错误陷阱例程(例如错误状态代码)?您可以使用包含的 FAPI 项目 (types.h) 来命名 flash bank 0。
if(oReturnCheck != Fapi_Status_Success)
{
SCIprintf(">> FapiInitError %i->_\n", oReturnCheck);
我这边就是用的Type.h里面的Fapi_FlashBank0定义去做得
这边出错的地方是运行红色框框的函数就出错了,并没有说等到后面的feedback值判断再出错。