Part Number:CC2652R
假如调用osal_snv_write(0x101, 5, "abcde")函数,在SNV中写入编号为0x101的内容为“abcde”共5个字符,
osal_snv_read(0x101, 5, tmp)是能够正确读出数据的。
但是如果我调用osal_snv_read函数时,读取的字节数大于5,则返回0x05的错误,即为NVINTF_BADLENGTH,表示错误的长度。
疑问:难道在调用osal_snv_read读取存储在SNV中的数据时,需要知道此条目保存的数据的准确字节数吗?
Kevin Qiu1:
你或许可以使用sizeof(),这样就不必每次修改len值了
,
YiKai Chen:
你用的協議棧版本是?新版的好像不直接調用這些API了,建議你參考一下 dev.ti.com/…/flash_memory-cc13xx_cc26xx.html
,
wei wang:
问题是我将数据保存到SNV中,重启后我想获取它,怎么会提前知道它的len值呢
,
wei wang:
我安装的SDK是5.20,用到的BLE5-Stack是2.02.02
,
Kevin Qiu1:
参考下面代码,使用sizeof;
osal_snv_read(BLE_NVID_TEST, sizeof(testFlag), (uint8 *)&testFlag);
,
wei wang:
您没明白我的意思,假设我之前在0x101的id条目中保存设备名称字符串,此时是知道保存到条目中的len长度。但比如断电重启后,我并不知道之前在0x101的条目中保存了多长的数据,那我该如何调用osal_snv_read获取呢?还是说osal_snv_read和osal_snv_write函数只能操作定长的数据,这样len就没有异议了,但这样的话空间利用率不高啊
,
Kevin Qiu1:
wei wang 说:还是说osal_snv_read和osal_snv_write函数只能操作定长的数据,这样len就没有异议了,但这样的话空间利用率不高啊
是只能操作定长数据,当无效数据较多时,驱动程序会自动压缩,参考:
https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_5_30_01_01/docs/ble5stack/ble_user_guide/html/ble-stack-common/flash_memory-cc13xx_cc26xx.html
,
wei wang:
好的,我通过实验验证的就是osal_snv_write和osal_snv_read必须操作定长的数据,否则osal_snv_read会报错