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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/nb-iot) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> ## **SDK 源碼結構** 打開本節課配套的工程,其文件結構如下圖所示。 ![](https://img.kancloud.cn/1e/e7/1ee7f01a36ccbfe0259ae8ce457c944e_364x541.png =300x) ### 其中以hal開頭的文件都屬于HAL,以svc開頭的文件都屬于Service組件。由于前面課程已經一步一步地帶讀者實現了部分HAL API,故不展開講解,后續課程將重點講解Service組件和Task。 <br/> ## **任務管理服務 svc_task** svc\_task提供任務管理服務,是整個框架運轉以及調度的核心,使用了消息隊列的設計方式,可以添加或刪除周期性或非周期性的任務。svc\_task.h文件的代碼如下: ### ``` #ifndef __SVC_TASK_H__ #define __SVC_TASK_H__ #include <stdint.h> /* 最大的任務數量為10個 */ #define SVC_TASK_MAX (10) /* * 初始化 */ void svcTaskInit(); /* * 新增任務 * * @param interval - 多少毫秒(ms)后到期執行此任務 * @param repeat - 是否重復執行此Task:1表示重復執行,0表示不重復 * @callback - 回調函數,到期后自動執行此函數 * @args - 傳給回調函數的參數 * @Return: * 0xFF : 錯誤 * 0 ~ (SVC_TASK_MAX - 1) : Task ID */ uint8_t svcTaskAdd(uint16_t interval, uint8_t repeat, void (*callback)(uint8_t, void *), void *args); /* *刪除指定的任務 *@param tid - 待刪除的Task的ID */ void svcTaskRemove(uint8_t tid); /* *查看有沒有需要執行的任務,如有則執行 *@param tick - tick */ void svcTaskPoll(uint16_t tick); #endif /* __SVC_TASK_H__ */ ``` <br/> ## **SDK 使用示例** 接下來通過一個簡單的例子直觀地了解SDK的使用方式。 <br/> **1. 創建測試任務** 筆者在工程的根目錄中新建了task\_test.h和task\_test.c文件,task\_test.h聲明初始化該任務的函數接口給到main函數進行初始化,task\_test.h內容如下: ``` #ifndef __TASK_TEST_H__ #define __TASK_TEST_H__ void taskTestInit(void); #endif /* __TASK_TEST_H__ */ ``` <br/> task\_test.c是任務具體內容的實現(每隔2秒輸出消息給串口)代碼如下: ``` #include "task_test.h" #include "svc_task.h" #include "svc_log.h" static void taskTestRunner(uint8_t, void *); /* *測試任務任務初始化 */ void taskTestInit() { /*一直重復進行:2s后執行回調函數taskTestRunner*/ svcTaskAdd(2000, 1, taskTestRunner, 0); } /* *回調函數,定義此任務的具體工作內容 */ void taskTestRunner(uint8_t id, void *args) { /* 記錄日志消息 */ svcLogWrite((uint8_t *)"task-test running...\n"); } ``` 上述代碼定義了一個測試任務,該任務的內容是僅僅是記錄日志消息,并且被設定為每隔兩秒執行一次。 ### 日志記錄函數svcLogWrite由svc\_log組件提供,在svc\_log.h中定義并在svc\_log.c中實現,其工作內容是把日志消息傳遞給 HAL 層的 Uart 并輸出。 <br/> **2. 編寫主函數** 打開main.c文件,代碼如下: ### ``` #include "main.h" #include "task_test.h" #include "svc_log.h" #include "svc_task.h" #include "hal_led.h" #include "hal_uart.h" #include "hal_system.h" static void halInit(void); static void svcInit(void); static void taskInit(void); int main(void) { halInit();//HAL初始化 svcInit();//Service組件初始化 taskInit();//Task初始化 while (1) { halSystemDelayUs(1000);//延遲1毫秒 svcTaskPoll(1);//查看有沒有需要執行的任務,如有則執行 } } /* *HAL初始化 */ void halInit() { halSystemInit();//系統初始化 halUartInit(115200);//串口初始化 halLedInit();//LED初始化 //如果需要使用更多硬件資源,需要在這里增加更多初始化 } /* *Service組件初始化 */ void svcInit() { svcTaskInit();//任務管理服務器初始化 svcLogInit();//日志服務初始化 //如果需要使用更多Service組件,需要在這里增加更多初始化 } /* *Task初始化 */ void taskInit() { taskTestInit();//測試任務初始化 //如果需要使用更多Task,需要在這里增加更多初始化 } ``` <br/> **代碼測試** 1.編譯鏈接工程代碼,把生成的Hex文件燒錄到開發板中。 ### 2.把STM32開發板的第1、2、3和4打到右邊,第5和6位打到左邊,如圖所示。 ![](https://img.kancloud.cn/58/9a/589a66f16f8ca111d36b54fac452805c_1076x1045.png =250x) ### 3.使用Micro USB線連接開發板到電腦,然后打開串口助手并做好相關配置,可以看到每隔 2 秒打印日志消息,如圖所示。 ![](https://img.kancloud.cn/bf/43/bf43a2f3b7d47c247ed3697977b43aa6_752x666.png =500x) <br/> <br/> ## **商務合作** 如有以下需求,可掃碼添加管理員好友,注明“**商務合作**” * 項目定制開發,技術范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等; * 入駐平臺,成為講師; * 接項目賺外快; * 善學坊官網:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](images/screenshot_1637114207608.png =150x) (非商務合作**勿擾**,此處**非**技術支持)
                  <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>

                              哎呀哎呀视频在线观看