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.

[参考译文] TM4C123GH6PZ:尝试写入 NULL 指针会被静默忽略

Guru**** 1821780 points
Other Parts Discussed in Thread: TM4C129EKCPDT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/772881/tm4c123gh6pz-attempt-to-write-null-pointer-is-silently-ignored

器件型号:TM4C123GH6PZ
主题中讨论的其他器件:TM4C129EKCPDTTM4C123
您好! 

当我运行以下代码时、我期望写入零指针的尝试会导致硬故障。 相反、我们发现该指令被静默忽略。 这似乎与数据表中显示的内容相矛盾:

"注意:在存储器映射中、尝试在保留空间中读取或写入地址会导致
总线故障。 此外、尝试在闪存范围内写入地址也会导致总线
故障。"

uint32_t var = 0xDEADBEEF;

uint32_t * POINTER_TO_var =&var;
uint32_t * POINTER_TO_Null = NULL;

* POINTER_TO_var = 0;
* POINTER_TO_Null = 0; 

有人能不能对此有所了解? 我们是否以某种方式禁用了该特定错误的故障、或者这是否甚至是可能的?

谢谢、

Eric。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到空指针的初始化、但我看不到代码中的位置0写入操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    屏幕截图中的第303行尝试写入 NULL 指针:

    *POINTER_TO_null = 0; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉,我必须失明。

    我能够再现您的结果、我可以在 数据表的第92页看到该陈述。 此时、我只能说没有启用 MPU。 通过对 MPU 进行编程并将该区域指定为只读、可以导致对闪存存储器的写入中止。 我将进一步研究这一点。 此时、我怀疑数据表中的陈述有误、应予以更正。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    我在 TM4C123和 TM4C129EKCPDT 上尝试了类似的代码。

    int main(){
    int * pointer_TO_null = 0;
    * pointer_TO_null = 1;
    
    while (1);
    }
    
    void HardFault_Handler (void){
    while (1){
    __asm ("BKPT 0");
    }
    

    TM4C129按预期在硬故障中达到断点。 TM4C123保持在 main()中的 while 循环中。 两个数据表在"存储器模型"部分中关于生成总线故障的注释相同。 我们可以使用 MPU 在 TM4C123上捕获此错误、但我很想知道这两个器件之间的区别是什么。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    您是否有机会进一步了解这一点? 我已经尝试过 MPU、知道它将是一个可行的解决方案、但我不能动摇一种非常错误的感觉。 也许问题在于文档、但如果是芯片或芯片配置、我想知道是否有权变措施。

    谢谢、
    Eric。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Cortex M4F 的默认存储器映射保护在器件设计时进行配置。 TM4C123是首先设计的。 看起来 Flash 存储器范围的配置不正确、不会标记写入。 TM4C129器件稍后完成并正确完成。 我将在 TM4C123勘误表文档中作为建议提交此文档。