資料介紹
傳統的順序 Arduino 編程
傳統的 Arduino 編程模型被稱為“順序編程” ,因為預期的事件序列通常硬編碼在阻塞調用序列中,這些阻塞調用排隊等待預期事件的到達。
例如,在標準的 Arduino Blink 示例中,您期望通過delay()
兩次調用 Arduino 函數在線等待的兩個超時事件序列。
清單 1:Arduino 順序編程示例(標準 Arduino Blink 示例)
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
這種方法適用于簡單的問題,但對于更復雜的項目來說擴展性很差并且很快變得不可行,在這些項目中你需要同時做很多事情,例如以不同的速率閃爍第二個 LED。
根本問題是,當一個順序程序在等待一種事件(例如,時間延遲)時,它不做任何其他工作,也不響應其他事件(例如,不同的時間延遲或按鈕按下) .
Arduino編程無阻塞
由于這些原因,更有經驗的 Arduino 程序避免阻塞(或輪詢)并在線等待事件,例如dealy()
函數。相反,程序僅檢查感興趣的條件(使用顯式if()
語句)并僅在檢測到事件時處理事件。在任何情況下,Arduinoloop()
函數總是快速返回,這使得程序能夠響應其他事件。
這種方法的示例包括使用 Arduinomillis()
函數(例如,參見Arduino 項目“使用 millis() 函數作為使用 delay() 的替代方法” )。
清單 2:無阻塞的 Arduino 編程示例(項目“Using millis() Function as an Alternative to Using delay()” )
void loop() {
ms_from_start = millis();
if (ms_from_start-ms_previous_read_LED1>LED1_interval) {
ms_previous_read_LED1 = ms_from_start;
if (LED1_state == 0) LED1_state = 1;
else LED1_state=0;
digitalWrite(LED1,LED1_state);
}
}
非阻塞 Arduino 程序的基本示例是朝著正確方向邁出的一步,因為非阻塞代碼片段是可組合的。可組合意味著您可以在單個 Arduino函數中將許多此類非阻塞代碼片段(無需修改)組合成代碼。loop()
但是這種方法的主要問題是隨著項目復雜性的增加,嵌套if
和else
分支的數量迅速增加。這種架構衰退也被稱為“意大利面條代碼”問題。
此外,簡單的非阻塞程序沒有防止中斷和loop()
函數之間共享的全局“輸入”損壞的保護措施。這會導致競爭條件。
事件驅動的 Arduino 編程
所有這些問題的長期解決方案被稱為“事件驅動編程” ,它具有以下特點:
- 程序內的所有通信和同步都由專門為異步通信設計的特殊事件對象介導。
- 事件驅動程序自然分為實際處理事件的應用程序和一般等待事件并將它們分派給應用程序的監督事件驅動基礎設施(框架)。
- 控制駐留在事件驅動的基礎設施(框架)中,從應用程序開發人員的角度來看,這會導致控制反轉。
- 應用程序代碼必須在不阻塞或輪詢的情況下處理事件直到完成(一次一個事件) 。
QP/C++ 框架提供了這樣一個事件驅動的基礎架構,它專為深度嵌入式系統設計,例如 Arduino 板。
QP/C++ 可以與各種實時內核一起使用。在QP-Arduino集成中,QP/C++配置了最簡單的協同QV調度器,軟件采用無限事件循環結構,如下圖所示:
QV 內核設計中最重要的元素是存在多個具有唯一優先級的事件隊列和分配給每個隊列的“活動對象”。隊列由 QV 調度程序持續監控,每次通過循環時都會選擇最高優先級的非空隊列。調度器找到隊列后,從隊列中提取queue.get()
事件(dispatch(e)
QV 內核的另一個特點是它可以很容易地檢測到沒有可用事件的情況,在這種情況下系統可以進入低功耗睡眠模式。這使您可以實現更好的電源效率并將 Arduino 軟件應用于低功耗、電池供電的應用程序。(注意:真正的低功耗還需要適當的硬件設計。)
分層狀態機
除了為軟件組件(稱為“活動對象”)的并發執行提供事件驅動的基礎設施外,QP/C++ 框架還提供了現代層次狀態機,用于處理活動對象內的事件。使用狀態機的主要好處是避免了“意大利面條代碼”問題。
建模和自動代碼生成
最后,QP/C++ 框架和高度結構化的分層狀態機編碼方式為可視化建模和自動代碼生成提供了基礎。QP-Arduino 集成包含免費軟件QM 建模工具,它允許您以圖形方式設計活動對象的分層狀態機。下面的屏幕截圖顯示了 QP-Arduino 與狀態機和代碼集成的示例模型。
。“超越 RTOS”。
許可
QP-Arduino 集成中的 QP/C++ 框架在開源 GPLv3 許可下獲得許可,并帶有Arduino GPLv3 Exception。
例外情況允許您將 QP/C++ 與任何Arduino 認證板一起使用,而無需打開您的專有應用程序代碼。
免費軟件 QM 建模工具根據簡單的 EULA獲得許可。
支持
您可以通過以下方式發布有關 QP-Arduino 軟件的任何問題或意見:
- 在 Arduino PROJECT HUB 上對該項目的評論
- 在QP-Arduino 項目網頁上發表評論
- labview狀態機分享 11次下載
- LABVIEW的狀態機實現資料合集 41次下載
- 狀態模式(狀態機)
- 利用狀態機實現對tlc5620dac控制.
- 基于狀態機的汽車電動滑移門系統 8次下載
- 基于Moore型狀態機的交通燈控制系統 34次下載
- 使用Synplify設計安全的VHDL狀態機 12次下載
- 使用獨立于內核的外設構建硬件狀態機 7次下載
- 如何使用FPGA實現序列檢測有限狀態機 12次下載
- 基于有限狀態機的工控系統軟件設計 3次下載
- 狀態機原理及用法 0次下載
- 狀態機代碼生成工具 9次下載
- 基于有限狀態機的工控系統軟件設計
- 如何寫好狀態機
- 狀態機實例(VHDL源代碼)
- 狀態機該怎么監控 310次閱讀
- Spring狀態機的實現原理和使用方法 1681次閱讀
- SaberRD狀態機建模工具介紹(一)什么是狀態機建模 1253次閱讀
- 狀態機怎么上來就錯了?怎么解決? 290次閱讀
- 什么是狀態機?狀態機的種類與實現 7953次閱讀
- 基于事件驅動的有限狀態機介紹 941次閱讀
- 嵌入式中狀態機的設置 991次閱讀
- 如何構建基于狀態機的軟件系統 1420次閱讀
- 狀態機到底是什么 3672次閱讀
- 狀態機概述 如何理解狀態機 1w次閱讀
- 狀態機和組合邏輯的冒險競爭淺析 3876次閱讀
- 利用74LS161實現復雜狀態機 9058次閱讀
- 初學者對有限狀態機(FSM)的設計的認識 4144次閱讀
- 利用狀態機的狀態機實現層次結構化設計 3248次閱讀
- 使用ModelSim自動生成狀態機FSM的狀態轉換圖 1.4w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多