在最近的一篇文章中,我试图用一个应用程序函数的当前值更新NVM的一小部分。NVMX写作似乎不起作用。在这个
论坛上指出,为了更新值,我需要使用NVMyEraseWrreWe()函数。这是有效的,所以我想知道对擦除写功能的时序效果。我的测试是在FSM中实现以下循环(我正在使用以太网启动器工具包II,PIC32MX795F512L设备):同时(1)擦写一个内存值到NVM等待命令完成更新内存值,每秒打印一条消息到cdc_serial端口,显示wr的次数它的出现是redend.-loopHere(一些)我的结果:我只能得到大约20次写每秒的工作,但是,当它工作时,我的MHC动态计时器慢了2倍或更多。我把定时器的优先级提高到7,但这并没有改变任何事情。如果我尝试超过20次写入/秒,cdc_port就不会连接。通常,当它没有连接并且我点击“停止调试”按钮时,程序将在一个与NVM_FlashWriteCycleHasCompleted_Default(index)相关的PLIB调用中。我注意到调用是嵌入式while循环的一部分,这使我想知道为什么文档建议应用程序需要检查命令的完成。顺便说一句,这解释了为什么我从未看到从EraseWrite返回到检查命令状态之间的任何延迟。最后,我还注意到在同一个while循环附近,中断被禁用。这或许可以解释为什么计时器中断的优先级看起来并不重要,以及为什么计时器会随着我执行更多的EraseWrites而变慢。谁能解释一下这是协调NVM驱动程序的工作方式,还是这里还有其他东西在起作用?