RTA-OS Port Guide学习(一)-基于S32K324 OS

news2024/11/25 21:21:30

文章目录

    • 前言
    • OS Port的安装
    • Port Characteristics
      • Parameters of Implementation
      • Configuration Parameters
        • Stack used for C-startup(SpPreStartOS)
        • Stack used when idle (SpStartOS)
        • Stack overheads for ISR activation (SpIDisp)
        • Stack overheads for ECC tasks (SpECC)
        • Stack overheads for ISR (SpPreemption)
        • Orti22/Lauterbach (Orti22Lauterbach)
        • Orti23/Lauterbach (Orti23Lauterbach)
        • Physical Core Assignment
        • SEMA42 Gate
        • Block default interrupt (AlignUntrustedStacks)
        • Enable stack repositioning
        • Enable untrusted stack check (DistrustStacks)
        • No fast compile (no_fast_compile)
        • Reset Stack Pointer (boot_sp)
        • Reset Address (boot_pc)
        • Handle FPU context (handle_FPU_context)
      • Generated Files
    • 总结

前言

之前使用S32K324双核的OS,生成的lib集成后一直进os shutdown,生成源码后看是在startos时XRDC验证失败导致。目前的处理方法是暂时屏蔽了。本文学习Port Guide文件,里面也描述了这部分的内容。

OS Port的安装

RTA-OS对于不同大类的MCU,提供了对应的OS插件,如果要配置对应的OS,需要安装对应的插件,且安装目录是有要求的,否则会导致isolar工程识别不到。

需要将Port安装到RTA-CAR对应RTA OS的目录下,示例如下:
在这里插入图片描述
正常安装好之后,可以选择对应的芯片的OS,如下图所示:
在这里插入图片描述
也可以使用cmd指令:查看os支持的target:

在os目录下执行:rtaosgen --target:?

查询结果如下:
在这里插入图片描述

Port Characteristics

本节介绍该OS port的特性

Parameters of Implementation

下表列出了OSEK标准需求的最小值,以及RTA-OS支持的最大值
在这里插入图片描述

Configuration Parameters

在Target中,对于该OS有一些特殊的配置,如下所示
在这里插入图片描述

Stack used for C-startup(SpPreStartOS)

调用StartOS()时已经使用的堆栈量。这个值只是添加到操作系统在运行时支持所有任务和中断所需的总堆栈大小上。通常,您使用它来获取链接器必须分配的堆栈量。如果操作系统配置发生变化,该值通常不会改变。

该值可以在start os之前打断点看堆栈的使用量。目前没有配置,也没啥影响

Stack used when idle (SpStartOS)

当操作系统处于空闲状态时(通常在Os_Cbk_Idle()内)使用的堆栈量。这只是调用Os_StartOS()时使用的堆栈与没有任务或中断运行时使用的堆栈之间的差异。如果没有使用Os_Cbk_Idle(),这个值可以为零。它必须包括在空闲状态下调用的任何函数所使用的堆栈。如果操作系统配置发生变化,该值通常不会改变。

该值不一定是定值,如果要填,可以测一下之后填大点,实际不填也没啥影响

Stack overheads for ISR activation (SpIDisp)

从ISR内激活任务所需的额外堆栈量。如果在2类中断中激活了一个任务,并且该任务的优先级高于当前正在运行的任何任务,那么对于某些目标,操作系统可能需要使用比激活优先级较低的任务更多的堆栈。这个值说明了这一点。在大多数目标上,这个值为零。此值用于最坏情况下的堆栈大小计算。当操作系统配置发生重大变化时,该值可能会发生变化。例如标准/扩展,SC1/2/3/4。

目前2类中断需要的堆栈没有配置

Stack overheads for ECC tasks (SpECC)

启动ECC任务所需的额外堆栈量。目前没有配置

Stack overheads for ISR (SpPreemption)

用于服务二类ISR的堆栈数量。目前没有配置

Orti22/Lauterbach (Orti22Lauterbach)

用于生成ORTI 2.2的文件,应该是trace功能用的

Orti23/Lauterbach (Orti23Lauterbach)

用于生成ORTI 2.3的文件,应该是trace功能用的

