<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之旅 廣告
                >[success] **技術支持說明** > 1.**客服**提供簡單的技術支持,一般自主學習為主 > 2.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/nb-iot) > 3.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 本節課將講解基于SDK創建并執行多個任務。 ### 打開本節課配套的工程,如下圖所示。 ![](https://img.kancloud.cn/03/3a/033ab1142e03eb0ed95d92c11f31cf81_346x699.png =250x) ### 本節課配套工程在上節課的基礎上新增了一些服務和任務。 <br/> ## **svc_plugins服務** 插件服務svc\_plugins用于提供一些零碎的服務,例如反轉LED狀態、在顯示器上顯示一些特性信息等。svc\_plugins.h代碼如下: ### ``` #ifndef __SVC_PLUGINS_H__ #define __SVC_PLUGINS_H__ #include <stdint.h> /* *插件服務初始化 */ void svcPluginsInit(void); /* *反轉LED燈的亮滅狀態 */ void svcPluginsToggleLed(void); /* *在顯示器中顯示內容 *@param line1 - 第1行的內容 *@param line2 - 第2行的內容 *@param line3 - 第3行的內容 *@param line4 - 第4行的內容 */ void svcPluginsLcdWrite(const uint8_t *line1, const uint8_t *line2, const uint8_t *line3, const uint8_t *line4); #endif /* #ifndef __SVC_PLUGINS_H__ */ ``` <br/> ## **task_test** 上節課已經講解過Task任務,其任務內容是每隔2秒記錄日志信息,這里對其稍微修改了一下,修改后的代碼如下: ### ``` void taskTestRunner(uint8_t id, void *args) { svcLogWrite((uint8_t *)"Task[TEST] Running...\n"); } ``` <br/> ## **task_led** task\_led任務內容是每個1秒反轉LED的狀態,task\_led.c的代碼如下: ### ``` #include "task_led.h" #include "svc_plugins.h" #include "svc_task.h" static void taskLedRunner(uint8_t, void *); /* *LED任務初始化 */ void taskLedInit() { /*一直重復進行:1s后執行回調函數taskLedRunner*/ svcTaskAdd(1000, 1, taskLedRunner, 0); } /* * 回調函數,定義此任務的具體工作內容 */ void taskLedRunner(uint8_t id, void *args) { /* 反轉LED燈的亮滅裝狀態 */ svcPluginsToggleLed(); } ``` <br/> ## **task_uart** task\_uart任務的工作內容是每隔1秒記錄日志內容,task_uart.c的代碼如下: ### ``` #include "task_uart.h" #include "svc_log.h" #include "svc_task.h" static void taskUartRunner(uint8_t, void *); /* * Uart任務初始化 */ void taskUartInit() { /*一直重復進行:1s后執行回調函數taskUartRunner*/ svcTaskAdd(1000, 1, taskUartRunner, 0); } /* *回調函數,定義此任務的具體工作內容 */ void taskUartRunner(uint8_t id, void *args) { /* 記錄日志信息 */ svcLogWrite((uint8_t *)"Task[UART] Running...\n"); } ``` <br/> ## **task_lcd** task\_lcd任務的工作內容是每隔1秒刷新顯示器的顯示內容,task_lcd.c的代碼如下: ``` #include "task_lcd.h" #include "svc_task.h" #include "svc_plugins.h" #include <string.h> #include <stdio.h> static void taskLcdRunner(uint8_t, void *); /* *顯示器任務初始化 */ void taskLcdInit() { /*一直重復進行:1s后執行回調函數taskLcdRunner*/ svcTaskAdd(1000, 1, taskLcdRunner, 0); } /* *回調函數,定義此任務的具體工作內容 */ void taskLcdRunner(uint8_t id, void *args) { static int count = 0; char msg[16]; sprintf(msg, "Count=%d", count++); svcPluginsLcdWrite((uint8_t *)"TASK[LCD]", (uint8_t *)"", (uint8_t *)msg, (uint8_t *)""); } ``` <br/> ## **編寫Main函數** main.c的代碼如下: ``` #include "main.h" #include "task_lcd.h" #include "task_uart.h" #include "task_led.h" #include "task_test.h" #include "svc_plugins.h" #include "svc_log.h" #include "svc_task.h" #include "hal_oled12864.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();//任務初始化 //每個1毫秒查看有沒有任務需要執行 while (1) { halSystemDelayUs(1000); svcTaskPoll(1); } } /* *HAL初始化 */ void halInit() { halSystemInit();//系統初始化 halUartInit(115200);//串口初始化 halLedInit();//LED初始化 halOLED12864Init();//顯示器初始化 //如果需要使用更多硬件資源,需要在這里增加更多初始化 } /* *Service組件初始化 */ void svcInit() { svcTaskInit();//任務管理服務初始化 svcLogInit();//日志服務初始化 svcPluginsInit();//插件服務初始化 //如果需要使用更多Server組件,需要在這里增加更多初始化 } /* * 各個任務初始化 */ void taskInit() { taskTestInit(); taskLedInit(); taskLcdInit(); taskUartInit(); //如果需要使用更多Task,需要在這里增加更多初始化 } ``` ## **代碼測試** * 編譯鏈接工程代碼,把生成的Hex文件燒錄到開發板中; ### * 按如圖所示把開發板的撥碼開關的第1~4位打到右邊,第5、6位打到左邊; ![](https://img.kancloud.cn/34/9c/349cceae4177926416445b6daf932d24_664x827.png =200x) ### * 把OLED顯示器按如圖所示插入到開發板中 ![](https://img.kancloud.cn/05/2e/052e0fcb904938ddd881d51616ec73fb_2736x1427.png =350x) >[danger] 注意,開發板與顯示器是右邊對齊。 ### * 使用USB線連接開發板到電腦,然后打開串口助手,可以看到、日志消息,如圖所示。 ![](https://img.kancloud.cn/eb/64/eb64fdd4c4f6885871575f0c11fc5ef5_1019x746.png =500x) ### * 同時,在開發板上可以看到LED閃爍、顯示屏不斷地刷新,如圖所示。 ![](https://img.kancloud.cn/f4/80/f48086d2ba140ab94dac98621937fca6_2090x2408.png =300x) <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>

                              哎呀哎呀视频在线观看