其他分享
首页 > 其他分享> > 51单片机移植RTX51系统实现多线程功能

51单片机移植RTX51系统实现多线程功能

作者:互联网

一篇文章让你轻松学会单片机跑系统,再也不用LUO奔了。文章内容是从我以前使用STC8A4K64S单片机跑该系统时记录的WORD文档中截图出来的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面一个程序可以让我们真切地体验到跑系统的好处,要是不跑系统,我们没办法仅用一个单片机依靠延时来实现三个灯按不同频率闪烁,因为程序只能一个个延时走完,而不能走到一半就去执行别的程序,而跑系统的好处就是其拥有时间片,即使是完全占用着CPU线程的延时也无法阻挡时间片把线程从一个执行事件中抽出来去执行另一个事件。

控制三个灯按不同频率闪烁,模拟3个线程工作:
#include <stdio.h>
#include <SCT8F.H>
#include <rtx51tny.h>

sbit led1=P2^0;
sbit led2=P4^1;

void Delay1ms(void) //@11.0592MHz
{
unsigned char i, j;

i = 15;
j = 90;
do
{
	while (--j);
} while (--i);

}

void Delaynms(char n)
{
while(n–)
Delay1ms();
}

void job0(void) task 0 //没有main函数,RTX51系统自动从任务0开始执行
{
os_create_task(1);
os_create_task(2);
while(1)
{
led1=0;
Delaynms(300);
led1=1;
Delaynms(300);

}

}

void job1(void)task 1
{

while(1)
{
	led2=0;
	Delaynms(1000);
	led2=1;
	Delaynms(1000);
}

}

void job2(void)task 2
{
while(1)
{
P35=0;
Delaynms(666);
P35=1;
P36=0;
Delaynms(666);
P36=1;
Delaynms(666);
}
}

标签:led1,Delaynms,task,void,51,单片机,while,多线程
来源: https://blog.csdn.net/qq_42289734/article/details/122858662