我正在使用 NXP MK60FN1M0VLQ12 ,我有一些变量要存储在内部闪存中,因此我在链接描述文件中声明了一个单独的部分,并在其中声明了一个全局结构以供代码引用。然后对其进行编程,我使用 Processor Expert 的 FMC 驱动程序的略微修改版本来擦除该扇区,然后一次编程 8 个字节。
然而,无论何时声明全局变量,我都无法擦除/编程闪存,否则它工作正常。当然,在这种情况下,简单的解决方法是使用指向该部分的指针,但我还计划重写一个代码部分,但这是行不通的。这与 C 链接器/编译器有关,还是与 MK60 或驱动程序有关?
以下是相关的代码片段:
链接器脚本:
m_status_page (RX) : ORIGIN = 0x00040000, LENGTH = 0x00001000
.status_page :{ 。=对齐(4);保持(*(.STATUS_PAGE))。=对齐(4);} > m_status_page
全局变量声明:
StatusPage _status_page[TOTAL_STATUS_PAGE_NUMBER] __attribute__ ((sec
tion (".STATUS_PAGE")));
然后,当我执行以下命令时,它什么也不做,也不会抛出错误:
flashProgram8Bytes(bytes_to_program, _status_page);
但是,如果我不声明 _status_page 变量,例如以下命令有效:
flashProgram8Bytes(bytes_to_program,0x00040000);