<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                * 導師視頻講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=28) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> ## **動態內存簡介** 在編寫程序時,開發者可能不能確定需要使用多少內存來保存數據,希望**在程序運行的過程中**根據實際需要來使用相應的內存空間。這種能夠在程序運行的過程中申請和釋放的內存空間稱為**動態內存**。 ### Z-Stack 3.0 中動態內存分配的API在OSAL_Memory.h文件中,這個文件在OSAL目錄下,如圖所示。 ![](https://img.kancloud.cn/47/43/4743136d4a27c15a453844e7454fda26_966x1000.png =200x) <br/> ## **申請與釋放動態內存** 在OSAL\_Memory.h文件中,可以找到兩個重要的API,定義如下: ``` /** * @fn osal_mem_alloc * * @brief 動態申請內存空間 * * @param size - 申請多少個字節的內存空間 * * @return 返回該內存空間的指針 */ void?*osal_mem_alloc(?uint16?size?); /** * @fn osal_mem_free * * @brief 動態釋放內存空間 * * @param ptr - 待釋放的內存空間指針 * */ void?osal_mem_free(?void?*ptr?); ``` 如果內存空間不用了,一定要調用這個API來釋放內存空間。 <br/> ## **動態內存的操作** 在申請完動態內存后,可以調用內存操作API來使用這些內存。內存操作API在OSAL.h文件中,下面這兩個API是比較常用的,定義如下: ``` /** * @fn osal_memcpy * * @brief 把內存空間的內容復制到另一個內存空間中 * * @param void* - 目標內存空間 * @param const?void?GENERIC?* - 源內存空間 * @param unsigned?int - 復制多少個字節 * * @return */ void?*osal_memcpy(void*,?const?void?GENERIC?*,unsigned?int);?? /** * @fn osal_memset * * @brief 把內存空間的值設置為指定的值 * * @param dest - 內存空間 * @param value - 指定的值 * @param len - 把從dest起的len個字節的存儲空間的值設置為value * * @return */ extern?void?*osal_memset(?void?*dest,?uint8?value,?int?len?); ``` <br/> ## **使用動態內存** 在上節課中的事件處理函數中做一些修改,修改后代碼如下: ``` //事件:SAMPLEAPP_TEST_EVT if ( events & SAMPLEAPP_TEST_EVT ) { //字符串:”Hello World!\n” char *str = "Hello World!\n"; //從堆空間中申請32個字節的內存空間 char *mem = osal_mem_alloc(32); //如果申請成功 if (mem != NULL) { //清零內存空間 osal_memset(mem, 0, 32); //將字符串拷貝到內存空間中 osal_memcpy(mem, str, osal_strlen(str)); //打印內存空間內存 printf(mem); //釋放內存空間 osal_mem_free(mem); } //重新觸發事件,3000毫秒后執行 osal_start_timerEx(zclSampleSw_TaskID, SAMPLEAPP_TEST_EVT, 3000); //消除已經處理的事件,然后返回未處理的事件 return ( events ^ SAMPLEAPP_TEST_EVT ); } ``` 這段代碼中,在執行完事件處理之后,重新觸發了該事件,實現了以恒定的時間間隔不斷觸發該事件。 <br/> ## **調試仿真** 使用仿真器把配套的ZigBee開發板連接到電腦。 ### 單擊Download and Debug按鈕進行程序的編譯、鏈接和下載并進入仿真模式,如圖所示。 ![](https://img.kancloud.cn/81/16/81166ae4ef8ce78720f184d22911cd5b_1000x570.png =500x) ### 進入仿真模式之后,單擊Go按鈕運行程序,如圖所示。 ![](https://img.kancloud.cn/d7/61/d76127c40858f031348f5bd4856909ae_2560x827.png =200x) 程序運行后,會每隔3秒在Terminal I/O窗口中輸出“Hello World!”,如圖所示。 ![](https://img.kancloud.cn/d1/34/d134eaf371553ea1c4b9c29137037f84_1579x1440.png =200x) <br/> <br/> ## **項目定制** * 如需項目定制開發,可掃碼添加項目經理好友(注明“**項目定制**”) * 定制范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技術方案 * 善學坊官網:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非項目定制**勿擾**,此處**非**技術支持
                  <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>

                              哎呀哎呀视频在线观看