<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[success] **技術支持說明** > 1.**客服**提供簡單的技術支持,一般自主學習為主 > 2.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/nb-iot) > 3.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 上節課講解了如何創建日志記錄、LED控制、通過串口發送數據和顯示器顯示信息等任務,這些任務均屬于輸出型任務。本節課將以按鍵輸入為例講解如何創建輸入型任務。 <br/> 打開節課配套的工程,如圖所示。 ![](https://img.kancloud.cn/6b/24/6b24f6b28e7bf67853af8b6104a19f50_346x726.png =250x) <br/> ## **svc_button 服務** svc\_button 服務對按鍵進行抽象,為任務(Task)提供按鍵次數計算服務。svc_button.c代碼如下: ``` #include "svc_button.h" #include "hal_button.h" //記錄按鍵次數計數器 static int svcButtonClickTimesCounter = 0; static void svcButtonOnClick(void); /* *按鍵初始化 */ void svcButtonInit() { /*向HAL設置按鍵回調函數, 前面的課程曾經講解過,需要給按鍵傳入一個回調函數*/ halButtonSetCallback(svcButtonOnClick); } /* *返回按鍵次數 */ int svcButtonClickTimes() { return svcButtonClickTimesCounter; } /* *清0按鍵次數 */ void svcButtonClickTimesClear() { svcButtonClickTimesCounter = 0; } /* *按鍵回調函數,當按鍵被按下時執行此函數 */ void svcButtonOnClick() { //按鍵次數+1 svcButtonClickTimesCounter++; } ``` <br/> ## **輸入型任務task_input** 輸入型任務task\_input的主要工作內容是處理按鍵輸入、接收串口數據等,task\_input.c代碼如下: ``` #include "task_input.h" #include "svc_button.h" #include "svc_log.h" #include "svc_task.h" static void taskInputRunner(uint8_t, void *); void taskInputInit() { /*每隔400毫秒執行1次taskInputRunner*/ svcTaskAdd(400, 1, taskInputRunner, 0); } /* *回調函數,定義此任務的具體工作內容 */ void taskInputRunner(uint8_t id, void *args) { //讀取按鍵次數 int times = svcButtonClickTimes(); //清0按鍵次數 svcButtonClickTimesClear(); if (times == 1) //如果400毫秒內的按鍵次數=1 svcLogWrite((uint8_t *)"TASK[INPUT] single click\n"); else if (times == 2) //如果400毫秒內的按鍵次數=2 svcLogWrite((uint8_t *)"TASK[INPUT] double click\n"); /* 通常,如果在400毫秒內按了按鍵兩下,表示這是雙擊;按了1下,表示這是單擊 */ } ``` <br/> ## **編寫主函數** 打開main.c文件,代碼如下: ``` #include "main.h" #include "task_input.h" #include "task_lcd.h" #include "task_uart.h" #include "task_led.h" #include "task_test.h" #include "svc_button.h" #include "svc_plugins.h" #include "svc_log.h" #include "svc_task.h" #include "hal_button.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(); svcInit(); taskInit(); //每隔1毫秒查看有沒有任務需要執行 while (1) { halSystemDelayUs(1000); svcTaskPoll(1); } } /* HAL */ void halInit() { halSystemInit(); halUartInit(115200); halLedInit(); halOLED12864Init(); halButtonInit(0); } /* Services */ void svcInit() { svcTaskInit(); svcLogInit(); svcPluginsInit(); svcButtonInit(); } /* Tasks */ void taskInit() { taskTestInit(); taskLedInit(); taskLcdInit(); taskUartInit(); taskInputInit();//輸入型任務初始化 } ``` <br/> ## **代碼測試** * 編譯鏈接工程代碼,把生成的Hex文件燒錄到開發板中; * 按如圖所示把開發板的撥碼開關的第1~4位打到右邊,第5、6位打到左邊; ![](https://img.kancloud.cn/34/9c/349cceae4177926416445b6daf932d24_664x827.png =200x) ### * 使用USB線連接開發板到電腦,然后打開串口助手,先后單擊和雙擊PA0按鈕,可以看到如下提示。 ![](https://img.kancloud.cn/de/6b/de6bdeceb9f37be4092aa21d61b2f103_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>

                              哎呀哎呀视频在线观看