色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>基于Protothread的實時多任務系統設計

基于Protothread的實時多任務系統設計

2017-11-04 | rar | 0.6 MB | 次下載 | 1積分

資料介紹

摘要 在許多系統資源非常緊張的單片機應用中,使用實時操作系統進行任務調度來實現實時多任務系統時,由操作系統帶來的系統開銷往往是不可接受的。通過升級硬件來改善系統資源緊張,意味著成本的增加,降低產品的競爭力。本文介紹采用Protothread在非常小的系統開銷下實現實時多任務系統的方法。
  關鍵詞 Protothread 實時 多任務 線程模型
  嵌入式程序框架一般類似于程序1所示結構:系統中有3個任務——TaskA、TaskB、TaskC,均放置于主循環內,在每一個循環周期內都被執行一次。在這種結構中,能滿足系統實時性要求的條件是: (當且僅當)TaskA 、TaskB、TaskC三個任務的運行時間之和要小于系統實時響應的時間要求。在系統較為簡單、任務運行時間能滿足實時要求的情況下,可以采用這種最簡單、最直接的順序執行方式。但是更多的情形是,系統不僅要對一些事件做出實時響應,并且還要承擔很多其他的非實時任務,并且這些非實時任務的運行時間要遠遠超出了實時響應時間的要求。傳統的這種程序結構顯然不能滿足系統的實時性要求。通常的解決方案是,引入實時操作系統,由操作系統進行任務的調度,優先執行實時任務,達到滿足系統實時性的要求。
  程序1嵌入式程序框架
  void main(void) {
  Init();
  while(1) {
  TaskA();
  TaskB();
  TaskC();
  }
  }
  void Interrupt_1(void) interrupt 1 {
  …
  }
  void Interrupt_2(void) interrupt 2 {
  …
  }
  一般來說,在嵌入式系統開發中引入實時操作系統有諸多優點:
  ◆ 更好地支持多任務,實時性要求能夠得以保障;
  ◆ 程序開發更加容易,也更便于維護;
  ◆ 有利于提高系統的穩定性和可靠性。但是,操作系統的引入也將帶來較多的系統開銷:
  ◆ 實時操作系統往往使用定時器中斷來切換任務,需要消耗不少的CPU處理時間;
  ◆ 實時操作系統在切換任務時需要保護當前任務的執行現場,這就需要為每個任務準備足夠多的RAM空間來實現任務切換;
  ◆ 實時操作系統的本身也需要占用相當數量的Flash空間和RAM空間。
  如果這些系統開銷都在可承受的范圍內,那么采用實時操作系統將是最佳的選擇。但是在很多應用的場合,特別是系統的資源非常緊張的單片機應用,實時操作系統帶來的系統開銷往往是不可接受的。而更換速度更快、RAM更大、Flash更多的CPU意味著成本的增加,且會降低產品的競爭力。當系統中的任務不須進行非常復雜的優先級調度,而且其任務也相對簡單時,引入實時操作系統似有殺雞用牛刀之嫌。
  1 Protothread的特點
  Protothread是專為資源有限的系統設計的一種耗費資源特別少并且不使用堆棧的線程模型,其特點是:
  ◆ 以純C語言實現,無硬件依賴性;
  ◆ 極少的資源需求,每個Protothread僅需要2個額外的字節;
  ◆ 可以用于有操作系統或無操作系統的場合;
  ◆ 支持阻塞操作且沒有棧的切換。
  使用Protothread實現多任務的最主要的好處在于它的輕量級。每個Protothread不需要擁有自已的堆棧,所有的Protothread共享同一個堆棧空間,這一點對于RAM資源有限的系統尤為有利。相對于操作系統下的多任務而言,每個任務都有自已的堆棧空間,這將消耗大量的RAM資源,而每個Protothread僅使用一個整型值保存當前狀態。
  2 Protothread的阻塞運行機制
  以下是一個典型的Protothread程序示例:
  程序2Protothread程序示例
  PT_THREAD(radio_wake_thread(struct pt *pt)) {
  PT_BEGIN(pt);
  while(1) {
  radio_on();
  timer_set(&timer, T_AWAKE);
  PT_WAIT_UNTIL(pt, timer_expired(&timer));
  timer_set(&timer, T_SLEEP);
  if(!communication_complete()) {
  PT_WAIT_UNTIL(pt, communication_complete()‖timer_expired(&timer));
  }
  if(!timer_expired(&timer)) {
  radio_off();
  PT_WAIT_UNTIL(pt, timer_expired(&timer));
  }
  }
  PT_END(pt);
  }
  這是一個非常簡單的無線通信的狀態切換程序①,展開Protothread的宏定義,便可以得到程序3所示的展開代碼:
  程序3Protothread宏展開代碼
  void radio_wake_thread(struct pt *pt) {
  switch(pt﹥lc) {
  case 0:
  while(1) {
  radio_on();
  timer_set(&timer, T_AWAKE);
  pt﹥lc = 8;
  case 8:
  if(!timer_expired(&timer)) {
  return;
  }
  timer_set(&timer, T_SLEEP);
  if(!communication_complete()) {
  pt﹥lc = 13;
  case 13:
  if(!(communication_complete() ||timer_expired(&timer))) {
  return;
  }
  }
  if(!timer_expired(&timer)) {
  radio_off();
  pt﹥lc = 18;
  case 18:
  if(!timer_expired(&timer)) {
  return;
  }
  }
  }
  }
  }
  當Protothread程序運行到PT_WAIT_UNTIL時,判斷其運行條件是否滿足,若不滿足,則阻塞。通過比對程序2和程序3的程序代碼可以得知,Protothread的阻塞其實質就是函數返回,只不過在返回前保存了當前的阻塞位置,待下一次Protothread被調用時,直接跳到阻塞位置執行,再次判斷運行條件是否滿足,并執行后續程序或繼續阻塞。
  3 利用Protothread構造實時多任務系統
  與操作系統下的多任務不同,操作系統下的每個任務可在任意時刻被打斷并阻塞,Protothread僅能在程序員指定位置阻塞。用Protothread實現實時多任務,正是利用了Protothread在指定位置阻塞的特點,讓出執行權限給更高優先級的任務先運行
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統的設計與實現
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 丰满大爆乳波霸奶| 久久理论片| 99久久99久久久精品齐齐鬼色| 乳色吐息在线观看全集免费观看| 韩剧甜性涩爱| 国产69精品久久久久乱码免费| 在教室做啊好大用力| 午理论理影片被窝| 青年医生插曲| 免费无码一区二区三区蜜桃大| 国产高清美女一级毛片久久| jiizzyou欧美喷液| 最近中文字幕高清中文| 亚洲色噜噜狠狠网站| 无套内射纹身女视频| 色女孩综合| 日韩中文网| 色多多污污下载| 色欲AV色欲AV久久麻豆| 色久天| 色淫阁色九九| 台湾果冻传媒在线观看| 少男同志freedeos| 文中字幕一区二区三区视频播放| 欧洲内射VIDEOXXX3D| 人妻熟妇乱又伦精品视频中文字幕| 麻豆AV福利AV久久AV| 国产国产人免费观看在线视频| 亚洲一级电影| 亞洲人妻AV無碼在線視頻| 亚洲最大成人| 91成品视频| YELLOW免费观看2019| 俄罗斯兽交XXXXX在线| 国产AV亚洲一区精午夜麻豆| 国产乱码精品AAAAAAAA| 好看的电影网站亚洲一区| 精品国产精品人妻久久无码五月天 | 久久www免费人成_看片高清| 久久视热频这里只精品| 暖暖 视频 免费 高清 在线观看|