RTOS概念及线程的引入

news/2024/11/29 11:31:52/

目录

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寄存器,怎么理解栈?


http://www.ppmy.cn/news/3985.html

相关文章

【java】java JSR 269 自定义注解实战 Lombok @Data注解

1.概述 本节会演示一个实际的例子,使用JSR 269 API为类中的字段自动生成get、set 方法。首先定义一个自定义注解类Data,如下所示。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import

项目里接入了MQ消息中间件以后,我摸鱼的时间更长了~

V-xin:ruyuanhadeng获得600页原创精品文章汇总PDF 一、前情回顾 之前给大家聊了一下,面试时如果遇到消息中间件这个话题,面试官上来可能问的两个问题: 你们的系统架构中为什么要引入消息中间件?系统架构中引入消息中…

点云中点法向量,点拟合的直线,点拟合的平面

点云中点法向量 计算步骤: 找到点pi相邻点集合S所有点Vi,然后去中心化,并构造协方差矩阵,公式如下: 二维点云该点曲率计算方法: 三维点云该点曲率计算方法: 最小特征值对应的特征向量就是点的法向量 Eigen::Vector2d ComputeNormal(std::v…

S3 Drive支持以及FIPS 140-2兼容性

S3 Drive支持以及FIPS 140-2兼容性 在Windows Arm64上运行-添加了在Microsoft Windows for Arm64上的功能。无需额外下载,安装程序将为您的系统选择正确的驱动程序和库。 现在符合FIPS 140-2。 现在,您可以使用新的CacheOnlyFiles设置阻止上载临时(或其他…

遇到华为防火墙双机热备故障,可以用这份笔记排查就行!

1、为什么原主用防火墙抢占后业务中断 如果主备切换后业务正常,原主用防火墙抢占后业务中断,通常是因为路由尚未收敛,或者会话表备份不完整。另外,某些交换机整机故障后,在重新启动的过程中,接口可能反复U…

面试怎么回答MySQL索引问题,看这里

前言 小A在宿舍里跟哥们开五黑打排位中,突然收到女神小美的消息:“小A,我今天面试碰到索引问题了,我没回答好”。小A顾不上游戏抓紧回复到:“到你宿舍某某咖啡店吧,我帮你一起看下”。 小A抓紧时间换了衣…

数字货币市场风暴肆虐,币圈人应该把握哪些新的赛道机遇

11月11日(周五)美股盘前,曾经为全球第二大加密货币交易所FTX在推特发布了申请破产保护的声明,创始人SBF已经辞去CEO职务。据声明,FTX已经任命John J. Ray III 担任CEO,SBF还将协助相关破产事宜。据FTX在推特…

按键控制LED

通过查询原理图 得到 #include "reg52.h" sbit key1 P2^1; sbit led1 P3^7; sbit key2 P2^0; void main() { //查询是否被按下 while(1){ if (key1 0){ led1 0;//灯亮 给P3.7一个低电平 } if(key2 0){ …