C中的MCU闪存编程

时间:2016-12-01 15:45:17

标签: c embedded microcontroller flash-memory

新手在这里。我目前正在开展一个涉及在MCU(NUC200LE3AN)闪存上保存密码的项目。

这些代码工作得很好。写完之后,即使MCU重启,我也能读取user_password1的确切值。

FMC_Erase(PASSWORD1_LOCATION); //u32addr 
if (*(uint32_t *)(PASSWORD1_LOCATION) == 0xffffffff)
{
    uint32_t user_password1 = "1234";
    FMC_Write(PASSWORD1_LOCATION,user_password1);
}

uint32_t ReadPass1 = *(uint32_t *)(PASSWORD1_LOCATION);

UART_Write(UART0,ReadPass1,4); //4 -> string length 
_UART_SENDBYTE(UART0,0x0D);

但是我将使用uint8_t数组5(包括终止' \ 0')作为更改密码的来源。例如:

FMC_Erase(PASSWORD1_LOCATION);    

uint8_t new_password[5];
new_password[0] = '1';
new_password[1] = '2';
new_password[2] = '3';
new_password[3] = '4';
new_password[4] = '\0';

if (*(uint32_t *)(PASSWORD1_LOCATION) == 0xffffffff)
{
  user_password1 = (uint32_t *)(new_password);
  FMC_Write(PASSWORD1_LOCATION,user_password1);
}

uint32_t ReadPass1 = *(uint32_t *)(PASSWORD1_LOCATION);

UART_Write(UART0,ReadPass1,4); //4 -> string length 
_UART_SENDBYTE(UART0,0x0D);

有了这个,我可以写密码并阅读它,只要那些修复值在那里,那些修复值只是默认密码。在我更改密码之后,只要我不关闭MCU,它仍然可以被读取,这是由于MCU需要打开/关闭而不可接受的。如果我应用它然后重新启动MCU,则读取PASSWORD1_LOCATION将返回garbage / null。

有没有办法解决这个问题:

uint8_t new_password[5];     
new_password[0] = '1';
new_password[1] = '2';
new_password[2] = '3';
new_password[3] = '4';
new_password[4] = '\0';

进入这个:

uint32_t user_password1 = "1234";

我希望你知道我的意思。谢谢。

0 个答案:

没有答案