《第20章_多任務(wù)操作系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《第20章_多任務(wù)操作系統(tǒng)(15頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,1-,*,北京源智天下科技有限公司,聯(lián)系方式:,http:/,21,天學(xué),51,單片機(jī)開發(fā),第二十講:,51,系列單片機(jī)的多任務(wù)操作系統(tǒng),課程安排,RTX-51,實(shí)時(shí)多任務(wù)操作系統(tǒng)簡介,RTX-51 Tiny,的任務(wù)管理,RTX-51 Tiny,的系統(tǒng)函數(shù),RTX-51,與單任務(wù)程序的比較,RTX-51,循環(huán)任務(wù)調(diào)度程序設(shè)計(jì),RTX-51,事件任務(wù)調(diào)度程序設(shè)計(jì),RTX-51,信號(hào)任務(wù)調(diào)度程
2、序設(shè)計(jì),RTX-51,優(yōu)先級(jí)及搶先任務(wù)切換程序設(shè)計(jì),RTX-51,實(shí)時(shí)多任務(wù)操作系統(tǒng)簡介,多任務(wù)操作系統(tǒng)也就是可以運(yùn)行多個(gè)程序的平臺(tái)。,RTX-51,是一種適用于,51,系列單片機(jī)的實(shí)時(shí)多任務(wù)操作系統(tǒng)(,RTOS,)。,RTX-51,實(shí)時(shí)多任務(wù)系統(tǒng),RTX-51 FULL,RTX-51 Tiny,RTX-51,實(shí)時(shí)多任務(wù)系統(tǒng)特點(diǎn),任務(wù)調(diào)度,信息傳遞,中斷,CAN,通信,BITBUS,通信,RTX-51 Tiny,的任務(wù)管理,在,RTX-51 Tiny,中支持,5,種任務(wù)狀態(tài),任何一個(gè)任務(wù)必須處于其中一個(gè)確定的狀態(tài)。,READY,RUNING,WAITING,DELETED,TIMEOUT,RT
3、X-51 Tiny,支持的事件,信號(hào)(,SIGNAL,),超時(shí)(,TIMEOUT,),時(shí)間間隔事件(,INTERVAL,),RTX-51 Tiny,的系統(tǒng)函數(shù),信號(hào)發(fā)送函數(shù),isr_send_signal,信號(hào)標(biāo)志清除函數(shù),os_clear_signal,任務(wù)啟動(dòng)函數(shù),os_create_task,任務(wù)刪除函數(shù),os_delete_task,當(dāng)前任務(wù)號(hào)函數(shù),os_running_task_id,信號(hào)發(fā)送函數(shù),os_send_signal,等待函數(shù),os_wait,等待函數(shù),os_wait1,等待函數(shù),os_wait2,RTX-51,與單任務(wù)程序的比較,簡單的單任務(wù),C51,程序,01#incl
4、ude,02#include,03,int,count=0;,04void main()/,主函數(shù),05,06while(1)/,主循環(huán),07,08count+;/,計(jì)數(shù)器加,1,09,printf(Single,Task:count=%,d,count,);/,輸出,10,if(count,=500),11,12count=0;/,歸零,13,14,15,RTX-51,與單任務(wù)程序的比較,多任務(wù)循環(huán),C51,程序,01#include,02#include,03,int,count0=0;,04,int,count1=0;,05void main()/,主函數(shù),06,07while(1)/,
5、主循環(huán),08,09count0+;/,計(jì)數(shù)器,count0,加,1,10,printf(Single,Process Task0:count0=%dn,count0);,11count1+;/,計(jì)數(shù)器,count1,加,1,12,printf(Single,Process Task1:count1=%dn,count1);,13if(count0=500),14,15count0=0;,16,17if(count1=500),18,19count1=0;,20,21,22,RTX-51,與單任務(wù)程序的比較,多任務(wù),RTX-51,程序,01#include,02#include,03#inclu
6、de,04,int,count0=0;,05,int,count1=0;,06Thread0()_task_ 0 /,任務(wù),0,07,08os_create_task(1);/,創(chuàng)建任務(wù),1,09while(1),10,11printf(Task0:count0=%dn,count0+);/,打印輸出,count0,12if(count0=500),13,14count0=0;,15,16,17,18Thread1()_task_ 1 /,任務(wù),1,19,20while(1),21,22printf(Task1:count1=%dn,count1+);/,打印輸出,count1,23if(co
7、unt1=500),24,25count1=0;,26,27,28,RTX-51,循環(huán)任務(wù)調(diào)度程序設(shè)計(jì),RTX-51,循環(huán)任務(wù)調(diào)度是按照預(yù)先劃分的時(shí)間片來循環(huán)輪流執(zhí)行多個(gè)任務(wù)的。,01#include,02#include,03#include,04Thread0()_task_ 0 /,任務(wù),0,05,06P1=0 x00;/,初始化,07P2=0 x00;,08os_create_task(1);/,創(chuàng)建任務(wù),1,09while(1),10,11P1=P1+1;/P1,端口遞增,12,13,14Thread1()_task_ 1 /,任務(wù),1,15,16while(1),17,18P2=P
8、2+1;/P2,端口遞增,19,20,RTX-51,事件任務(wù)調(diào)度程序設(shè)計(jì),RTX-51,事件任務(wù)調(diào)度是使用事件來實(shí)現(xiàn)多任務(wù)之間切換的調(diào)度方式。,01#include,02#include,03#include,04,int,count0=0;,05,int,count1=0;,06Thread0()_task_ 0 /,任務(wù),0,07,08os_create_task(1);/,創(chuàng)建任務(wù),1,09while(1),10,11printf(Task0:count0=%dn,count0+);/,打印輸出,count0,12os_wait(K_TMO,2);/,暫停兩個(gè)信號(hào),13if(count0
9、=500),14,15count0=0;,16,17,18,19Thread1()_task_ 1 /,任務(wù),1,20,21while(1),22,23printf(Task1:count1=%dn,count1+);/,打印輸出,count1,24os_wait(K_TMO,3);/,暫停三個(gè)信號(hào),25if(count1=500),26,27count1=0;,28,29,30,RTX-51,信號(hào)任務(wù)調(diào)度程序設(shè)計(jì),RTX-51,信號(hào)任務(wù)調(diào)度是使用信號(hào)來完成多任務(wù)之間切換的調(diào)度方式。,01#include,02#include,03#include,04,int,count0=0;,05,in
10、t,count1=0;,06Thread0()_task_ 0 /,任務(wù),0,07,08os_create_task(1);/,創(chuàng)建任務(wù),1,09while(1),10,11printf(Task0:count0=%dn,count0+);/,打印輸出,count0,12if(count0=10),13,14os_send_signal(1);/,向任務(wù),1,發(fā)送信號(hào),15count0=0;,16,17,18,19Thread1()_task_ 1 /,任務(wù),1,20,21while(1),22,23os_wait(K_SIG,0,0);/,等待信號(hào),24printf(Task1:count1
11、=%dn,count1+);/,打印輸出,count1,25,26,RTX-51,優(yōu)先級(jí)及搶先任務(wù)切換程序設(shè)計(jì),搶先任務(wù)切換是根據(jù)不同任務(wù)的優(yōu)先級(jí)來執(zhí)行不同任務(wù)的調(diào)度方式。,01#include,02#include,03#include,04,int,count0=0;,05,int,count1=0;,06Thread0()_task_ 0 /,任務(wù),0,07,08os_create_task(1);/,創(chuàng)建任務(wù),1,09while(1),10,11printf(Task0:count0=%dn,count0+);/,打印輸出,count0,12if(count0=10),13,14os_send_signal(1);/,向任務(wù),1,發(fā)送信號(hào),15count0=0;,16,17,18,19Thread1()_task_ 1 _priority_ 1/,任務(wù),1,20,21while(1),22,23os_wait(K_SIG,0,0);/,等待信號(hào),24printf(Task1:count1=%dn,count1+);/,打印輸出,count1,25,26,性格決定命運(yùn),專注成就人生,源智天下,