FreeRTOS的三处栈空间设置分析

1、汇编启动代码中设置栈

在这里插入图片描述

  • 这个栈空间只有300字节,是用于汇编启动代码早期,以及调用C语言的main函数(创建任务等)
  • 在创建好任务,启动调取器后,这个栈空间就被抛弃掉,后续不会使用到
  • 等调度器开启后,运行任务是使用每个任务自己的栈空间,进入中断也有中断专门的栈空间

2、中断处理中设置栈

在这里插入图片描述

  • 在每次进入中断时,先保存任务执行现场到任务自己的栈空间
  • 保存好任务执行现场后,把中断特有的栈空间写到sp寄存器,整个中断处理都使用专门用于中断处理的栈空间

3、任务切换中设置栈

3.1、任务栈空间的申请

参考博客:《freertos任务调度机制深度分析(以RISC-V架构为例)》;

3.2、任务栈空间的切换

在这里插入图片描述
在这里插入图片描述

4、关于三处栈空间的思考?

在这里插入图片描述

  • 启动时使用300字节的临时栈空间,当开启任务调度器后,这300字节的栈空间边被丢弃,后续不会再使用
  • 开启任务调度后,进入中断先把现场保存到任务栈空间,然后切换到中断独有的栈空间进行中断处理,在返回中断前,从任务栈空间恢复现场
  • 疑问:
    • 启动时的300字节临时栈空间,就在启动时使用过一次,这不是会造成300字节的资源浪费?为什么不在启动开始就直接使用中断独有的栈空间?
    • 我在启动代码里测试,在start.S中直接使用中断处理特有的栈空间,也是可以正常运行的,所以我认为是300字节的临时栈空间不是必须的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/239227.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

星际飞船大战

欢迎来到程序小院 星际飞船大战 玩法:滑动鼠标控制方向,点击鼠标左键射击,生命值100分,被敌船击中减去20, 5次生命复活机会,统计分数,快去星际飞船大战吧^^。开始游戏https://www.ormcc.com/pl…

Dijkstra求最短路 II(堆优化Dijkstra算法)

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。 请你求出 11 号点到 n 号点的最短距离,如果无法从 11 号点走到 n 号点,则输出 −1−1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含…

鱼骨探矿的题解

原题描述: 题目描述: 众所周知,《我的世界》中一种非常流行的探矿方式就是鱼骨探矿。 我的世界的地图可以看作一个的正方形世界。 经过初步探测,在第 i 行,[li, ri] 区间内可能存在宝藏。为了探索效率,…

C# | 对比不同种类的锁

文章目录 C# 对比不同种类的锁异同点对比表使用方法lock语句Monitor类Mutex类Semaphore类ReaderWriterLock类 结语 C# 对比不同种类的锁 Hi,在C#编程中,想要保护共享资源,通常会用到各种类型的锁。今天我们就来一起看看C#中不同种类的锁&…

geolife 笔记:将所有轨迹放入一个DataFrame

单条轨迹的处理:geolife笔记:整理处理单条轨迹-CSDN博客 1 加载数据 import pandas as pd import numpy as np import datetime as dt import osdata_dir Geolife Trajectories 1.3/Data/ 1.1 列出所有文件夹 dirlist os.listdir(data_dir) dirlist…

基于Qt开发的闹钟

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);speecher new QTextToSpeech(this); }Widget::~Widget() {delete ui; }//定时器超时时,自动执行的…

Ubuntu22.04中用户的全名

概要: 用户的全名有别于用户名username username可以理解为账户名,或者说用户ID,用于确定身份,显然是必需的 用户全名则不是必需的,用户全名也叫做注释,是一种辅助信息,如果没有填写用户全名…

docker 资源控制

Docker的资源控制 对容器使用宿主机的资源进行限制,如cpu,内存,磁盘I/O Docker使用linux自带的功能cgroup(control grouos)是linux内核系统提供的一种可以限制,记录,隔离进程组使用的物理资源 Docker借助这个机制&…

