zoukankan      html  css  js  c++  java
  • ble学习笔记十五----------ble协议栈之flash数据存储实验

    协议栈flash数据存储实验

    Cc2540自带了256kflash,可以存储数据也可以存储代码

    协议栈自带了snv管理代码,读函数osal_snv_read,写函数osal_snv_write

    数据都有一个唯一的id,snv通过这个唯一的id管理FLASH中的数据 

    OSAL目录下的Bcomdef.h中定义了他自身所使用的一部分id,示例代码如下:

    示例应用:SNV中存入串口接收的数据,断电重启后读取这串字符串,并通过串口发送

    首先在bcomdef.h中添加哪下代码

    //自定义存储数据的id 

    #define BLE_NVID_USER_CFG_START    0x80  //!< Start of the USER Configuration NV IDs

    #define BLE_NVID_USER_CFG_END       0x89  //!< End of the USER Configuration NV IDs

    修改simpleBLEPeripheral.c文件

    添加头文件


    #include "osal_snv.h"

    然后在启动事件中添加读取snv0x80的值

    //启动事件

      if ( events & SBP_START_DEVICE_EVT )

      {

        // Start the Device

        VOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs );

        Serial_Init();      // 串口初始化

        

        //读取snv0x80的值

    if(SUCCESS == osal_snv_read( BLE_NVID_USER_CFG_START,  128, SerialRxBuf))

        {

          SerialPrintf("Read Snv ID %d success   Value is:"%s" ", BLE_NVID_USER_CFG_START, SerialRxBuf);

        }

        else

        {

            SerialPrintf("Read Snv ID %d failed ",  BLE_NVID_USER_CFG_START);

        }

        

        // Start Bond Manager

        VOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs );

        // Set timer for first periodic event

        osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );

        return ( events ^ SBP_START_DEVICE_EVT );

      }

    在串口接收事件中将接收到的数据存储到snv,示例代码如下:

    if ( events & UART_EVENT )

      {

        HalLcdWriteString( (char*)SerialRxBuf, HAL_LCD_LINE_6 );    // 在第5行显示启动信息

        //HalUARTWrite(HAL_UART_PORT_0, SerialRxBuf, osal_strlen(SerialRxBuf));

        if(SUCCESS == osal_snv_write( BLE_NVID_USER_CFG_START,  osal_strlen(SerialRxBuf), SerialRxBuf))

        {

            SerialPrintf("Save "%s" to Snv ID %d success ", SerialRxBuf, BLE_NVID_USER_CFG_START);

        }

        osal_memset(SerialRxBuf, 0, 128);

        return (events ^ UART_EVENT);

      }

      // Discard unknown events

      return 0;

    }

    运行结果如下

     

  • 相关阅读:
    Atcoder Tenka1 Programmer Contest 2019 D Three Colors
    Codeforces 1146E Hot is Cold
    ZOJ 3820 Building Fire Stations
    ZOJ 3822 Domination
    ZOJ 3949 Edge to the Root
    Codeforces 1144G Two Merged Sequences
    PTA 团体程序设计天梯赛 L3-020 至多删三个字符
    BZOJ 5102: [POI2018]Prawnicy
    BZOJ 1045: [HAOI2008] 糖果传递
    2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194240.html
Copyright © 2011-2022 走看看