完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
esp8266,带有FOTA功能的固件。使用 system_upgrade_userbin_check(),会根据当前工作在user1还是user2来返回相应的值:若返回0x00说明工作在user1,若返回0x01说明工作在user2。
我编写了一个固件,使用10个样品测试,都是工作在user1下的。然而,调用这个API的时候,有8个返回了正确的值(0x00),有两个返回了错误的值(0x01)。从官方手册来看,这个返回值是和FLASH最后16KB中存储的某些地址相关的,我推测可能是我的固件程序bug,导致工作的时候可能修改到这个相关的地址中的值。所以,希望知道这个相应的地址是多少。 我使用的FLASH大小是1MByte。分区如下: boot.bin 0x0 user1.bin 0x1000 user2.bin 0x81000 esp_init_data_default.bin 0xfc000 blank.bin 0xfe000 |
|
相关推荐
1个回答
|
|
要解决这个问题,我们可以按照以下步骤进行:
1. 首先,我们需要找到与FOTA功能相关的官方文档。这将帮助我们了解system_upgrade_userbin_check()函数的工作原理以及可能影响其返回值的因素。 2. 根据官方文档,我们知道system_upgrade_userbin_check()函数的返回值与FLASH最后16KB中存储的某些地址有关。我们需要找到这些地址的具体位置。 3. 在ESP8266的官方文档中,我们可以找到关于FOTA的相关信息。根据ESP8266的FOTA实现,系统会在FLASH的最后16KB中存储一个名为“ota_seq”的变量。这个变量用于记录当前固件的工作状态(user1或user2)。 4. 要找到“ota_seq”变量的地址,我们可以查看ESP8266的FLASH布局。通常,FLASH的最后16KB会被划分为几个部分,例如: - 4KB:OTA参数存储区 - 4KB:OTA固件存储区 - 8KB:预留区域 5. 在OTA参数存储区(前4KB)中,我们可以找到“ota_seq”变量。具体地址可能因不同版本的ESP8266而有所不同,但通常位于这个区域的开始位置。 6. 现在我们已经找到了“ota_seq”变量的地址,我们需要检查固件中是否有代码修改了这个地址的值。如果发现有代码修改了这个值,我们需要修复这个问题。 7. 为了确保固件的正确性,我们可以在固件中添加一些调试信息,以便在运行时监控“ota_seq”变量的值。这将帮助我们确定问题是否出在固件上。 8. 如果问题仍然存在,我们可以尝试使用其他方法来解决问题,例如更新ESP8266的固件版本,或者寻求社区的帮助。 通过以上步骤,我们可以找到影响system_upgrade_userbin_check()返回值的原因,并尝试解决这个问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:34 , Processed in 0.828167 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号