在CC2640里,osal_snv_write的API函数是基于ICall层来操作的。
因此,需要把flash操作和simplepherial的task绑定。
在上述task初始化时,增加
FlashOperationMessage_RegisterAppCBs(&user_flashOperationMessageCBs);
在变量设初始值时,设定
static flashOperationMessageCBs_t user_flashOperationMessageCBs =
{
user_flashOperationMessageCB
};
static void user_flashOperationMessageCB(const uint8_t action)
{
SimpleBLEPeripheral_enqueueMsg(SBP_FLASH_OPERATION_EVT, Flash_Protection);
}
并且把flash的写动作设置成simple任务的一个event来执行。
这样操作的原因是因为,实测直接操作osal_snv_write是无效的。必须通过icall层操作。而icall注册在了simple任务中。