在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開(kāi)發(fā)>基于Protothread的實(shí)時(shí)多任務(wù)系統(tǒng)設(shè)計(jì)

基于Protothread的實(shí)時(shí)多任務(wù)系統(tǒng)設(shè)計(jì)

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

資料介紹

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

評(píng)論

查看更多

下載排行

本周

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

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
主站蜘蛛池模板: 男人的j桶女人的j视频| 午夜免费视频| 国产在线精品一区二区夜色| 性欧美高清极品猛交| 午夜影院0606| 天天视频观看| 亚洲精品久久久久午夜福| 久久综合社区| 日韩一级免费毛片| 五月婷婷色| 天堂8资源在线官网资源| 电影一区二区三区| 国模最新私拍视频在线观看| 欧美视频在线观在线看| 色天网站| 色五月在线视频| 亚洲成人观看| 长腿丝袜美女被啪啪| 视频二区在线观看| 一区二区三区高清在线| 男人资源| 欧美影欧美影院免费观看视频| 天天干天天插| 天堂网在线新版www| 黄色成人免费网站| 国产午夜精品久久久久| 九草伊人| 免费看一级黄色录像| 爱插综合网| 欧美tube6最新69| 丁香激情六月天| 中国china体内裑精亚洲毛片| 欧美呜巴又大粗又长| 日本不卡视频免费| 五月婷婷 六月丁香| 四虎永久地址4hu紧急入口| 婷婷色站| 久久好色| 国产1区二区| 91噜噜噜| 天天操夜夜操免费视频|