正如所承诺的,本贴为第二部分,阐述了我设计的闪存抽象层(flash_al.c),借助VSCP平台特有的功能,可以读取闪存或写入闪存,而不是一次读/写1个字节的EEPROM。这一阶段的GitHub repo在这里:gallowaa/ can4vscp_frdm•GitHub。您还可以找到MQX版本的repo命令,就在裸机后面“我的待办事宜”清单旁边。
VSCP依赖永久存储机制,因此节点可以在通电时立即恢复正常运行并记得之前分配的昵称。 VSCP最初是为一个8位图片写入,因此原来的固件一次性读取和写入1字节EEPROM。
正如之前文章所述,K64程序在4KB扇区闪烁。我已看到了本芯片非官方的闪存耐用性数据,约为10至50K的擦除/编程周期。为了使用K64F上的编程闪存开始,我修改了KSDK的示例,这样我就能编写闪存并最终读取闪存。我稍后将进一步阐述闪存驱动器的接口,但我想要展示如何通过以0xfa000开头,在一个扇区写入uint8_t缓冲,用连续的8位值填充32位存储器。
代码片段显示0xfa000如何指向字节'00',0xfa001指向“01”,这可以通过增加一个指针,并在该地址打印出值进行确定。
因此,为节省空间,我可能已经采用了这种方法,但由于有充足的闪存,我想要对所有事物都进行32位调节。这将使它可以更轻松快速检查存储器浏览器并定期进行数据字段的差异化,GUID 的字节数组长度必须正好为 16 字节(128位,根据特定网络可使用具有更短字节的 “昵称”)。
嗯,现在来看看闪光灯抽象层如何工作。在flash_al.c,我有3个函数,主要是利用KSDK附带的C90TFS驱动程序。
然而,架构方面最重要的不同是采用了缓冲,因为我们不能只在0xfa003编程。
通过这种方式,我们总是从0xfa000地址开始编程,但缓冲区可免费扩大并变化。我目前只是用一个IFDEF决定VSCP是否应该立刻将变化写入闪存, 或稍后选择性呼叫 “writeFlash”, 从而延长该存储器寿命并一次性写入变化。
请注意,我通常不会在通用功能里使用VSCP_FLASH_BASE,但我想在常规VSCP中采用这个接口。
而不是
因为如果在未来产生变化,人们只需从readFLASH移除“VSCP_FLASH_BASE”,而不是移除依赖其的类似于vscp_getControlByte的20种功能。
现在,我们可以测试VSCP功能,这些功能利用闪光灯AL。这并不意味着要进行完整的单元测试,只是要看看他们是否在预期条件下工作。
毫无疑问!
看不清飞友们:可以查看此链接:http://mp.weixin.qq.com/s?__biz= ... e=0#wechat_redirect
|