当前位置: 首页 > news >正文

freertos中函数调用和启动第一个任务(栈相关!!!!!!)

本内容仅就一些较难理解的点讲解,请结合其它文章实用

在函数调用时,m3的处理器使用r0-r3共四个寄存器传参,其余的使用栈传参。

但是,如果传入的参数是全局变量,则不需传参,因为全局变量在函数内部是可见的,可直接赋值或修改。

前四个参数使用寄存器传参(全局变量还是用了寄存器,应该是硬件的原因),后三个是全局变量。没有用栈。

函数调用前,sp的值为0x20001708,

进入函数内部,sp的值依然为0x20001708.所以上述可证。

而且,函数在调用时会保存上下文,比如这里是r4-r11,lr.(因为这里可能会用到以上寄存器)其中只有lr的值因为函数调用而发生了改变。从86b变为c9d。在此函数返回后,栈的值依然会是0x20001708,lr最后一个出栈到PC.

返回前sp为0x200016d0,

返回后,栈的值依然会是0x20001708。

对于LR寄存器保存的是函数返回地址。没有问题,但是在启动任务调用时,却不一样了。

对于CM3,使用OS时,有双堆栈机制(在权威指南有讲)。

在启用第一个任务前一直使用的是MSP.


__asm void prvStartFirstTask( void )
{
    PRESERVE8

    /* Use the NVIC offset register to locate the stack. */
    ldr r0, =0xE000ED08
    ldr r0, [r0]
    ldr r0, [r0]

    /* Set the msp back to the start of the stack. */
    msr msp, r0
    /* Globally enable interrupts. */
    cpsie i
    cpsie f
    dsb
    isb
    /* Call SVC to start the first task. */
    svc 0                //通过svc指令启用第一个中断。
    nop
    nop
}

此时的lr保存函数返回地址。

进入异常服务程序。

lr的值为0xfffffff9.为什么是这个值呢?

打开权威指南。

