RTOS的引入

1. RTOS 概念及线程的引入

1.1 RTOS的概念

RTOS的意思是:Real-time operating system,实时操作系统。我们使用的Windows也是操作系统,被称为通用操作系统。使用Windows时,我们经常碰到程序卡死、停顿的现象,日常生活中这可以忍受。但是在电梯系统中,你按住开门键时如果没有即刻反应,即使只是慢个1秒,也会夹住人。在专用的电子设备中,“实时性”很重要。

1.1.1 用人来类比单片机程序和RTOS

在这里插入图片描述

妈妈要一边给小孩喂饭,一边加班跟同事微信交流,怎么办?

对于单线条的人,不能分心、不能同时做事,她只能这样做:

  • 给小孩喂一口饭
  • 瞄一眼电脑,有信息就去回复
  • 再回来给小孩喂一口饭
  • 如果小孩吃这口饭太慢,她回复同事的信息也就慢了,被同事催:你半天都不回我?
  • 如果回复同事的信息要写一大堆,小孩就着急得大哭起来。

这种做法,在软件开发上就是一般的单片机开发,没有用操作系统。

对于眼明手快的人,她可以一心多用,她这样做:

  • 左手拿勺子,给小孩喂饭
  • 右手敲键盘,回复同事
  • 两不耽误,小孩“以为”妈妈在专心喂饭,同事“以为”她在专心聊天
  • 但是脑子只有一个啊,虽然说“一心多用”,但是谁能同时思考两件事?
  • 只是她反应快,上一秒钟在考虑夹哪个菜给小孩,下一秒钟考虑给同事回复什么信息

这种做法,在软件开发上就是使用操作系统,在单片机里叫做使用RTOS。

1.1.2 RTOS程序简单示例
// 经典单片机程序
void main()
{
	while (1)
    {
        喂一口饭();
        回一个信息();
    }
}
------------------------------------------------------
// RTOS程序    
int a;    
喂饭() 栈A
{
    int b = 2;
    int c;
    c = b+2;==> 1. b+2,  2. c = new val
    ---------------> 切换
    while (1)
    {
        喂一口饭();
    }
}

回信息()  栈B
{
    int b;
    while (1)
    {
        回一个信息();
    }
}

void main()
{
    create_task(喂饭);
    create_task(回信息);
    start_scheduler();
    while (1)
    {
        sleep();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hgwPDJ26-1650266495998)(pic/pre/02_program_with_rtos.png)]

除了rtos还有一种叫前后台系统:

1.1.3 前后台程序简单示例
方法1main()
{
	/*key_isr*   /
	/*touch_isr* /
	/*timer_isr*/
	while(1)
	{
		缺点:如果这些中断的时间长,如果去处理按键中断的时候,其他中断就无法执行,while里面的也会卡住,就会感觉系统特别卡顿
		......
	}
}
方法2:设置flag标志
main()
{
	/*key_isr*   flag=1/
	/*touch_isr* flag=2/
	/*timer_isr*/
	while(1)
	{
		if(flag==1)
		{
			dosomething1();
		}
		if(flag==2)
		{
			dosomething2();
		}
		......
		这又变成轮询方式,前面做某件事情dosomething1,影响到后面的dosomething2,这又退回像之前裸机的代码一样,依次执行某件事情。
	}
}

缺点:对于前后台系统,如果这些中断函数比较复杂,就会影响系统,因为执行该中断的时候无法执行其他中断和while()也无法执行,如果设置flag又回到裸机那样轮询,前后事情会有影响。如果能使用多任务系统,把这些任务创建独立的任务,独立的线程,在感觉上可以同时运行,因为执行的时间快。切换线程快,让人感觉不到系统卡顿。

可以参考这篇文章:RTOS原理与实现

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值