主题中讨论的其他部件: MSP432P401R
大家好,
我有MSP432P401M控制器。
我的编程有一个变量,我想将它存储到闪存中。
我希望我的变量在重置后不丢失或没有通电。
发送与msp432控制器相关的mi示例代码。
如何更改链接器文件设置??
谢谢
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.
大家好,
我有MSP432P401M控制器。
我的编程有一个变量,我想将它存储到闪存中。
我希望我的变量在重置后不丢失或没有通电。
发送与msp432控制器相关的mi示例代码。
如何更改链接器文件设置??
谢谢
您好,John:
我已经从MSP432 simplelink中获取了代码“闪存程序存储器”示例,并且在我的代码中仅使用了其擦除闪存部分,它存储了从0x1F000 (链接器命令文件中的我的数据部分)开始的5个默认值。 但是,擦除功能不起作用。因为它需要擦除我的默认存储值,如内存浏览器中所示。
我正在附加main.c文件:-
Sayali
我通读了你的主页c,我想你已经很接近完全正确了。
我想询问您对我最初提供的链接的反馈。 是很难找到代码还是很难解释代码?
我想说,读遍线程和代码 相当困难,因为格式不是很好。
因此,我直接附加在main.c和msp430p401r.cmd文件下面。 如果这样做不能使事情更加清晰,请告诉我,但至少现在您应该能够复制和粘贴 代码,并对其进行非常小的调整以实现您的目标。 (出于安全目的,文件msp430p401r.cmd是下面的".c"文件。 请将该代码复制并粘贴到项目的现有msp430p401r.cmd文件中。)
**请注意,您的起始位置设置为0x0001_F000,但您仍在使用从 0x0003_F000开始的bank1,扇区31。**
您好,John:
我正在使用具有128KB闪存的MSP432P401M处理器。因此,主内存中的开始位置设置为0x0001_F000。 根据你的资料,我正在使用31区的银行0。 sistill,内存浏览器中的值 不会被擦除。
我正在连接main.c.
Sayali
我在之前的附件中附加了一个名为msp432p401r.c的文件。 由于您没有附加.cmd文件,我无法为您验证它。 如果您所做的全部更改都是上面提到的2行,则这还不够。
您需要导航到.cmd文件的节部分,然后按如下所示添加.MyData代码行(我通常将其放在这两个节之间,但我不知道将其放在其他位置会有什么不同。):
init_array :> main
.MyData :{}> MyData
.binit :{}> main
您是否也这样做了?
此外,main.c只擦除扇区,而不会再次调用编程它,例如:map_Flashctl_programMemory如下所示...
/* Unprotecting Info Bank 0,Sector 0 */ MAP_Flashctl_unprotectSector (FLASH_MAIN_MEMORY_SPACE_BANK1,FLASH_SECTOR31); /*正在尝试擦除扇区。 在此函数中,API将 自动尝试清除最大尝试次数。 如果失败, 在无限循环中捕获*/ IF(!MAP_FlashCtl_eraseSector(calibration_start)) 同时(1); /*正在尝试对内存进行编程。 在此函数中,API将 自动尝试设定最大尝试次数。 如果失败, 在无限循环内陷印*/ IF(!MAP_FlashCTL_programMemory(simulatedCalibrationData, (void*) calibration_start,4096) 同时(1); /*将扇区设置回受保护的*/ MAP_FlashCTL_ProtectSector(FLASH_MAIN_MEMORY_SPACE_BANK1,FLASH_SECTOR31);
您好,
我已将一些默认值存储在闪存中,从1F000H开始。 我想首先确保可以在运行时清除此默认值?? 为此,我只使用代码中的3个函数,如下所示:-
/* Unprotecting Info Bank 0,Sector 0 */
MAP_Flashctl_unprotectSector (FLASH_MAIN_MEMORY_SPACE_BANK0,FLASH_SECTOR31);
/*正在尝试擦除扇区。 在此函数中,API将
自动尝试清除最大尝试次数。 如果失败,
在无限循环中捕获*/
IF(!MAP_FlashCtl_eraseSector(calibration_start))
同时(1);
/*将扇区设置回受保护的*/
MAP_FlashCTL_ProtectSector(FLASH_MAIN_MEMORY_SPACE_BANK0,FLASH_SECTOR31);
在调试代码时 ,必须注意到该程序没有擦除闪存,而是在上面提到的while (1)语句下失败并持续运行循环。我使用了以下默认值:-
#pragma set_data_section(".MyData")
const unsigned int MyData[]={0x0001,0x0002,0x0003,0x0004,0x0005};
我已确认此值存储在闪存中,方法是在内存浏览器中从1F000H开始的位置看到它们。 我正在附加.cmd文件以供您参考
Sayali
这一切对我来说都是正确的。 我唯一能想到的是,您是否定义了错误的calibration_start。
我将main.c和.cmd文件放入CCS上的项目 中(删除MSP432P401M.h文件,因为我使用的是带有MSP432P401R芯片的LP),并运行了代码。 我验证了是否正在使用内存浏览器擦除数据(下面的代码以及闪存 擦除和程序函数处的断点),因此我不确定您正在采取何种不同的做法?
如果您只是复制经过main.c和flash.docx ( 为了方便使用,我将在下面链接这两个) 到一个新项目中,我认为您不需要进行任何修改来验证这两个项目是否正常工作; 但如果情况并非如此,请告诉我。
/*正在尝试擦除扇区。 在此功能中,API将自动尝试清除最大尝试次数。 如果失败, 在无限循环中捕获*/ IF(!MAP_FlashCtl_eraseSector(calibration_start)) { 同时(1) { ;} } /*正在尝试对内存进行编程。 在此函数中,API将 自动尝试设定最大尝试次数。 如果失败, 在无限循环内陷印*/ IF(!MAP_FlashCTL_programMemory(arr, (void*) calibration_start,NumBytes)) 同时(1); /*正在尝试擦除扇区。 在此功能中,API将自动尝试清除最大尝试次数。 如果失败, 在无限循环中捕获*/ IF(!MAP_FlashCtl_eraseSector(calibration_start)) { 同时(1) { ;} }
e2e.ti.com/.../0486.flash.docx e2e.ti.com/.../2553.1055 .main.c