CM3自动保存8个寄存器的值到MSP,所以sp的值降低32个字节。(上面两张图

SP的值变化是,MSP的入栈8个寄存器。

PSR为程序状态寄存器。显示程序的执行情况。

PC ..........

LR,这里的LR不再是程序的返回地址。

这里,将bit3置一,进入线程,即普通模式,

bit2置一,是为了,两个栈互不干扰。

bit0还不清楚。

由上可知。LR在异常服务程序中不再是返回地址。而是用来确定返回后系统的状态。

那么如何正确的执行我们的第一个程序呢,

在这里

我们是系统使用PSP,且退出异常时自动出栈保存的寄存器到当前的栈(PSP).

这里需要注意。入栈时使用的是MSP,在出栈时使用的是PSP,而且,PSP执行的地址是我们所要用的任务栈地址。当出栈PC时,(我们在初始化任务栈时,将PC保存为任务函数指针。)运行第一个任务。

进入定时器任务

因为这是一个死循环。所以,我们在创建任务栈时,有一些寄存器的值是无效的。

比如LR,因为我们进入任务后一直循环,是不会再从这个任务返回的。

可以说,除了PC,和psr,其它的都没用。

这是启动第一个任务,使用SVC,任务切换继续。

相关文章:

freertos中函数调用和启动第一个任务(栈相关!!!!!!)

本内容仅就一些较难理解的点讲解,请结合其它文章实用 在函数调用时,m3的处理器使用r0-r3共四个寄存器传参,其余的使用栈传参。 但是,如果传入的参数是全局变量,则不需传参,因为全局变量在函数内部是可见的…...

【PHP】如何关闭buffer实时输出内容到前端

前言 默认情况下,我们在PHP里使用echo等函数输出的内容,是不会马上发送给前端的,原因是有 buffer 的存在,buffer又分两处,一处是PHP本身的buffer,另一处是Nginx的buffer。只有当buffer满了之后&#xff0c…...

Scala第二章节

Scala第二章节 scala总目录 章节目标 掌握变量, 字符串的定义和使用掌握数据类型的划分和数据类型转换的内容掌握键盘录入功能理解Scala中的常量, 标识符相关内容 1. 输出语句和分号 1.1 输出语句 方式一: 换行输出 格式: println(里边写你要打印到控制台的数据);方式二…...

Spring修炼之路(2)依赖注入(DI)

一、概念 依赖注入(Dependency Injection,DI)。 测试pojo类 : Address.java 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 二、 注入方式 2.1构造器注入 我们在之前的案例已经…...

编写Android.mk / Android.bp 引用三方 jar 包,aar包,so 库

一.前言 在Android10之后,所有项目工程中,官方推荐使用Android.bp去编译构建,以前使用Android.mk构建的项目随着版本迭代升级,慢慢需要变更为Android.bp, 两者的语法都需要去了解并熟练使用。 笔者之前写过Android.mk的…...

【kylin】【ubuntu】搭建本地源

文章目录 一、制作一个本地源仓库制作ubuntu本地仓库制作kylin本地源 二、制作内网源服务器ubuntu系统kylin系统 三、使用内网源ubuntukylin 一、制作一个本地源仓库 制作ubuntu本地仓库 首先需要构建一个本地仓库,用来存放软件包 mkdir -p /path/to/localname/pac…...

为什么 Go 语言 struct 要使用 tags

在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。 除了这些基本信息之外,Go 还提供了 struct tags,它可以用…...

WebGL笔记:WebGL中JS与GLSL ES 语言通信,着色器间的数据传输示例:用鼠标控制点位

用鼠标控制点位 <canvas id"canvas"></canvas><!-- 顶点着色器 --> <script id"vertexShader" type"x-shader/x-vertex">attribute vec4 a_Position;void main() {// 点位gl_Position a_Position;// 尺寸gl_PointSize…...

算法 主持人调度-(双指针+贪心)

牛客网: BM96 题目: 一个主持人只能参加一个活动&#xff0c;至少需要多少主持人 思路: 对start, end排序从小到大&#xff1b;初始化指针l, r 0, 0&#xff1b;start[r]< end[l]时需要累加人数同时r&#xff0c;否则l,r同时移动&#xff1b;直至不再满中l<n &&am…...

Elasticsearch 集群时的内部结构是怎样的?

Apache Lucene : Flush, Commit Elasticsearch 是一个基于 Apache Lucene 构建的搜索引擎。 它利用 Lucene 的倒排索引、查询处理和返回搜索结果等功能来执行搜索。 它还扩展了 Lucene 的功能&#xff0c;添加分布式处理功能以支持大型数据集的搜索。 让我们看一下 Apache Luc…...

IoTDB 在国际数据库性能测试排行榜中位居第一?测试环境复现与流程详解第一弹!...

最近我们得知&#xff0c;Apache IoTDB 多项性能表现位居 benchANT 时序数据库排行榜&#xff08;Time Series: DevOps&#xff09;性能排行第一名&#xff01;&#xff08;榜单地址&#xff1a;https://benchANT.com/ranking/database-ranking&#xff09; benchANT 位于德国&…...

react项目优化

随着项目体积增大&#xff0c;打包的文件体积会越来越大&#xff0c;需要优化&#xff0c;原因无非就是引入的第三方插件比较大导致&#xff0c;下面我们先介绍如何分析各个文件占用体积的大小。 1.webpack-bundle-analyzer插件 如果是webpack作为打包工具的项目可以使用&…...

青藏高原1-km分辨率生态环境质量变化数据集(2000-2020)

青藏高原平均海拔4000米以上&#xff0c;人口1300万&#xff0c;是亚洲九大河流的源头&#xff0c;为超过15亿人口提供淡水、食物和其他生态系统服务&#xff0c;被誉为地球第三极和亚洲水塔。然而&#xff0c;在该地区的人与自然的关系的研究是有限的&#xff0c;尤其是在精细…...

Nature Communications | 张阳实验室:端到端深度学习实现高精度RNA结构预测

RNA分子是基因转录的主要执行者&#xff0c;也是细胞运作的隐形功臣。它们在基因表达调控、支架构建以及催化活性等多个生命过程中都扮演着关键角色。虽然RNA如此重要&#xff0c;但由于实验数据的缺乏&#xff0c;准确预测RNA 的三维空间结构仍然是目前计算生物学面临的重大挑…...

提升您的Mac文件拖拽体验——Dropzone 4 for mac

大家都知道&#xff0c;在Mac上进行文件拖拽是一件非常方便的事情。然而&#xff0c;随着我们在工作和生活中越来越多地使用电脑&#xff0c;我们对于这个简单操作的需求也越来越高。为了让您的文件拖拽体验更加高效和便捷&#xff0c;今天我们向大家介绍一款强大的工具——Dro…...

Vue之transition组件

Vue提供了transition组件&#xff0c;使用户可以更便捷地添加过渡动画效果。 transition组件 transition组件也是一个抽象组件&#xff0c;并不会渲染出真实dom。Vue会在其第一个真实子元素上添加过渡效果。 props render 这里将render分为两部分&#xff0c;第一部分界定真…...

lenovo联想笔记本电脑ThinkPad X13 AMD Gen2(20XH,20XJ)原装出厂Windows10系统镜像

联想原厂Win10系统&#xff0c;自带所有驱动、出厂主题壁纸、系统属性联想LOGO专属标志、Office办公软件、联想电脑管家等预装程序 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;dolg 适用于型号&#xff1a;20XL,20XJ,20XG,21A1,20XK,20XH,20XF,21A0 所需要…...

php导出cvs,excel打开数字超过16变科学计数法

今天使用php导出cvs&#xff0c;在excel中打开&#xff0c;某一个字段是数字&#xff0c;长度高于16位结果就显示科学计数法 超过15位的话从第16位开始就用0代替了 查询了半天总算解决了就是在后面加上"\t" $data[$key][1] " ".$value[1]."\t";…...

CSS 模糊效果 CSS 黑白效果 CSS调整亮度 对比度 饱和度 模糊效果 黑白效果反转颜色

CSS 模糊效果 CSS 黑白效果 CSS调整亮度 饱和度 模糊效果 黑白效果 实现 调整亮度 饱和度 模糊效果 黑白效果 使用 filter1、模糊2、亮度3、对比度4、饱和度5、黑白效果6、反转颜色7、组合使用8、 filer 完整参数 实现 调整亮度 饱和度 模糊效果 黑白效果 使用 filter 1、模糊…...

蓝桥杯 题库 简单 每日十题 day11

01 质数 质数 题目描述 给定一个正整数N&#xff0c;请你输出N以内&#xff08;不包含N&#xff09;的质数以及质数的个数。 输入描述 输入一行&#xff0c;包含一个正整数N。1≤N≤10^3 输出描述 共两行。 第1行包含若干个素数&#xff0c;每两个素数之间用一个空格隔开&…...

观察使用Taotoken后月度账单的明细与token消耗分布情况

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察使用Taotoken后月度账单的明细与token消耗分布情况 对于个人开发者而言&#xff0c;在接入大模型服务后&#xff0c;清晰地了解…...

Cursor Pro破解工具:5步实现永久免费使用的终极指南

Cursor Pro破解工具&#xff1a;5步实现永久免费使用的终极指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial…...

黑苹果WiFi避坑实录:AX201网卡+OC引导的驱动安装与日常使用体验

黑苹果WiFi深度优化&#xff1a;AX201网卡在OC引导下的实战经验与长期使用报告 1. 为什么选择AX201网卡&#xff1a;不拆机的妥协与智慧 在小新Pro13这类紧凑型笔记本上折腾黑苹果&#xff0c;网卡选择往往是第一个拦路虎。AX201作为Intel的WiFi6解决方案&#xff0c;在Windows…...

百度网盘Mac版性能优化:深入解析macOS逆向工程技术实践

百度网盘Mac版性能优化&#xff1a;深入解析macOS逆向工程技术实践 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 百度网盘Mac版性能优化工具是一款基…...

TikTok评论抓取工具:3步轻松获取完整评论数据

TikTok评论抓取工具&#xff1a;3步轻松获取完整评论数据 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 想要从TikTok视频中获取所有评论数据进行分析吗&#xff1f;TikTokCommentScraper是一款强大的开源…...

GraphAgent:大语言模型与图数据融合的智能体框架解析与实践

1. 项目概述&#xff1a;当大语言模型遇上图数据最近在折腾一些涉及复杂关系数据的项目&#xff0c;比如学术文献网络、社交关系分析&#xff0c;甚至是企业内部的知识库梳理。这些场景里&#xff0c;数据不只是孤立的文本或数字&#xff0c;它们之间充满了各种显式的连接&…...

如何利用FanControl.HWInfo插件实现精准风扇控制:终极配置指南

如何利用FanControl.HWInfo插件实现精准风扇控制&#xff1a;终极配置指南 【免费下载链接】FanControl.HWInfo FanControl plugin to import HWInfo sensors. 项目地址: https://gitcode.com/gh_mirrors/fa/FanControl.HWInfo 想要彻底解决电脑风扇噪音与散热平衡的难题…...

从桌面玩具到生产力工具:Dobot Magician机械臂的5个超实用项目实战(含代码)

从桌面玩具到生产力工具&#xff1a;Dobot Magician机械臂的5个超实用项目实战&#xff08;含代码&#xff09; 在创客圈里积灰的Dobot Magician机械臂&#xff0c;可能正等待一次真正的觉醒。这款被许多人当作"高级玩具"的六轴机械臂&#xff0c;实际上隐藏着足以改…...

做电力仪器选显示屏踩坑3年,终于摸透这四个选型标准

我是电力仪器设备厂的生产测试主管&#xff0c;干这行快7年了&#xff0c;前前后后负责过继保测试仪、变比测试仪、互感器校验仪等七八款产品的配件选型&#xff0c;光显示屏就换过四家供应商&#xff0c;踩过强电磁下跳数、低温黑屏、交期拖垮项目的坑&#xff0c;直到用上恒域…...

阿里从蚂蚁收到股息33亿:AI投入加大致后者年利润153亿 同比降60%

雷递网 乐天 5月13日阿里今日发布财报。财报披露&#xff0c;蚂蚁在2026年第一季度给阿里带来的投资收益为3.75亿&#xff08;约5500万美元&#xff09;&#xff0c;较上年同期的17.63亿元下降78.7%。截至2026年3月31日&#xff0c;阿里对蚂蚁集团在全面摊薄基础上的股权为33%。…...