RTOS概念及线程的引入

目录

RTOS的概念

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

程序简单示例

提出问题

RTOS的概念

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

RTOS概念及线程的引入

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

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

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

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

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

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

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

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

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

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

程序简单示例

// 经典单片机程序
void main()
{
while (1)
{
喂一口饭();
回一个信息();
}
}
while (1)
{
喂一口饭();
}
}
回信息() 栈B
{
int b;
while (1)
{
回一个信息();
}
}
void main()
{
create_task(喂饭);
create_task(回信息);
start_scheduler();
while (1)
{
sleep();
}
}

RTOS概念及线程的引入

提出问题

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

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

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

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

需要保存

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

全局变量无须保存

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

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

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

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

函数运行了哪里?

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

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

保存在哪里?

保存在线程的栈里

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

Original: https://blog.csdn.net/qq_43460068/article/details/128334554
Author: ~Old
Title: RTOS概念及线程的引入

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/725989/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球