DA14585
2年前
发布的米克伍德0点 8回复SDK为应用程序绑定数据库函数提供回调,可以用用户函数替换。但是,struct bond_db在app_bond_db.c文件中定义(不是在标题中),并且键入键在app_bond_db.c中静态,因此很难为app_bond_db_callbacks提供有意义的用户定义替换,而无需修改SDK文件。我尽量不这样做,因为它使得在进行自定义修改时升级SDK非常困难。
我们的应用程序将在设计中将绑定DB存储在另一个处理器的闪存中,因此罐头SPI_FLASH和I2C_EEPROM功能不合适。如果SDK提供了检索键合结构地址和大小的函数,则非常好,这将允许覆盖默认回调而不修改SDK。正如现在,我需要修改SDK以提供此功能。
2年前
嗨mkelwood,
你能试着再解释一下你想做的事情吗?如果我能从你的线程中理解,你想要完成的是要开始阅读绑定数据,但要在程序尚未完成之前启动过程?当结束过程完成后,应触发回调?请提供进一步澄清。
谢谢,PM_DIALOG.
2年前
你好PM_Dialog,
这是大致正确的。问题是我从app_bdb_init要么需要返回()键检索数据库之前,或阻止app_bdb_init()时调用调度程序允许的SPI总线处理user_on_system_powered()回调继续,类似于在bond_db_erase_flash_sectors()。在第一种情况下,一旦从其他处理器检索到bond数据库,我将通过消息处理或直接在SPI处理代码中填充bond_db结构。这种情况更容易实现,但是在没有有效的bond数据库的情况下从app_dbd_init()返回可能是危险的。第二种情况(从app_dbd_init()内部阻塞和调用调度程序)可能更安全,但更难以正确实现,而且只有当rwip_schedule()调用将允许SPI处理继续通过调用user_on_system_powered()时,它才会工作。
我的问题是(A)是安全的回来app_bdb_init()和推进债券之前的应用程序启动数据库可用,如果没有,那么(B)将通过调用user_on_system_powered block-and-schedule计划工作(如有需要),直到债券数据库收到吗?
此外,在我的第一篇文章中,由于绑定数据库加载和存储机制没有钩到app_bond_db_callbacks,我别无选择,只能修改SDK来实现自定义加载和存储机制,这是不幸的。
2年前
你好PM_Dialog,
我实现了上面的方案A:使用一个无效的数据库从app_bdb_init()继续,并在从其他处理器检索到bond数据库后重新填充它。这似乎工作正常。我认为,在没有有效数据库的情况下,配对事件可能会出现一个小窗口(任何修改都会被重写),但我估计,在第一个广告包通过无线电发出之前,整个过程就已经完成了。在任何情况下,我们都可能不得不承受这种风险。
如果能确认该方案没有其他(我不知道的)警告,那就太好了。如能提供任何信息,将不胜感激。
2年前
嗨mkelwood,
很抱歉耽误您的时间,感谢您提供的程序。你能澄清一下这个程序是否解决了你的问题吗?正如你提到的,你的SDK修改了SDK(我不会推荐它),但我没有任何消息。
谢谢,PM_DIALOG.
2年前
嗨PM_Dialog,
描述的程序似乎对我们很有效。我通过延迟广告的开始来关闭窗口,直到bond数据库被检索到并安装到位,因此应该不存在试图连接无效数据库的可能性。这个过程需要修改app_bond_db.c中的SDK。我同意这是不幸的,但是已经发布的bond数据库回调结构不支持为bond数据库实现自定义存储方法(这就是我最初发表这篇文章的原因)。我希望开发团队能在某些时候纠正这一点。
最诚挚的问候,
麦克
2年前
作为我第一篇文章的后续,有没有一种“异步”处理债券数据库检索的好方法?例如,如前所述,我们的系统将在一个单独的处理器中存储键数据库。所以当它是初始化bond db的时候,DA14585将请求(通过SPI总线)从其他处理器转移bond db;实际的转移将在一段时间后完成。SPI处理是通过回调来处理的(特别是在user_on_system_powered()回调期间),所以我不能在等待传输发生时阻塞app_bdb_init()调用。
我可以从app_bdb_init()函数返回并“backfill”已收到的bond db,但我担心这可能会导致其他问题。你对处理这种情况有什么建议吗?谢谢。