TM4C1231E6PM的flash存储器保护策略设定成只允许执行(FMPPE和FMPRE位均为0),程序不能正常运行,调试发现在调用函数使用了指针变量、常量传递参数时就出错,程序跑到了错误函数处
FaultISR(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
请问这是什么原因呢?有何解决方法?
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.
TM4C1231E6PM的flash存储器保护策略设定成只允许执行(FMPPE和FMPRE位均为0),程序不能正常运行,调试发现在调用函数使用了指针变量、常量传递参数时就出错,程序跑到了错误函数处
FaultISR(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
请问这是什么原因呢?有何解决方法?
详细参见数据手册上说明:
对 Flash 存储器的读取保护块(FMPREn 位被置位)进行读取访问是被禁止的,否则会产生一次总
线故障。对 Flash 存储器的编程保护块(FMPPEn 位被置位)进行编程或擦除访问是被禁止的。可
以选择产生一个中断(将 Flash 控制器中断屏蔽 (FCIM) 寄存器中的 AMASK 位置位)提醒软件开
发者在开发和调试阶段可能出现的错误软件操作。注:如果 FMPREn 位已清零,指向 Flash 存储器
模块的所有读访问都被禁止,包括任何数据访问。必须注意的是,不得将所要求的数据存储在相关
FMPREn 位已清零的 Flash 存储器模块中。
对所有执行存储块来说,FMPREn 和 FMPPEn 寄存器在出厂时都被设置为 1。这些设置实现了一
种开放式的访问策略和可编程策略。寄存器的位可通过清零特定寄存器的位来改变。这种改变立即
生效,但不是永久的,等到寄存器被提交(保存)以后,位的改变就是永久性的。如果一个位从 1
变为 0 且没有提交,那么它可以通过执行一段上电复位序列来恢复。这些更改需要用 Flash 存储器
控制 (FMC) 寄存器来提交。有关这些位的编程详情请参考 “非易失性寄存器编程” 在 508页。