使用协议栈:2.2
开发平台:CCS6.1
例程为协议栈自带的simple_peripheral工程,在SimpleBLEPeripheral_taskFxn任务中,使用SNV的步骤为:
1、先osal_snv_write(),
2、再osal_snv_read(),
加入这两个后程序就不运行了,我参考了PDF中的说明,也是这样调用的,请问还要注意什么吗?
Rugooo Zhang:
回复 Yue TANG:
你好
我确实是这样参考PDF写的代码,经过一上午的测试,可以确认的是写的代码,在逻辑上并没有错误。
问题出现在:
1、我在读操作的时候,将读出的指针通过 memcpy来拷贝到全局变量的时候,出现的程序未运行,
2、只要在有osal_snv_read()和osal_snv_write()的地方,我都用了memcpy将局部变量拷贝为全局变量,
问题总结:
1、不知memcpy这一类函数对RTOS系统的任务调度或者系统任务有什么影响吗?为什么会导致程序死机的情况。
2、SNV的操作会花费一些时间,需要向2540那样,在操作的时候进临界段吗?
Rugooo Zhang:
回复 Yue TANG:
还有一个重要的参数上午忘记说了,
把GAPROLE_TASK_STACK_SIZE=520预编译取消。适当扩大该堆栈,程序就正常运行。
首先,SNV操作的时Flash区域,字节缓存在cache中,和GAPRole的堆栈有什么关系呢?
xinkang zheng:
回复 Rugooo Zhang:
我使用这两个API来操作SNV存储的时候也出现过问题,因为我把写和读程序写入了uart的callback函数结果出现了莫名其妙的写和读的错误,后来我把write和read操作改到了App消息处理中就好了,是尝试一下把这个操作在程序的其他地方进行,祝你早日解决问题。zhengxinkang@qq.com