freeRTOS的第一个任务是如何跑起来的?(以RISC-V架构分析)

news2024/11/14 11:15:21

1、前言

  • 要理解第一个任务是如何跑起来,必须先能理解下面的概念
    • freeRTOS的任务创建、任务切换机制
    • 架构规定的函数调用规范
    • 了解基础的汇编指令
  • 可以参考的资料:
    • 《freertos任务切换的现场保存、恢复(任务栈空间)深度分析(以RISC-V架构为例)》
    • 《freertos任务调度机制深度分析(以RISC-V架构为例)》
    • 《RISC-V架构的函数调用规范和栈布局》
    • 韦东山老师在B站的freeRTOS讲解的视频

2、运行第一个任务的过程

在这里插入图片描述

  • 在创建每个任务的时候,都会调用pxPortInitialiseStack()函数来将必要的信息保存到栈空间中,特别是任务的主体函数入口地址
  • x1寄存器
    • x1寄存器又名ra寄存器,用于保存函数返回地址(是RISC-V架构规定的,不同的架构是不同的)
    • 当函数返回时(C语言是return,汇编是ret),跳转到ra寄存器中保存的地址处执行
  • 开启第一个任务的过程
    • 在初始化任务时,将任务函数的入口地址保存到任务的栈空间
    • 在开启调度器时,已经确定要调度哪个任务,pxCurrentTCB指向要被调度的任务控制块
    • 从任务控制块中取出任务栈空间,并从栈空间中取出任务的函数入口地址存放到ra寄存器中
    • 恢复其他的通用寄存器和变量
    • 最后执行ret返回,此时跳转到ra寄存器中保存的地址处执行,也就是执行任务的函数,至此第一个任务开始运行
    • 第一个任务运行起来后,后续的任务调度就是靠任务调度器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Arduino开发实例-DRV8833电机驱动器控制直流电机

DRV8833电机驱动器控制直流电机 文章目录 DRV8833电机驱动器控制直流电机1、DRV8833电机驱动器介绍2、硬件接线图3、代码实现DRV8833 使用 MOSFET,而不是 BJT。 MOSFET 的压降几乎可以忽略不计,这意味着几乎所有来自电源的电压都会传递到电机。 这就是为什么 DRV8833 不仅比基…

【Matplotlib】科研绘图——折线图

文章目录 1、导入2、定义Font及Style3、设置图像大小及坐标刻度4、数据准备5、自定义draw6、其他设置7、效果图 1、导入 import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages import numpy as np import pandas as pd %…

合肥工业大学计算机试卷和笔记

总结了一些试卷和笔记,但是csdn上不方便上传pdf,所以上传到github了,欢迎Issue和fork 地址: https://github.com/Martin-share/hfut-cs-final-exams-and-note 持续更新-------2024-01-30

企业做新媒体矩阵不可忽视的四大问题

互联网进入下半场,存量市场竞争日益加剧,获客成本不断增加,越来越多的品牌开始数字化转型,而布局社交媒体矩阵则成为了大多数品牌的必然选择。 通过社交媒体的图文、短视频、直播等形式营销推广,不断做深、做透、做细&…

如何override已经存在的约束

文章目录 前言一、如何override已经存在的约束总结 前言 在验证过程中,我们基本都是基于spec,做正常的约束,当我们测特定corner场景的时候,希望能够用新的约束,去override已经存在的约束。 一、如何override已经存在的…

windows下postgresql的安装使用

一、安装 1、安装包安装 1.1 下载exe安装包 选择安装包:官网 或者点击下载:postgresql-12.12-1-windows-x64.exe Tip:此时若报错:There has been an error.An error occured executing the Microsoft VC runtime installer。 参…

性价比之王,65W 2C1A降功率方案隆重推出

随着电子市场发展,现在越来越多的设备都具有快充功能,快充设备越来越普及;单口快充已经很难满足人们的需求,市场对多口快充配件的需求量日益增加。同时随着氮化镓的普及,适配器功率越做越大,功率的合理利用…

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] }

