RTOS概念及线程的引入

目录

RTOS的概念

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

程序简单示例

提出问题


RTOS的概念

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

妈妈要一边给小孩喂饭,一边加班跟同事微信交流,怎么办? 对于单线条的人,不能分心、不能同时做事,她只能这样做:

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

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

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

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

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

RTOS的意思就是:Real-Time operating system,实时操作系统

我们使用的Windows也是操作系统,被称为通用操作系统,使用Windows时,我们经常碰到程序卡死,停顿的现象,日常生活中这可以忍受。

但是在电梯系统中,你按住开门键时如果没有即刻响应,即使只是慢个1秒,也会夹住人。

在专用的电子设备中,实时性很重要

程序简单示例

// 经典单片机程序
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();
}
}

提出问题

 什么叫做线程?回答这个问题之前,先想想怎么切换线程?怎么保存线程?

线程是函数吗?函数需要保存吗?

函数在Flash中,不会被破坏,无需保存

函数执行到哪?需要保存吗?

需要保存

函数里用到了全局变量,全局变量需要保存吗?全局变量在内存上,还能保存到哪里去?

全局变量无须保存

函数里用到了局部变量,局部变量需要保存吗?

局部变量保存在栈里,也是在内存里,只要避免栈不被破坏即可,局部变量无需保存

运算的中间值需要保存吗?中间值保存在哪里?

在CPU的寄存器里,另一个线程也要用到CPU寄存器,所以CPU寄存器需要保存

函数运行了哪里?

它也是一个CPU寄存器,名为“PC”

汇总:CPU寄存器需要保存!

保存在哪里?

保存在线程的栈里

怎么理解CPU寄存器,怎么理解栈?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值