Zigbee(4) ---- Nv操作基础实验

在这里插入图片描述
实验过程:定义一个Nv条目,然后调用NV写入函数将数据写入该条目,再调用NV读取函数将数据读取到NV存储器。通过串口调试助手发送“nvread”命令,开发板收到该命令后读取NV存储器中的数据,并将其发送给PC。

用户可用的条目范围:0x0201~0xfff

先在ZcomDef.h文件中添加一个用户自己用的条目

#define TEST_NV	0x0201

如下代码实现数据的存储与读取操作

uint8 value_read;
uint8 value = 0x08;
osal_nv_item_init(TEST_NV, 1, NULL);
osal_nv_write(TEST_NV, 0, 1, &value);
osal_nv_read(TEST_NV, 0, 1, &value_read);

从串口读取命令判断是否为“nvread”,当读到该命令时进行NV读写操作,将value写入NV中,然后在把value从NV存储器读取出来通过串口打印在PC机上

static void rxCB(uint8 port, uint8 event)
{
  uint8 value_read;
  uint8 value = 18;
  uint8 uartbuf[2];
  uint8 cmd[6];
  HalUARTRead(0, cmd, 6);
  if(osal_memcmp(cmd, "nvread", 6))
  {
    osal_nv_item_init(TEST_NV, 1, NULL);//初始化该条目
    osal_nv_write(TEST_NV, 0, 1, &value);
    osal_nv_read(TEST_NV, 0, 1, &value_read);
    uartbuf[0] = value_read / 10 + '0';
    uartbuf[1] = value_read % 10 + '0';
    HalUARTWrite(0, uartbuf, 2);
  }
}

实验效果:
在这里插入图片描述

完整源码:

#include "OSAL.h"
#include "AF.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "ZDProfile.h"
#include <string.h>
#include "Coordinator.h"
#include "DebugTrace.h"

#if !defined( WIN32 )
#include "OnBoard.h"
#endif

/* HAL */
#include "hal_lcd.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_uart.h"
#include "OSAL_Nv.h"

const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] = 
{
  GENERICAPP_CLUSTERID
};

const SimpleDescriptionFormat_t GenericApp_SimpleDesc = 
{
  GENERICAPP_ENDPOINT,
  GENERICAPP_PROFID,
  GENERICAPP_DEVICEID,
  GENERICAPP_DEVICE_VERSION,
  GENERICAPP_FLAGS,
  GENERICAPP_MAX_CLUSTERS,
  (cId_t *)GenericApp_ClusterList,
  0,
  (cId_t *)NULL
};

endPointDesc_t GenericApp_epDesc;
byte GenericApp_TaskID;
byte GenericApp_TransID;
//unsigned char uartbuf[128];

void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pckt);
void GenericApp_SendTheMessage(void);
static void rxCB(uint8 port, uint8 event);

void GenericApp_Init(byte task_id)
{
  halUARTCfg_t uartConfig;
  GenericApp_TaskID             = task_id;
  GenericApp_TransID            = 0;
  GenericApp_epDesc.endPoint    = GENERICAPP_ENDPOINT;
  GenericApp_epDesc.task_id     = &GenericApp_TaskID;
  GenericApp_epDesc.simpleDesc  = (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
  GenericApp_epDesc.latencyReq  = noLatencyReqs;
  afRegister(&GenericApp_epDesc);
  
  uartConfig.configured         = TRUE;
  uartConfig.baudRate           = HAL_UART_BR_115200;
  uartConfig.flowControl        = FALSE;
  uartConfig.callBackFunc       = rxCB;
  HalUARTOpen(0, &uartConfig);
}

UINT16 GenericApp_ProcessEvent(byte task_id, UINT16 events)
{
  return 0;
}
static void rxCB(uint8 port, uint8 event)
{
  uint8 value_read;
  uint8 value = 18;
  uint8 uartbuf[2];
  uint8 cmd[6];
  HalUARTRead(0, cmd, 6);
  if(osal_memcmp(cmd, "nvread", 6))
  {
    osal_nv_item_init(TEST_NV, 1, NULL);
    osal_nv_write(TEST_NV, 0, 1, &value);
    osal_nv_read(TEST_NV, 0, 1, &value_read);
    uartbuf[0] = value_read / 10 + '0';
    uartbuf[1] = value_read % 10 + '0';
    HalUARTWrite(0, uartbuf, 2);
  }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值