RTX-51实时系统(2)

来源:本站
导读:目前正在解读《RTX-51实时系统(2)》的相关信息,《RTX-51实时系统(2)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《RTX-51实时系统(2)》的详细说明。

/***************************************************

*作者:温子祺

*联系方式:wenziqi@hotmail.com

*说明:RTX-51实时系统(2

***************************************************/

【例子】调用Keil自带的RTX-51Tiny实时系统来控制LED灯,不断重复4种不同的流水灯,每100msLED进行操作。

RTX-51实时系统代码如下:

#include"stc.h"

#include"rtx51tny.h"

#defineTASKINIT0//任务ID

#defineLEDCTRLTASK11

#defineLEDCTRLTASK22

#defineLEDCTRLTASK33

#defineLEDCTRLTASK44

#defineLED_PORTP2

/******************************************

*函数名称:Taskinit

*输入:无

*输出:无

*功能:初始化任务

*******************************************/

voidTaskinit(void)_task_TASKINIT

{

os_create_task(TASKINIT);//创建Taskinit任务

os_create_task(LEDCTRLTASK1);//创建LEDCtrlTask1任务

os_create_task(LEDCTRLTASK2);//创建LEDCtrlTask2任务

os_create_task(LEDCTRLTASK3);//创建LEDCtrlTask3任务

os_create_task(LEDCTRLTASK4);//创建LEDCtrlTask4任务

os_send_signal(LEDCTRLTASK1);//向LEDCtrlTask1任务发送信号

os_delete_task(TASKINIT);//删除Taskinit任务

}

/******************************************

*函数名称:LEDCtrlTask1

*输入:无

*输出:无

*功能:流水灯任务1

*******************************************/

voidLEDCtrlTask1(void)_task_LEDCTRLTASK1

{

unsignedchari=0;

while(1)

{

os_wait(K_SIG,LEDCTRLTASK1,0);//等待LEDCtrlTask1任务信号

for(i=0;i<=7;i++)

{

LED_PORT|=1<<i;

os_wait(K_TMO,10,0);//延时100ms

}

os_send_signal(LEDCTRLTASK2);//向LEDCtrlTask2任务发送信号

}

}

/******************************************

*函数名称:LEDCtrlTask2

*输入:无

*输出:无

*功能:流水灯任务2

*******************************************/

voidLEDCtrlTask2(void)_task_LEDCTRLTASK2

{

unsignedchari=0;

while(1)

{

os_wait(K_SIG,LEDCTRLTASK2,0);//等待LEDCtrlTask2任务信号

for(i=0;i<=7;i++)

{

LED_PORT&=~(1<<i);

os_wait(K_TMO,10,0);//延时100ms

}

os_send_signal(LEDCTRLTASK3);//向LEDCtrlTask3任务发送信号

}

}

/******************************************

*函数名称:LEDCtrlTask3

*输入:无

*输出:无

*功能:流水灯任务3

*******************************************/

voidLEDCtrlTask3(void)_task_LEDCTRLTASK3

gt;{

unsignedchari=0;

while(1)

{

os_wait(K_SIG,LEDCTRLTASK3,0);//等待LEDCtrlTask3任务信号

for(i=0;i<=7;i++)

{

LED_PORT|=1<<(7-i);

os_wait(K_TMO,10,0);//延时100ms

}

os_send_signal(LEDCTRLTASK4);//向LEDCtrlTask4任务发送信号

}

}

/******************************************

*函数名称:LEDCtrlTask4

*输入:无

*输出:无

*功能:流水灯任务4

*******************************************/

voidLEDCtrlTask4(void)_task_LEDCTRLTASK4

{

unsignedchari=0;

while(1)

{

os_wait(K_SIG,LEDCTRLTASK4,0);//等待LEDCtrlTask4任务信号

for(i=0;i<=7;i++)

{

LED_PORT&=~(1<<(7-i));

os_wait(K_TMO,10,0);//延时100ms

}

os_send_signal(LEDCTRLTASK1);//向LEDCtrlTask1任务发送信号

}

}

代码分析

在RTX-LED实验代码中存在5个任务:分别是TaskInit、LEDCtrlTask1、LEDCtrlTask2、

LEDCtrlTask3、LEDCtrlTask4。

TaskInit任务负责任务的创建,创建LEDCtrlTask1、LEDCtrlTask2、LEDCtrlTask3、

LEDCtrlTask4这4个控制LED灯任务。当创建这4个任务成功后,在TaskInit任务中删除TaskInit任务。

LEDCtrlTask1任务中的while(1)死循环第一步等待LEDCtrlTask1任务消息,调用os_wait(K_SIG,LEDCTRLTASK1,0)来执行。当接收到LEDCtrlTask1任务消息时,则通过for循环进行LED灯操作,并通过调用os_wait(K_TMO,10,0)进行100ms延时。最后执行发送LEDCtrlTask2任务消息。

LEDCtrlTask2、LEDCtrlTask3、LEDCtrlTask4任务内部函数操作都与LEDCtrlTask1雷同,没有多大的区别。

提醒:《RTX-51实时系统(2)》最后刷新时间 2024-03-14 01:12:30,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《RTX-51实时系统(2)》该内容的真实性请自行鉴别。