<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/> 本節課將以串口數據接收為例講解如何創建輸入型任務,打開節課配套的工程,如圖所示。 ![](https://img.kancloud.cn/6b/24/6b24f6b28e7bf67853af8b6104a19f50_346x726.png =250x) > 本節課的工程代碼結構是和上節課的工程源碼結構是一樣的 <br/> ## **擴展插件服務svc_plugins** 前續課程曾講過插件服務svc\_plugins用于提供一些零碎的服務,本節課為其增加一項服務,即指定接收串口數據的回調函數,代碼如下: ### ``` /* * 指定接收串口數據的回調函數 * @param callback - 回調函數,當接收到串口數據時,自動調用此函數處理這些數據 */ void svcPluginsSetUartCallback(void (*callback)(uint8_t byte)) { halUartSetIRQCallback(callback); } ``` <br/> ## **擴展輸入型task_input** 串口接收數據也屬于輸入型的任務,因此把相關處理邏輯也放在 task\_input 中,task\_input.c代碼如下: ### ``` #include "task_input.h" #include "svc_plugins.h" #include "svc_button.h" #include "svc_log.h" #include "svc_task.h" //用于接收到的串口數據 static uint8_t taskInputMsg[128];//串口數據緩沖區(數組) static uint8_t taskInputIndex = 0;//數組下標 static void taskInputOnUart(uint8_t byte); static void taskInputRunner(uint8_t, void *); static void taskInputOnMsgRunner(uint8_t, void *); /* * 輸入型任務初始化 */ void taskInputInit() { /*設置接收到串口數據時的回調函數*/ svcPluginsSetUartCallback(taskInputOnUart); /*每隔400毫秒執行1次taskInputRunner*/ svcTaskAdd(400, 1, taskInputRunner, 0); /*每隔60毫秒執行1次taskInputOnMsgRunner*/ svcTaskAdd(60, 1, taskInputOnMsgRunner, 0); } /* * 回調函數,接收到串口數據時會自動調用此函數 * @param byte - 接收到的串口數據 */ void taskInputOnUart(uint8_t byte) { if (taskInputIndex >= sizeof(taskInputMsg))//如果數組下標大于或等于數據長度 return;//結束本函數 taskInputMsg[taskInputIndex++] = byte;//保存數據到緩沖區中 } /* * 回調函數,定義此任務的具體工作內容 */ void taskInputRunner(uint8_t id, void *args) { int times = svcButtonClickTimes(); svcButtonClickTimesClear(); if (times == 1) svcLogWrite((uint8_t *)"TASK[INPUT] single click\n"); else if (times == 2) svcLogWrite((uint8_t *)"TASK[INPUT] double click\n"); } /* * 回調函數,定義此任務的具體工作內容 */ static void taskInputOnMsgRunner(uint8_t id, void *args) { uint8_t buf[sizeof(taskInputMsg)]; if (taskInputIndex == 0) return;//如果數組下標等于0,表示還沒有接收到數據 //獲取數據 for (uint8_t i = 0; i < taskInputIndex; i++) buf[i] = taskInputMsg[i]; taskInputIndex = 0;//下標歸0 svcLogWrite(buf);//記錄從串口接收到的數據 } ``` <br/> ## **編寫Main函數** mian函數的內容與上節課一樣,無需改動。 <br/> ## **代碼測試** * 編譯鏈接工程代碼,把生成的Hex文件燒錄到開發板中; * 按如圖所示把開發板的撥碼開關的第1~4位打到右邊,第5、6位打到左邊; ![](https://img.kancloud.cn/34/9c/349cceae4177926416445b6daf932d24_664x827.png =200x) ### * 使用USB線連接開發板到電腦,然后打開串口助手。向串口發送消息后,會看到消息又原封不動地發送回來了,如圖所示: ![](https://img.kancloud.cn/e0/30/e030451a06fa2d7ee98ad97cbf8d0a2c_1022x747.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>

                              哎呀哎呀视频在线观看