一個簡單而經典的RTX51 Tiny應用實例


    關於RTX51 Tiny嵌入式實時操作系統的描寫敘述請參考本人的上一篇博文RTX51 Tiny實時操作系統學習筆記—初識RTX51 Tiny

本篇博文。我將通過一個實例代碼,帶大家深入了解一下RTX51 Tiny,讓大家認識到RTX51 Tiny的魅力和方便之處。

    以下的代碼將要實現的功能是:使LED0每隔1秒切換一次狀態(ON/OFF)。LED10.7秒切換一次狀態。LED20.4秒切換一次狀態,LED30.2秒切換一次狀態。

下面是我的代碼:

/*******************************************************
	task1 : LED0每  1s改變一次狀態
	task2 :LED1每0.7s改變一次狀態
	task3 :LED2每0.4s改變一次狀態
	task4 :LED3每0.2s改變一次狀態
*******************************************************/
#include <rtx51tny.h>
#include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

sbit LED0 = P2^0;
sbit LED1 = P2^1;
sbit LED2 = P2^2;
sbit LED3 = P2^3;

sbit KEY0 = P1^7;
   
void job0(void) _task_ 0  
{
 	LED0 = 1;
	LED1 = 1;
	LED2 = 1;
	LED3 = 1;		    //關閉四個LED
	 
	os_create_task(1); 	//創建任務1
	os_create_task(2);	//創建任務2
	os_create_task(3);	//創建任務3
	os_create_task(4);	//創建任務4
	os_create_task(5);      //創建任務5
 	os_delete_task(0);	//刪除自己(task0),使task0退出任務鏈表
}  
      
void job1(void) _task_ 1  
{  
	while(1){              
		LED0 = !LED0;
		os_wait(K_TMO, 100, 0);  //等待100個時鍾滴答(ticks),即1s
					 //配置文件ConfTny.A51中INT_CLOCK EQU 10000; default is 10000 cycles
					 //意思是時鍾滴答為10000個機器周期。即10000*1uS=10ms 
    }  
}  
    
void job2(void) _task_ 2  
{  
    while(1){              
		LED1 = !LED1;
		os_wait(K_TMO, 70, 0);	 //等待(延時)0.7s 
	}
}

void job3(void) _task_ 3
{
	while(1){
		LED2 = !LED2;
		os_wait(K_TMO, 40, 0);	 //等待(延時)0.4s
	}
}

void job4(void) _task_ 4
{
	while(1){
		LED3 = !LED3;
		os_wait(K_TMO, 20, 0);	 //等待(延時)0.2s
	}
}

void job5(void) _task_ 5
{
	while(1){
		if(0 == KEY0){		     //推斷按鍵是否按下
			LED3 = 1;			
			os_delete_task(4);	 //按鍵按下時關閉LED3,使task4退出任務鏈表,LED3不再閃爍
		}
	}
} 

代碼分析:

       RTX51 Tiny應用中,我們不須要編寫main函數。由於main函數已經由RTX51 Tiny內核實現了。一個基於RTX51 Tiny的應用程序,都是從任務0(task0)開始執行的。上面的代碼中。除了task0之外,其它的任務都是一個while(1)死循環。task0的作用是負責系統的初始化,上述代碼在這個任務中首先關閉了四個LED。然后通過os_create_task(id)函數創建了五個任務,task0的最后一個步驟是通過os_delete_task(id)函數刪除自身,使task0退出任務鏈表。

task1~task4分別控制LED0~LED3以不同的頻率閃爍。task5用來實現按鍵檢測。當檢測到按鍵按下時。使LED3關閉並使LED3的控制任務退出系統。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM