变量到寄存器的手动分配听上去挺高级,其实大多数时候没啥必要,甚至还有点危险,尤其是用在嵌入式开发里。你可以用 _EEDATA()
这个宏直接把变量塞进 EEPROM,方便。比如下面这个例子,直接初始化了一个 user_data
数组到 EE 数据区,读写都挺顺畅。
程序空间访问(PSV)这一块也挺重要的,尤其是在 dsPIC 或 PIC24 系列里,想通过 PSV 访问 EEPROM 的话,记得设置好 PSVPAG
和 CORCONbits.PSV
,不然你读出来的都是 0x0000
,可别傻傻调了半天。
整个访问流程其实也不复杂,就几行配置代码:
PSVPAG = __builtin_psvpage(&user_data);
CORCONbits.PSV = 1;
if (user_data[2]) {
// do something
}
你平时只要变量不太大,用这个方式访问 EEPROM 挺稳的。注意一点:编译器自动管理的 PSV 模型和你手动管理的不能混着来,不然冲突了调起来挺烦的。
如果你对寄存器分配或者 Matlab 模拟动力系统吸引子这类内容感兴趣,下面这几篇资源可以一起看看:
如果你用的是 MPLAB,又涉及到 EEPROM 数据读写,建议别手动绑寄存器了,交给编译器省事不少。