我已经将SPOTAR配置文件添加到我的定制项目中,并确保广告数据包含在SUOTA应用程序中检测到的设备的正确值。当从EEPROM启动时,试图通过SUOTA上传新固件会使我的设备崩溃。我尝试在Keil中进行调试,将通常存储在Bank 1中的图像上传到eeprom中,当我试图从SUOTA应用程序向我的设备发送新固件时,它崩溃了,出现了以下一行硬故障:spota_state。status_ind_func (SPOTAR_START);我不确定从这里到哪里去调试。
整个函数在这里:
空白app_spotar_start(空白)
{
/ / app_force_active_mode ();
spota_state。status_ind_func (SPOTAR_START);
如果(SPOTAR_IS_FOR_PATCH (spota_state。mem_dev))
{
spotar_send_status_update_req ((uint8_t) SPOTAR_SRV_STARTED);
}
其他的
{
spotar_send_status_update_req ((uint8_t) SPOTAR_IMG_STARTED);
}
/ /初始化索引
spota_state。spota_pd_idx = 0;
spota_state。suota_block_idx = 0;
spota_state。suota_img_idx = 0;
spota_state。new_patch_len = 0;
spota_state。crc_clac = 0;
spota_state。crc_clac = 0;
}
除此之外,该设备似乎还能正常工作。我所有的其他服务和外围设备都能正常工作。
设备:
嗨JBaczuk,
似乎当在spotar指示期间访问该处理程序的回调函数时,它会导致一个无效的指针值,您可以检查在结构体的指针中传递的值是否确实是SPOTAR_START事件发生时您想要调用的函数的指针。您是否在app_init_func()中调用app_spotar_init(),以便使用app_spotar_status初始化回调指针?
由于MT_dialog
我没有调用app_spotar_init(),我如何做这个?它正在寻找一个指向函数的指针,但是我应该传递什么函数指针以及如何传递?
嗨JBaczuk,
在app_init_func()函数中调用app_spotar_init()函数,并在初始化时将回调函数作为参数传递。通常这个函数应该在app_init_func()中调用,因为您已经定义了BLE_SPOTA_RECEIVER,因为您已经启用了SUOTA服务。默认的app_spotar_status()函数在580/581中不做任何事情,但在583芯片中它启用了内部flash。确保在项目中实现了app_spotar_status()。请看一下SUOTA在临近记者项目中的实施情况。
由于MT_dialog
谢谢,似乎已经解决了。我添加了函数app_spotar_status(const uint8_t spotar_event){…}to the app_project_proj.c file and then inside my app_init_func(void) function I added: app_spotar_init(app_spotar_status);