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.
工具/软件:Code Composer Studio
您好!
我想在 msp430f5342的信息 B 存储器中存储4种不同类型的数组、但是每次写入数据时、我都必须根据系列用户指南中给出的示例完全擦除信息 B 并写入新数据。 这样、我就无法擦除信息 B 的特定字节
是否有任何方法可以擦除信息存储器的特定数据或任何新方法?
您好!
感谢您发帖、我们将开始对此进行研究。
祝你一切顺利、
Colin Adema
您好 Samatha、
您是否为 MSP430F5xxx 器件使用 Driverlib? Driverlib 具有可用于写入闪存特定段的函数。 您可以在器件网页上的"软件"下找到它。
请参阅下面的代码和附带的屏幕截图、我使用相应的数据创建了4个数组、并分别写入每个数组、而不会影响其他数组。
#pragma LOCATION (array_8、0x1900);//指定数组位置
#pragma LOCATION (array_8_2、0x190a);
#pragma LOCATION (array_16、0x1914);
#pragma LOCATION (array_32、0x1928);
uint8_t array_8[10]={};//定义数组
uint8_t array_8_2[10]={};
uint16_t array_16[10]={};
uint32_t array_32[10]={};
uint8_t DATA_8[5]={1、2、3、4、5};//数据
uint16_t DATA_16[5]={1、2、3、4、5};
uint32_t DATA_32[5]={1、2、3、4、5};
uint8_t * segBstart =&array_8[0];//段 B 开始
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
FlashCtl_eraseSegment (segBstart);//擦除段 B
FlashCtl_write8 (&data_8[0]、&array_8[0]、5);//写入第一个数组
FlashCtl_write8 (&data_8[0]、&array_8_2[0]、5);//写入第二个数组
FlashCtl_write16 (&data_16[0]、&array_16[0]、5);//写入第三个数组
FlashCtl_write32 (&data_32[0]、&array_32[0]、5);//写入第四个数组
返回0;
}
祝你一切顺利、
Colin Adema
您好!
感谢您的回复!
我不能擦除整个信息 B、而只 能擦除"array_8"并将新数据具体地复制到"array_8"、而不 会干扰信息 B 中的其他数据
您应该尝试下载 driverlib 的更新版本、以防翻译中出现问题。 这里是执行该操作的链接
该下载中的闪存控制文件应该具有写入特定位置的函数、就像我在示例中所做的那样。
请告诉我这是否有帮助!
祝你一切顺利、
Colin Adema
我认为答案是、单个段是可以擦除的最小闪存容量。 但是、根据阵列的大小、您可以在 INFOB 中保存它们的连续版本、并且只在 INFOB 已被填满时擦除。 或者、您也可以对主存储器的一个或多个段执行相同的操作。 但是、如果您需要覆盖单个字节或字的功能、则 FR 部分可能更合适。
您好 Samatha、
我可能误解了你以前的要求、抱歉。
我同意 George 的说法、我们的 FR 设备似乎更适合您的应用。 FR 器件包含 FRAM、允许单独覆盖字节。
祝你一切顺利、
Colin Adema
您好 Samatha、
问题是什么? 是否已解决?
祝你一切顺利、
Colin Adema