精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創作
電子發燒友網>電子資料下載>電子資料>Arduino的現代RTOS和狀態機開源分享

Arduino的現代RTOS和狀態機開源分享

2023-06-27 | zip | 0.00 MB | 次下載 | 免費

資料介紹


傳統的順序 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()

但是這種方法的主要問題是隨著項目復雜性的增加,嵌套ifelse分支的數量迅速增加。這種架構衰退也被稱為“意大利面條代碼”問題。

此外,簡單的非阻塞程序沒有防止中斷和loop()函數之間共享的全局“輸入”損壞的保護措施。這會導致競爭條件

事件驅動的 Arduino 編程

所有這些問題的長期解決方案被稱為“事件驅動編程” ,它具有以下特點:

  • 程序內的所有通信和同步都由專門為異步通信設計的特殊事件對象介導。
  • 事件驅動程序自然分為實際處理事件的應用程序和一般等待事件并將它們分派給應用程序的監督事件驅動基礎設施(框架)。
  • 控制駐留在事件驅動的基礎設施(框架)中,從應用程序開發人員的角度來看,這會導致控制反轉。
  • 應用程序代碼必須在不阻塞或輪詢的情況下處理事件直到完成(一次一個事件) 。

QP/C++ 框架提供了這樣一個事件驅動的基礎架構,它專為深度嵌入式系統設計,例如 Arduino 板。

QP/C++ 可以與各種實時內核一起使用。在QP-Arduino集成中,QP/C++配置了最簡單的協同QV調度器,軟件采用無限事件循環結構,如下圖所示:

pYYBAGNod3OAfmmpAACiwcvn3iE595.png
QP/C++框架內協同QV調度器的結構
?

QV 內核設計中最重要的元素是存在多個具有唯一優先級的事件隊列和分配給每個隊列的“活動對象”。隊列由 QV 調度程序持續監控,每次通過循環時都會選擇最高優先級的非空隊列。調度器找到隊列后,從隊列中提取queue.get()事件(dispatch(e)

QV 內核的另一個特點是它可以很容易地檢測到沒有可用事件的情況,在這種情況下系統可以進入低功耗睡眠模式這使您可以實現更好的電源效率并將 Arduino 軟件應用于低功耗、電池供電的應用程序。(注意:真正的低功耗還需要適當的硬件設計。)

分層狀態機

除了為軟件組件(稱為“活動對象”)的并發執行提供事件驅動的基礎設施外,QP/C++ 框架還提供了現代層次狀態機,用于處理活動對象內的事件。使用狀態機的主要好處是避免了“意大利面條代碼”問題。

建模和自動代碼生成

最后,QP/C++ 框架和高度結構化的分層狀態機編碼方式為可視化建模和自動代碼生成提供了基礎。QP-Arduino 集成包含免費軟件QM 建模工具,它允許您以圖形方式設計活動對象的分層狀態機。下面的屏幕截圖顯示了 QP-Arduino 與狀態機和代碼集成的示例模型。

poYBAGNod3eAImq1AAOavREBwqw286.png
帶有來自 QP-Arduino 集成的示例模型的免費軟件 QM 工具的屏幕截圖。
?

“超越 RTOS

許可

QP-Arduino 集成中的 QP/C++ 框架在開源 GPLv3 許可下獲得許可,并帶有Arduino GPLv3 Exception

例外情況允許您將 QP/C++ 與任何Arduino 認證板一起使用,而無需打開您的專有應用程序代碼。

免費軟件 QM 建模工具根據簡單的 EULA獲得許可。

支持

您可以通過以下方式發布有關 QP-Arduino 軟件的任何問題或意見:

  • 在 Arduino PROJECT HUB 上對該項目的評論

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費