Thread 中讨论的其他器件: SYSBIOS、 UNIFLASH
您好、我正在尝试使用 CC1310上的 NVS 驱动程序来存储和回读由 uint16和 uint8 (具有多个条目)构成的结构列表。 我已经尝试修改 nvsinternal 示例以适合这一点、但当我运行它时、它几乎每隔一次在尝试写入或擦除 NVS 时挂起一次。
我测试的结构:
/*测试结构以查看 NVS 写入是否会加载 uints*/
#define MAXNODES 4
结构 node_t{
uint16_t 节点地址;
uint8_t 类型;
}节点[MAXNODES];
静态 uint16_t buff[16];
修改了 nvsinternal 示例的主线程:
void *mainThread (void *arg0)
{
NVS_Handle nvsHandle;
NVS_Attrs regionAttrs;
NVS_Params nvsParams;
Display_Handle displayHandle;
display_init();
NVS_init();
displayHandle = Display_open (Display_Type_、空值);
if (displayHandle == NULL){
/* Display_open()失败*/
while (1);
}
uint8_t i;
for (i = 0;i < 4;i++){
node[i].nodeAddress = 16+I;
node[i].type = 1;
}
NVS_PARAMS_INIT (&nvsPARAMS);
nvsHandle = NVS_OPEN (Board_NVSINTERNAL、&nvsParams);
if (nvsHandle == NULL){
display_printf (displayHandle、0、0、"NVS_open () failed.");
返回(NULL);
}
display_printf (displayHandle、0、0、"\n");
/*
*这将填充具有特定属性的 NVS_Attrs 结构
*到 NVS_Handle、例如区域基地址、区域大小、
*和扇区大小。
*/
NVS_getAttrs (nvsHandle、®ionAttrs);
/*显示 NVS 区属性*/
Display_printf (displayHandle、0、0、"区域基地址:0x%x"、
regionAttrs.regionBase);
display_printf (displayHandle、0、0、"扇区大小:0x%x"、
regionAttrs.sectorSize);
display_printf (displayHandle、0、0、"区域大小:0x%x\n"、
attrs.regionSize);
/*
*从 NVS 区域基地址将"sizeof (signature)"字节复制到
*缓冲区。 偏移量为0表示相对于区域基地址的偏移量。
*因此、这些字节将从 regionAttrs.regionBase 复制。
*/
NVS_READ (nvsHandle、0、buff、sizeof (buff));
//NVS_Read (nvsHandle、2、(void *) temptype、1);
for (i = 0;i < 8;i += 2){
display_printf (displayHandle、0、0、"%u、%u"、buff[i]、 (uint8_t) buff[i+1]);
}
/*
*确定 NVS 区域是否包含签名字符串。
*将字符串与复制到缓冲区的内容进行比较。
*/
if (buff[0]== node[0].nodeAddress){
//if (strcmp ((char *) buffer、(char *) signature)== 0){
/*将签名直接从 NVS 区域写入 UART 控制台。 */
//Display_printf (displayHandle、0、0、"%u"、regionAttrs.regionBase);
display_printf (displayHandle、0、0、"擦除闪存扇区...");
/*擦除整个闪存扇区。 */
NVS_ERASE (nvsHandle、0、regionAttrs.regionSize);
}
否则{
/*在 NVS 区域中未找到签名。 */
// Display_printf (displayHandle、0、0、"将签名写入闪存……");
display_printf (displayHandle、0、0、"尝试向闪存写入节点");
/*将签名写入存储器。 闪存扇区在
*执行写入操作。 此函数为
* NVS_WRITE_ERASE。
*/
//NVS_WRITE (nvsHandle、0、(void *)签名、sizeof (签名)、
// NVS_WRITE_ERASE | NVS_WRITE_POST_VERIFY);
NVS_WRITE (nvsHandle、0、&node、sizeof (node)、NVS_WRITE_ERASE | NVS_WRITE_POST_VERIFY);
}
display_printf (displayHandle、0、0、"复位设备");
display_printf (displayHandle、0、0、footer);
返回(NULL);
}
所以我想我的问题是:我试图用这个做什么会导致这种行为吗?
。 是预期的输出吗? 