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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                >[success] **技術支持說明** > 1.**客服**提供簡單的技術支持,一般自主學習為主 > 2.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/nb-iot) > 3.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> ## **SDK 源碼結構** 打開本節課配套的工程,其文件結構如下圖所示。 ![](https://img.kancloud.cn/33/c8/33c8f9a7d33bbbd6da0de017ee9dc56d_364x541.png =250x) ### 其中以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/c文件,task\_test.h代碼如下: ``` #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/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.按如圖所示把開發板的撥碼開關的第1~4位打到右邊,第5、6位打到左邊; ![](https://img.kancloud.cn/34/9c/349cceae4177926416445b6daf932d24_664x827.png =200x) ### 3.使用USB線連接開發板到電腦,然后打開串口助手,可以看到每隔 2 秒打印日志消息,如圖所示。 ![](https://img.kancloud.cn/f7/48/f748ed65fc5436c97f2eb190a23bce88_752x666.png =500x) <br/> <br/> ## **商務合作** 如有以下需求,可掃碼添加管理員好友,注明“**商務合作**” * 項目定制開發,技術范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等; * 入駐平臺,成為講師; * 接項目賺外快; * 善學坊官網:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.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>

                              哎呀哎呀视频在线观看