Physical Core Assignment

配置核的数字,多个核以逗号隔开此处配置为0,1

SEMA42 Gate

选择操作系统应该使用SEMA42外设中的哪个 gate进行跨核锁定。仅用于多核配置。默认是使用gate 0
在这里插入图片描述

Block default interrupt (AlignUntrustedStacks)

如果指定了默认中断,它通常会在意外中断触发时执行。您可以使用此选项阻止此行为。该选项影响未使用的中断源的启用。默认为false

Enable stack repositioning

当存在MPU保护区域粒度问题时,用于支持对不受信任代码的堆栈进行重新排列。参考文档Os_Cbk_SetMemoryAccess。默认为false

Enable untrusted stack check (DistrustStacks)

可以在中断处理程序中放置额外的代码来检测不受信任的代码何时具有非法的堆栈指针值。此外,异常处理程序可以在私有堆栈上运行(参见Os_Cbk_GetAbortStack的文档)。这有一个小的性能开销,所以是可选的。默认为false

No fast compile (no_fast_compile)

默认情况下,RTA-OS将使用多个CPU线程编译RTA-OS库,以减少总体构建时间。默认为false,相当于make中的-j

Reset Stack Pointer (boot_sp)

配置栈顶指针,此处只能配置一个核的,配置为__Stack_start_c0,按道理两个核的栈顶指针是不一样的。此处无法配置两个。后面还会介绍栈的使用

Reset Address (boot_pc)

配置复位向量,此处配置为Reset_Handler

Handle FPU context (handle_FPU_context)

可以在上下文切换期间添加额外的代码,以保留任务和isr使用的浮点寄存器。只有当应用程序中的大多数任务和isr包含FPU指令时才应该使用此选项,否则寄存器设置机制可能更有效。这种机制不使用延迟保存FPU状态。默认为false,不保存FPU上下文

Generated Files

正常情况,OS不会生成源码,而是生成lib文件。
在这里插入图片描述
在这里插入图片描述
主要的lib为RTAOS.a

总结

上述配置只使用了一部分,很多都是按默认配置的,比较关键的就是boot_pc,boot_sp,PhysicalCoreAssignment,下一篇介绍API函数

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

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

相关文章

LLM的范式转移:RL带来新的 Scaling Law

从几周前 Sam Altman 在 X 上发布草莓照片开始,整个行业都在期待 OpenAI 发布新模型。根据 The information 的报道,Strawberry 就是之前的 Q-star,其合成数据的方法会大幅提升 LLM 的智能推理能力,尤其体现在数学解题、解字谜、代…

<Rust>egui学习之小部件(三):如何为窗口UI元件设置布局(间隔、水平、垂直排列)?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第三篇博…

TWRP 使用帮助 第三方Recovery

简介 TWRP 是国外安卓爱好者开发的一款工具全称为:Team Win Recovery Project。是一个由Omnirom开源团队中的Dees Troy主导开发,旨在打造最完美第三方recovery的开源项目。目前主要由包括Dees Troy在内的4个人共同维护。 主要作用包括刷机、备份、救砖 …

C++判断语句(基础速通)ac-wing

倍数 #include <iostream> using namespace std; int a, b; int main() {cin >> a >> b;if (a % b 0 || b % a 0) cout << "Sao Multiplos";else cout << "Nao sao Multiplos";return 0; }零食 #include <iostream>…

通用后台管理系统实战演示(Vue3 + element-plus)汇总篇一

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

菜鸟笔记-001 如何用JavaScript脚本在文字中实现向左或向右插入空格

这是一个网友在线上问我的一个问题&#xff1a; 如何用JavaScript脚本在文字中实现向左或向右插入空格 下图是在文字左边插入了1/2个空格的效果&#xff1a; 那么如何用javascript 实现向左向右插入空格&#xff1f; 其实这个功能&#xff0c;我在实际工作确实很少碰到&#xf…

【王树森】RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练(个人向笔记)

