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.

[参考译文] CCS/TMS570LS0914:memset -在程序更改后 undefEntry

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/849490/ccs-tms570ls0914-memset---undefentry-after-program-change

器件型号:TMS570LS0914

工具/软件:Code Composer Studio

程序运行正常、但当我在那里更改内容时、它在某个点崩溃。 问题似乎是 memset。。。 我是否需要将其包含在存储器中、如果是、为什么它以前起作用? 

在主方法中的某个位置:

(笑声)

uint8_t data[8]={0}; 0800 8E8C MOV R1、#0x00 0800 8E90加 R0、SP、#0x18 0800 8E94 MOV R2、#0x08 0800 8E98 BL 0x08009018

当您单步执行该操作时、您会得到以下结果:

$ARM
08009018 LDR R12、=memset;[0x08009020]=0x000200C3
0800901C BX R12. 

它会跳到 undefEntry 并崩溃。

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

    看起来您正在从 RAM 和闪存执行代码。 memset 例程是否位于地址0x000200C3? 您能否强制函数与32位对齐地址对齐?

    此外、当 CPU 位于 undercry 时、您可以查看链接寄存器(R14)来识别导致未定义指令异常的指令。 这将为您提供有关导致错误的原因的更好的提示。

    此致、Sunil

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

    [引用用户="Sunil Oak "]

    看起来您正在从 RAM 和闪存执行代码。

    [/报价]

    是的、完全正确。 大多数函数位于 RAM 中(例如 main)

    [引用用户="Sunil Oak "]

    memset 例程是否位于地址0x000200C3?

    [/报价]

    是的、程序尝试从 RAM 代码访问存储在闪存中的函数

    [引用用户="Sunil Oak "]

    您能否强制函数与32位对齐地址对齐?

    [/报价]

    我们如何做到这一点?

    [引用用户="Sunil Oak "]

    此外、当 CPU 位于 undercry 时、您可以查看链接寄存器(R14)来识别导致未定义指令异常的指令。 这将为您提供有关导致错误的原因的更好的提示。

    [/报价]

    导致 undefEntry 的确切行如下:

    0800 9018 LDR R12,=memset;[0x08009020]=0x000200C3 

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

    您可以使用链接器命令文件结构对齐段。 请参阅本文档中链接器命令文件的"align"关键字:  

    地址0x0800_9018处是否有有效代码? 应用程序是否使用有效代码对该位置进行编程以跳转到 memset 例程?