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.

[参考译文] TMS320F28069M:更改闪存中结构的内容

Guru**** 2535750 points
Other Parts Discussed in Thread: MOTORWARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/959536/tms320f28069m-change-contents-of-a-struct-in-flash

器件型号:TMS320F28069M
主题中讨论的其他器件:MOTORWARE

为此、我使用 Motorware 18 proj_lab09a。

我正在尝试使用保存在闪存中的数据在启动时初始化结构。 我在闪存中创建了一个 const 结构、我使用包含默认参数的宏进行初始化、然后在对电路板进行编程时写入该结构。 然后、当运行程序时、闪存中结构的数据被复制到 RAM 中的结构。 如果我想保留 RAM 中的结构、我会通过 Flash_Program ()(闪存 API 函数)将数据保存到闪存中的结构。

问题:当我在向闪存写入与宏中定义的数据不同的数据后启动电路板时,程序会崩溃到 PIE_illegalIsr()。

我假设问题源于尝试使用宏初始化闪存结构的程序、但数据不匹配、无法写入闪存、因此会崩溃。

是否有办法解决这个问题? 我希望在刷写电路板时写入默认数据、但如果需要、可以使用更改的值。

它当前看起来是这样的(不是实际代码、只是为了让您了解操作序列):

#pragma DATA_SECTION (gUserParams_flash、"persistent_memory");

#define USER_Params_init{/* default params*/}

const USER_Params_flash = USER_Params_init;USER_Params_init

;

void main (* default params*)
{UsergUserParams=gUserParams_uFlash





(void);US_Params&UCPlums (US_U16);US_UCPlash_UCPh&User&UCPlums (US_Params);US_U16);User_UCPh&Us_Params&Us_Params (UCPlums (US_Params)

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

    1.在调用闪存 API 函数之前禁用所有中断。

    2.使用单独的闪存扇区来保存数据、不要在该扇区中存储任何其他程序代码。

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

    1、已经禁用了中断、否则我将无法首先写入数据。 这不是程序发生故障的地方、当我在写入"gUserParams_flash"结构后重新启动电路板时、它会失败。

    2.只有"gUserParams_flash"结构位于扇区 H 中、这是我在重新启动后尝试覆盖和使用的扇区 H。 那里没有其他东西。

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

    我找到了一个解决方案、就是将.cmd 文件中的 FLASHH 从 PAGE 0移动到 PAGE 1。

    如果有人能解释这种方法的作用、也会很感激。 我在 这里找到了有关该主题的内容:https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html#pages-of-memory 。但我没有看到任何可以解释该行为的内容。 如果我希望在第0页中定义所有内容、是否可以这样做? 如果是、如何实现?