天狼落星
我在搭建使用NVDS功能的工程时一直报错,怀疑是没有gr55xx_nvds.c文件,但我在SDK并未发现有这东西
走进风雨里
你好,NVDS初始化、写入和读取代码实现封装在lib库中,所以不存在gr55xx_nvds.c文件。NVDS操作可以参考文档《GR551x开发者指南_V0_92》第2.4.2章节的内容。
使用以下代码可以实现从NVDS中读取本机蓝牙地址的功能,该段代码需要放在nvds_init(NVDS_START_ADDR, NVDS_NUM_PAGE)函数之后,并且要保证初始化函数的执行顺序为hal_flash_init()、nvds_init(NVDS_START_ADDR, NVDS_NUM_PAGE)、ble_stack_init(&m_app_ble_callback, &heaps_table)。
请特别注意0xC000开始的NVDS_TAG_ID已经被工程原始功能占用,请选用其它NVDS_TAG_ID。
代码示例:
使用NVDS读取函数将本机蓝牙地址通过串口打印输出,本机蓝牙地址NVDS Item tag固定为0xC001。
#include <stdio.h>
#include <string.h>
#include "app_log_port.h"
#include "gr55xx_hal.h"
#include "boards.h"
#include "hal_flash.h"
#include "gr55xx_nvds.h"
#define NVDS_ITEM_TAG 0xC001
void nvds_test(void)
{
uint16_t len = 0;
uint8_t addr[6], ret = 0;
len = nvds_tag_length(NVDS_ITEM_TAG);
ret = nvds_get(NVDS_ITEM_TAG, &len, addr);
if( ret == NVDS_SUCCESS )
{
printf("NVDS 0x%X Len = [%d]\r\n", NVDS_ITEM_TAG, len);
printf("NVDS 0x%X Data X:X:X:X:X:X\r\n",
NVDS_ITEM_TAG, addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]);
}
else
{
printf("NVDS get error %d\r\n", ret);
}
}
int main(void)
{
hal_flash_init();
nvds_init(NVDS_START_ADDR, NVDS_NUM_PAGE);
hal_init();
/* Initial printf mode and UART */
app_log_port_init();
nvds_test();
printf("\r\n");
printf("******************************************************\r\n");
printf("* NVDS example. *\r\n");
printf("* *\r\n");
printf("* Config: 115200, 8-bits, 1-stopbit, none *\r\n");
printf("* *\r\n");
printf("* UART0 <-----> UART to USB *\r\n");
printf("* TX(GPIO10) -----> RX *\r\n");
printf("* RX(GPIO11) <----- TX *\r\n");
printf("* *\r\n");
printf("* This sample code will print Bluetooth Address on terminal *\r\n");
printf("******************************************************\r\n");
app_log_port_flush();
printf("\r\nThis example demo end.\r\n");
while(1);
}
PS:如果我的回答能够帮助您解决问题,请将此问题设置为已解决,谢谢。
天狼落星
一下是工程报错以及工程引用的相关文件
打开微信,使用“扫一扫”即可关注