<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                * 導師**視頻**講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz/) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> NV也就是非易失存儲器,簡單來講就是Z-Stack把芯片(比如CC2530)內部FLASH的一片空間拿出來用來存儲數據,這片空間中一部分被Z-Stack使用了,使用的情況可以在文件ZComDef.h中進行查看: ![](https://img.kancloud.cn/98/67/98678642f8ac15819adf4f14e7dc2f84_418x696.png =300x) ### 我們重點要關注的是,ZStack保留了多少空間給用戶使用,同樣可以在文件ZComDef.h找到相應的定義: ![](https://img.kancloud.cn/6f/d3/6fd3de67368064a620cbb8c9b4abafd8_832x196.png =600x) ### 也就是地址從0x0401到0x0FFFF是保留給用戶使用的,如果用戶需要使用,在這里定義即可,比如我們想使用地址為0x0401的NV空間(每個地址可以存儲一個字節的數據): ![](https://img.kancloud.cn/4b/aa/4baa81d3c96c0a202b123861b87b8a90_832x82.png =600x) ### ## \*\* **操作NV的文件及API** 在OSAL\_Nv.h中有幾個重要的API: ![](https://img.kancloud.cn/71/8e/718e2bf1ebe38594b1fe9b2f1d9300b0_264x318.png =200x) ``` 1./*? 2.?*?Initialize?an?item?in?NV? 3.?*/?? 4.extern?uint8?osal_nv_item_init(?uint16?id,?uint16?len,?void?*buf?);?? 5. 6./*? 7.?*?Read?an?NV?attribute? 8.?*/?? 9.extern?uint8?osal_nv_read(uint16?id,uint16?offset,?uint16?len,?void?*buf);?? 10./*? 11.?*?Write?an?NV?attribute? 12.?*/?? 13.extern?uint8?osal_nv_write(uint16?id,uint16?offset,uint16?len,?void?*buf); ``` ### 第一個API用來初始化指定地址的NV,比如我們想初始化0x0401這個地址的空間: ``` 1.osal_nv_item_init(0x0401,?1,?NULL);??// 參數len為1表示一個字節, 2. // 如果len不為1表示起始地 3. // 址后連續len個字節的空間 ``` ### 第二個API和第三個API的作用是對指定地址NV的讀/寫操作,其中參數id表示起始地址,offset表示起始地址需要偏移多少個字節作為操作的地址,len表示要操作的字節數。比如我要分別對0x0401地址進行寫和讀操作: ``` 1.uint8?writeVal;?? 2.uint8?readVal;?? 3.?? 4./*? 5.?*???Write,?USER_NV_TEST -> 0x0401? 6.?*/?? 7.osal_nv_write(?USER_NV_TEST,?0,?1,?&writeVal?);??// 寫 8.?? 9./*? 10.?*???Read,?USER_NV_TEST -> 0x0401? 11.?*/?? 12.osal_nv_read(?USER_NV_TEST,?0,?1,?&readVal);?? // 讀 ``` ### 使用NV時,必須先初始化后才能進行讀/寫操作,NV指定地址的空間只需要被初始化一次即可,后面再對該地址調用初始化函數其實不會起作用了,待會結合例子大家就明白!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看