[Bug] [OpenAI] [TypeError: fetch failed] { cause: [Error: AggregateError] } ubuntu20 win10 edge浏览器访问 服务器部署 页面打开后想使用chatgpt报错了 rootcoal-pasi1cmp:/www/wwwroot/ChatGPT-Next-Web# PORT3000 yarn start yarn run v1.22.19 warning package.json:…

c++|类和对象(下)

一、再谈构造函数 1.1初始化列表 在上一章节中,对于类我们可以形象的比喻为房子的图纸,而真正对于类的初始化可以比喻为建造了一个实体房子,即创建对象,对于房子中的各个房间都有特定的位置构造,那么对于类中的成员变…

运维SRE-01 目录结构体系、find

1. Linux目录结构体系 Linux 核心目录的核心文件概述 1) /etc下面 a) /etc/hosts 主机ip地址与域名(主机名)对应关系 b) /etc/hostname 主机名 c) /etc/sysconfig/network-scripts/ifcfg-ens33或ifcfg-eth0 Linux网卡配置文件 d)了解 /etc/i…

Prometheus的语句

1、node_cpu_seconds_total:监控项数据、指标项 2、node_cpu_seconds_total{cpu"0"}:时间序列 node_cpu_seconds_total 监控项数据(指标项) {cpu"0"} 标签 node_cpu_seconds_total{cpu"0"}&…

windows设置openDNS

windows环境搭建专栏🔗点击跳转 win系统环境搭建(十九)——windows设置openDNS 文章目录 win系统环境搭建(十九)——windows设置openDNS1.什么是openDNS?2.openDNS的ip是多少?3.设置DNS3.1 设置…

Android开发学习-中级控件

Drawable Android把所有能够显示的图形都抽象为Drawable类(可绘制的)。 这里的图形不止是图片,还包括色块、画板、背景等。 包含图片在内的图形文件放在res目录的各个drawable目录下,其中drawable目录一般保存描述性的XML文件,而图片文件一…

数据中心IP代理是什么?有何优缺点?海外代理IP全解

海外代理IP中,数据中心代理IP是很热门的选择。这些代理服务器为用户分配不属于 ISP(互联网服务提供商)且来自第三方云服务提供商的 IP 地址,是分配给位于数据中心的服务器的 IP 地址,通常由托管和云公司拥有。 这些 I…

搭建幻兽帕鲁需要什么样的服务器

作为一个开放世界生存制造类游戏《幻兽帕鲁》收获了空前绝后的热度,玩家们在游戏中通过在地图上捕捉收集到的“帕鲁”进行训练,合理利用他们的能力进行战斗,建立自己的家园、开辟新的世界、解锁新的冒险情节,获取更多游戏信息增加…

【JavaEE】UDP协议与TCP协议

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

LabVIEW传感器通用实验平台

LabVIEW传感器通用实验平台 介绍了基于LabVIEW的传感器实验平台的开发。该平台利用LabVIEW图形化编程语言和多参量数据采集卡,提供了一个交互性好、可扩充性强、使用灵活方便的传感器技术实验环境。 系统由硬件和软件两部分组成。硬件部分主要包括多通道数据采集卡…

华为云WAF,开启web网站的专属反爬虫防护罩

背景 从保护原创说起 作为一个原创技术文章分享博主,日常除了Codeing就是总结Codeing中的技术经验。 之前并没有对文章原创性的保护意识,直到在某个非入驻的平台看到了我的文章,才意识到,辛苦码字、为灵感反复试验创作出来的文…

Java学习笔记(十一)——常用类

一、包装类 (一)包装类和基本数据类型的转换 ​编辑 (二)包装类型和String类型的相互转换 (三)Integer类和Character类的常用方法 二、String (一)创建String对象的两种方式 …

Redis核心技术与实战【学习笔记】 - 11.响应延迟的波动问题及解决方案

在 Redis 的实际应用中,有一个非常严重的问题,就是 Redis 突然变慢了。举个例子,在秒杀场景下,一旦 Redis 变慢了,大量的用户下单请求就会被拖慢,也就是说,用户提交了下单申请,确没有…