Microchip
直播中

叶亮

7年用户 225经验值
私信 关注
[问答]

如何用应用程序函数的当前值更新NVM

在最近的一篇文章中,我试图用一个应用程序函数的当前值更新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驱动程序的工作方式,还是这里还有其他东西在起作用?

回帖(1)

王雪

2020-5-4 14:49:38
等待。什么。。。我在NVM上运行程序?我认为MPLABX下载到RAM中。我需要做什么才能从RAM运行?如果数据表上写着30秒,我可以相信。我跑了50ms,没有跑在20毫秒。因为这两个似乎太多(对我来说),我没有尝试任何东西之间。中断中断30MS的时间很长。我得考虑一下后果。谢谢你的洞察力。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分