名人堂再聚首 2023-02-19 09:02 采纳率: 79.2%
浏览 14
已结题

IAP升级时输出保持正常

大家好!

我现在要将PIC单片机程序做在线升级,也就是IAP,而且需求是必须不断电升级,也就是单片机重启复位时外围的输出信号必须能保持住。前两天看到有人说用锁存器,不知道这个具体怎么用法,大家有没有比较好的不断电升级方案,在此先谢谢了!

  • 写回答

4条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-19 09:28
    关注

    基于Monster 组和GPT的调写:
    实现不断电升级需要满足两个条件:

    在升级过程中保持数据存储的稳定性,以防止数据丢失。

    在单片机复位后,外围的输出信号能够保持住。

    其中,保持数据存储的稳定性可以通过使用锁存器来实现。锁存器可以将数据存储在寄存器中,并在需要时将其输出到下一级电路。在IAP过程中,当需要修改Flash存储器中的数据时,可以将数据读取到锁存器中,进行修改,然后再将修改后的数据写回Flash存储器。

    保持输出信号的稳定性可以通过在单片机复位时将输出信号的状态保存在EEPROM中,并在复位后将其恢复。具体实现方法如下:

    在代码中加入EEPROM读写函数,用于将输出信号的状态保存在EEPROM中,并在需要时将其恢复。

    在单片机复位时,先从EEPROM中读取输出信号的状态,并将其输出到对应的外围设备。

    在进行IAP过程时,先将输出信号的状态读取到锁存器中,并在IAP完成后将其写回EEPROM中。

    在单片机正常运行时,使用锁存器来保存输出信号的状态,并在需要时将其输出到对应的外围设备。

    需要注意的是,EEPROM的写入次数是有限的,因此需要控制好EEPROM的使用次数,以防止过度磨损。

    除了使用锁存器和EEPROM来实现不断电升级,还可以考虑使用双Flash或者双EEPROM来实现,即在进行IAP时,先将程序下载到备用存储器中,再将程序复制到主存储器中。这种方法可以避免在IAP过程中丢失数据,同时也可以保持输出信号的状态。不过需要注意的是,双存储器的使用需要占用额外的空间,因此需要在设计时进行考虑。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 2月19日

悬赏问题

  • ¥60 如何把照片修复成原始拍摄图
  • ¥80 Exited too quickly (process log may have details)
  • ¥15 爬知乎登录之后内容加载不出来
  • ¥15 怎么用protues测量通频带
  • ¥15 zepelin使用sparkInterpreter 异常
  • ¥15 paho mqtt 接收不到消息
  • ¥15 函数r关于两个分量y,z方向上的图像,分开画r随y的图像,r随z的图像
  • ¥15 如何用Matlab求Pearcey函数的数值积分?
  • ¥15 一个简单的函数定义问题,输出结果是相反的,怎么回事呢?
  • ¥15 页面加载报错,不知道怎么处理