Stacked RNN&#xff08;多层RNN&#xff09; 1. 原理 多个全连接层可以堆叠&#xff0c;多个卷积层也可以堆叠。同理&#xff1a;RNN也可以堆叠形成多层RNN。 如下图所示&#xff1a;对于每一个时刻的输出 h t h_t ht​&#xff0c;它既会作为下一个时刻的输入&#xff0c;…

【C++ 第十八章】C++11 新增语法(1)

1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并…

2016年系统架构师案例分析试题五

目录 案例 【题目】 【问题 1】(10 分) 【问题 2】(6 分) 【问题 3】(9 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Scrum 敏捷开发过程的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 Scrum 是一个增量…

C语言典型例题57

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题4.9 判断整数是否为素数 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题4.9 判断整数是否为素数//【数学知识】素数&#xff1a;一个大于1的自然数&#xff0c;如果只…

我从obsidian 转入 语雀 了

遇到的问题倒是不多&#xff0c;这里记录一下&#xff1a; 1. wiki链接转markdown 用vscode打开ob工作区文件夹&#xff0c;利用正则表达式&#xff0c;替换链接 \[\[(.*?)\]\][$1](../_resources/$1) 我的图片都存在_resources文件夹里 其中ob的json&#xff0c;还有插件的…

JavaEE:多线程代码案例(定时器)

文章目录 定时器介绍Java标准库中的定时器定时器的实现 定时器 介绍 除了之前说过的单例模式,阻塞队列,线程池以外,定时器也是我们日常开发中常用的代码~ 定时器相当于"闹钟".在现实生活中,当闹钟响时,我们就需要去完成一些事情. 同理,在代码中,也经常需要"闹…

力扣406-根据身高重建队列(java详细题解)

题目链接&#xff1a;406. 根据身高重建队列 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&…

【自用16.】C++类

类的构成 类的设计 代码demo #include <iostream> #include <Windows.h> #include <string>using namespace std;// 定义一个“人类” class Human { public: //公有的&#xff0c;对外的void eat(); //方法&#xff0c; “成员函数”void sleep();void …

从零开始搭建本地安全 AI 大模型攻防知识库

本文将系统分享从零开始搭建本地大模型问答知识库过程中所遇到的问题及其解决方案。 1 概述 目前&#xff0c;搭建大语言问答知识库能采用的方法主要包括微调模型、再次训练模型以及增强检索生成&#xff08;RAG&#xff0c;Retrieval Augmented Generation&#xff09;三种方…

51单片机-定时器介绍

时间&#xff1a;2024.8.31 作者&#xff1a;Whappy 目的&#xff1a;手撕51 代码&#xff1a; 现象&#xff1a;

【fastapi】fastapi的hello world

新建这样的目录结构 main.py的代码如下 from fastapi import FastAPI from fastapi.templating import Jinja2Templatesapp FastAPI()# 初始化 Jinja2 模板引擎 templates Jinja2Templates(directory"templates")app.get("/") async def home():contex…

AI编码新时代:免费人工智能助手Blackbox AI

前言&#xff1a; 在当今快速发展的科技时代&#xff0c;人工智能已经渗透到我们生活的方方面面&#xff0c;从智能手机的语音助手到智能家居控制系统&#xff0c;再到在线客服和个性化推荐算法&#xff0c;AI智能工具正变得越来越普遍。它们以其高效、智能和用户友好的特性&am…

已成功入职小米大模型岗!!大模型面试其实挺水的,hr听到这些直接过

小米大模型面试180题 1、目前比较受欢迎的开源大模型有哪些&#xff1f; GPT系列&#xff1a;由OpenAl开发的生成式预训练模型&#xff0c;如 GPT-3。 BERT系列&#xff1a;由Google开发的转换式预训练模型&#xff0c;如BERT、RoBERTa等。 T5系列&#xff1a;由Google开发的基…

Docker 实战加速器(紧急情况!镜像库全面失效,一招解决Docker无法下载)

现象: Docker 加速器原理 Docker 镜像加速器可以帮助你更快地从 Docker Hub 或其他镜像仓库下载镜像,特别是在网络环境较差或访问 Docker Hub 较慢的情况下。常见的加速器提供商包括阿里云、网易云等。 Docker 加速器原理 Docker 镜像加速器通过在本地设置一个代理服务器,…