MySQL执行流程_执行一条select语句,期间发生了什么

文章目录 执行一条select语句,期间发生了什么MySQL执行流程第一步:连接器第二步:查询缓存第三步:解析SQL第四步:执行SQL 执行一条select语句,期间发生了什么 MySQL执行流程 server层负责建立连接、分析和执…

Banana Pi BPI-R4 SBC/路由器推出,带双 10G SFP+ 端口+Wifi7支持

Banana Pi BPI-R4 wifi7路由器开发板 香蕉派 Banana Pi BPI-R4 根据著名Banana Pi品牌背后的公司Sinovoip提供的初步信息,他们即将推出的Banana Pi BPI-R4路由器板目前已经正式发售。与之前的 Banana Pi R3 板相比,这在规格上将有显着提升。这就是我们…

99基于matlab的小波分解和小波能量熵函数

基于matlab的小波分解和小波能量熵函数,通过GUI界面导入西储大学轴承故障数据,以可视化的图对结果进行展现。数据可更换自己的,程序已调通,可直接运行。 99小波分解和小波能量熵函数 (xiaohongshu.com)https://www.xiaohongshu.co…

【离散数学】——期末刷题题库( 二元关系)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

eclipse的日志文件放在什么位置

eclipse的日志文件放在<workspace的目录>/.metadata目录下面&#xff0c;例如&#xff1a;

Java基础语法之访问修饰限定符

private 表示私有的&#xff0c;只能在同一个包中的同一个类使用 像这样就是在同一个包中的不同类用了private修饰的变量&#xff0c;这是非法的&#xff0c;那到底该如何给a赋值呢&#xff1f;可以在定义时就赋值&#xff0c;但这样的代码就没有可操作性&#xff0c;所以我们…

Nginx的location匹配和rewrite重写

一、location匹配 常用的正则表达式 ^ &#xff1a;匹配输入字符串的起始位置 $ &#xff1a;匹配输入字符串的结束位置 * &#xff1a;匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”&#xff1a;匹配前面的字符一次或多次。如“ol”能匹配“ol”及“oll…

java--HashMap、LinkedHashMap、TreeMap底层原理

1.HashMap集合的底层原理 ①HashMap跟HashSet的底层原理是一模一样的&#xff0c;都是基于哈希表实现的。 ②实际上&#xff1a;原来学的Set系列集合的底层原理就是基于Map实现的&#xff0c;只是Set集合中的元素只要键数据&#xff0c;不要值数据而已。 2.哈希表 ①JDK8之前…

原创度检测,在线文章原创度检测

原创度检测&#xff0c;作为数字时代中内容创作者和学术界广泛关注的话题&#xff0c;正逐渐成为保障知识产权、促进创新发展的不可或缺的工具。今天&#xff0c;我们将深入介绍原创度检测的定义、意义、技术原理、应用领域以及未来趋势。 一、什么是原创度检测&#xff1f; 原…

社区分享|宋月冉:大数据下的联邦学习隐私安全问题

“隐语”是开源的可信隐私计算框架&#xff0c;内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择&#xff0c;提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 本文根据隐语开源社区 Contributor 西安电子科技大学网络与信息…

Gemini与GPT-4的巅峰对决:AI界的双壁之战

随着人工智能技术的飞速发展&#xff0c;AI领域的竞争越来越激烈。在这个充满挑战与机遇的时代&#xff0c;两个备受瞩目的AI巨头——Gemini Pro和GPT-4&#xff0c;成为了人们关注的焦点。这两者都以其强大的功能和卓越的性能&#xff0c;引领着AI领域的发展潮流。本文将详细介…

【Android】完美解决Cannot resolve method ‘subscribe(Observer<T>)‘

问题截图&#xff1a; 解决方法&#xff1a; 如上图&#xff0c;看我标123的三个地方&#xff0c;2标注的地方提示我们我方法实际返回的值是Observer<Res_GetCellCode>,而我想要返回的结果是&#xff1a;3标记的结果&#xff1a;Observer<Res_QueryCTInfo>&#xf…