2年前
键DB回调覆盖
过帐人米克伍德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\U对话,
大致正确。问题是,在检索bond数据库之前,我需要从app\u bdb\u init()返回,或者在调用调度程序时阻塞app\u bdb\u init(),以允许user\u on \u system\u powered()回调中的SPI总线处理继续,类似于在bond\u db\u erase\u flash\u sectors()中所做的操作。在第一种情况下,一旦从另一个处理器检索到bond数据库,我将通过消息处理或直接在SPI处理代码中填充bond\u db结构。这种情况更容易实现,但是在没有有效的绑定数据库的情况下从app\u dbd\u init()返回可能会很危险。第二种情况(app\u dbd\u init()中的阻塞和调用调度程序)可能更安全,但更难正确实现,并且只有在rwip\u schedule()调用允许SPI处理根据需要通过调用\u system\u powered()上的用户\u来继续时,它才会起作用。
因此,我的问题是(A)在bond数据库可用之前,从app\u bdb\u init()返回并继续启动应用程序是否安全,如果不安全,那么(B)在收到bond数据库之前,是否可以根据需要通过调用\u system\u powered()上的用户\u来执行阻塞和调度方案?
另外,根据我的第一篇文章,由于bond数据库加载和存储机制没有连接到app\u bond\u db\u回调,我别无选择,只能修改SDK来实现定制的加载和存储机制,这很不幸。
2年前
你好,PM\U对话,
我实现了上面的方案A:从app\u bdb\u init()开始,使用一个无效的数据库,并在从其他处理器检索到bond数据库后,重新填充它。这似乎工作正常。我假设有一个很小的窗口,在没有有效数据库的情况下,配对事件可能会发生(任何修改都会被重写),但我估计在第一个播发数据包甚至在无线电上发出之前,整个过程就已经完成了。无论如何,我们可能不得不承受这种风险。
这将是很高兴得到确认,这一计划没有其他(我不知道)的警告。如果您能提供任何信息,我们将不胜感激。
2年前
嗨,mkelwood,
对延误表示歉意,并感谢您提供的程序。你能澄清一下这个程序是否能解决你的问题吗?正如你提到的,你修改了SDK(我不推荐),但是我没有任何关于这个的消息。
谢谢,PM_DIALOG.
2年前
嗨,PM\U对话,
所描述的程序似乎对我们很有效。我关闭了窗口,延迟了广告的开始,直到检索到bond数据库并将其放置到位,因此不可能尝试连接无效的数据库。此过程需要对app\u bond\u db.c中的SDK进行更改。我同意这是不幸的,但是为bond数据库发布的回调结构不支持为bond数据库实现自定义存储方法(这是我在这里最初发表文章的原因)。我希望开发团队会在某个时候纠正这个问题。
最诚挚的问候,
麦克
2年前
作为我第一篇文章的后续,有没有一个好的方法“异步”处理债券数据库的检索?例如,如前所述,我们的系统将债券数据库存储在一个单独的处理器中。因此,当需要初始化bond db时,DA14585将请求(通过SPI总线)从另一个处理器传输bond db;实际转移将在一段时间后完成。SPI处理是通过回调来处理的(特别是在用户\u on \u system \u powered()回调期间),所以我不能在等待传输发生时阻止app \u bdb \u init()调用。
我可以从app\u bdb\u init()函数返回并在收到bond db时“回填”它,但我担心这可能会导致其他问题。对处理这种情况有什么建议吗?谢谢。