AutosarMCAL开发——基于EB ResourceM模块

目录

  • 一、ResourceM模块的作用以及原理
    • 1.ResourceM模块的作用
    • 2.单核系统运行原理
      • a.上电复位
      • b.启动代码执行
      • c.应用程序加载
      • d.应用程序执行
    • 3.代码执行过程
    • 4.内存分配
      • a.地址空间划分
      • b.具体地址分配
      • c.示例说明
    • 4.多核系统运行原理
      • a.MCU架构
  • 二、EB配置介绍
  • 三、总结

一、ResourceM模块的作用以及原理

1.ResourceM模块的作用

  • 硬件平台设置:ResourceM模块允许用户设置硬件平台,通常在下拉框中选择与创建EB工程时选择的硬件平台相关的选项。
  • 多核资源分配:在支持多核的系统中,ResourceM模块负责将不同的硬件资源分配给不同的核心(Core)。例如,可以将ADC(模数转换器)等硬件资源分配给特定的从核,以减轻主核的负载或平衡资源分配。
  • 主核设置:在多核系统中,ResourceM模块还允许用户设置主核,通常是Core0。

2.单核系统运行原理

a.上电复位

  • 当MCU接入电源后,电源电路开始提供稳定的电压。
  • 电源稳定后,MCU内部的复位电路会被触发,确保MCU从一个已知的初始状态开始启动。
  • 所有的CPU寄存器、状态标志和特殊功能寄存器被重置为默认值,例如,通用寄存器被清零,程序计数器(PC)被设置为启动代码的起始地址。

b.启动代码执行

  • 默认堆栈指针:MCU的硬件设计确保在复位后,第一个执行的指令位于固定的内存地址,通常是内部ROM或闪存的开始位置。
  • 系统初始化:启动代码首先执行硬件级别的初始化,包括设置CPU时钟源、时钟分频器、系统总线时序等。
  • 内存检测(可选步骤):启动代码可能会执行内存自检(如RAM测试),确保内存模块正常工作。
  • 外设初始化:启动代码继续配置和启用MCU的外设,如串行接口、定时器、ADC、PWM等。
  • 中断向量表配置:中断向量表被设置,中断优先级可能被配置。
  • 系统参数设置:根据需要,启动代码会配置系统参数,如设置操作系统的堆栈大小、初始化通信接口等。
  • RTOS准备(如果适用):如果系统使用实时操作系统(RTOS),启动代码会初始化RTOS所需的资源和数据结构。

c.应用程序加载

  • 启动代码定位应用程序代码,这通常存储在非易失性存储器(如闪存)中。
  • 校验和验证:启动代码可能执行校验和核对或数字签名验证,以确保应用程序的完整性和安全性。
  • 应用程序代码被复制到RAM中,以便快速执行

d.应用程序执行

  • 启动代码通过跳转到应用程序的入口点(通常是主函数或其他启动例程)来开始执行应用程序代码。
  • 应用程序开始运行,执行用户定义的任务和操作。

3.代码执行过程

  • 取指令:
    根据程序计数器(PC)中的值从程序存储器读出现行指令,送到指令寄存器。
  • 分析指令
    将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。
    如指令要求操作数,则寻找操作数地址。
  • 执行指令:
    根据指令的功能和操作数执行相应的操作。
    更新程序计数器(PC)的值,以便取下一条指令。

4.内存分配

a.地址空间划分

STM32F103的内存地址空间被划分为多个区域,每个区域都有特定的用途和属性。这些区域包括:

  • **代码区:**通常位于内存的低地址段,用于存储程序代码。这个区域可能包括ROM(如果MCU包含内置的ROM)或FLASH(如果MCU使用外部或内置的FLASH存储器来存储程序)。
  • **数据区:**位于代码区之后,用于存储程序运行时需要访问的数据。这个区域通常包括RAM(随机存取存储器)和可能的其他类型的数据存储器。
  • **外设区:**用于映射MCU的外设寄存器。这些寄存器允许软件通过内存访问来控制MCU的外设。

b.具体地址分配

在STM32F103中,具体的地址分配可能因型号和配置而异,但通常遵循以下原则:

  • FLASH地址:
    STM32F103的FLASH存储器通常位于内存的较低地址段,例如从0x08000000开始。
    FLASH存储器用于存储程序代码、常量数据和可能的其他固定数据。
    在MCU复位后,程序计数器(PC)通常从FLASH存储器的起始地址开始读取指令。
  • SRAM地址:
    SRAM(静态随机存取存储器)通常位于FLASH存储器之后,例如从0x20000000开始。
    SRAM用于存储程序运行时需要动态访问的数据,如变量、栈和堆等。
    SRAM的读写速度较快,因此适合用于需要频繁访问的数据。
  • 外设寄存器地址:
    外设寄存器通常映射到特定的内存地址段,这些地址段与SRAM和FLASH地址段是分开的。
    通过访问这些寄存器地址,软件可以控制MCU的外设,如GPIO(通用输入输出)、UART(通用异步收发传输器)、SPI(串行外设接口)等。

c.示例说明

假设我们有一个基于STM32F103的嵌入式系统,其中包含一个LED闪烁程序。这个程序存储在FLASH存储器中,并在MCU复位后由程序计数器开始执行。程序执行过程中,它可能会访问SRAM中的变量来存储LED的状态或计时信息。

  • **FLASH地址:**程序代码存储在FLASH存储器的某个地址段中,例如从0x08000000开始的区域。当MCU复位时,程序计数器从这个地址开始读取指令并执行。
  • **SRAM地址:**程序在运行时需要访问的变量存储在SRAM中,例如从0x20000000开始的某个地址段。这些变量可能包括用于控制LED状态的标志位、用于计时的计数器等。
  • **外设寄存器地址:**当程序需要控制LED时,它会访问与GPIO相关的外设寄存器。这些寄存器映射到特定的内存地址段,例如某个位于0x40021000附近的地址。通过写入这个地址的值,程序可以控制GPIO的输出状态,从而控制LED的亮灭。

4.多核系统运行原理

a.MCU架构

  • 以下分别为英飞凌TC33X与TC39xMCU架构,可见多核MCU与单核MCU区别可以简单理解为CPU数量的区别(多核仲裁机制暂不深究)。大部分MCU架构总的来说可以分为三大部分储存器、CPU、片内总线
  • 在MCU中所有的储存器都会被设定特定的地址段以便访问,包括CPU内部的缓存区域
  • 在多核系统中尽管变量是定义在flash中的,但不同核提高运行速率会将Flash中的数据拷贝至Cache中进行更新以及读取,并且TC3xx系列不会自动写回(将Cache中数据写回至Flash中),因此同一个数据在不同核读取出得值将会不一样,因此在多核系统中对数据的分核也需要注意
  • 多核共享外设寄存器
  • 除了CPU数量不同外以及上述说的问题点外,多核系统与单核系统运行方式并无其他不同,且每个CPU相对独立,因此多核系统为真并行系统
    在这里插入图片描述
    在这里插入图片描述

二、EB配置介绍

  • 这里将会列出对应MCU支持的所有Core
    在这里插入图片描述
  • EB只负责生成对应外设初始化配置,这里分核的意义在于将不同外设放在不同进行初始化,后续操作核也尽可能保持一致。部分外设既需要在设定核初始化也需要在主核初始化,例如TC3xx的adc外设,取决于MCAL SDK包设定。
  • TC3xx EB存在BUG,PWM模块必须分配一个资源在Core0,否则将不生成Config结构体
    在这里插入图片描述

三、总结

本文为博主个人理解总结记录,如有不正,欢迎指正

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

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

相关文章

【LeetCode】返回链表的中间结点、删除链表的倒数第 N 个结点

主页:HABUO🍁主页:HABUO 🌜钱塘江上潮信来,今日方知我是我🌛 1.返回链表的中间结点 题目:给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点&#xff0…

Netty篇(学习前言)

目录 一、为什么使用Netty 1. Netty编程相比NIO编程的优势 2. Netty 相比其它网络应用框架的优势 二、让我们走进Netty 1. 简介 2. 设计目标 3. 主要特点 4. Netty的作者 5. Netty 的地位 6. Netty 的优势 五、Netty版本说明 六、Netty架构设计 1. 线程模型基本介绍…

Ceph 学习指南 集群部署【 cephadm 】

文章目录 引言初识 Server SANServer SAN 和传统存储对比 Ceph 概述Ceph 的架构设计Ceph 的特点Ceph 块存储Ceph 文件系统Ceph 对象存储Ceph 介绍 Ceph 集群部署配置 aliyun 源配置时间同步配置 hosts 文件安装 docker配置免密登录ceph 集群部署ceph1 配置安装 python3安装 cep…

Linux篇(常见入门命令)

目录 一、开启终端 二、Linux命令格式 1. 什么是Linux 的命令? 三、Linux下的命令补全 四、切换用户 五、uname:查看操作系统信息 六、ls:查看目录下文件 1. 用法一 2. 用法二 3. 用法三 七、pwd:显示当前路径 八、cd&…

全面解析:网络协议及其应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 # 全面解析:网络协议及其应用 文章目录 网络协议概述定义发展历程主要优势 主要网络协议应用层协议传输层协议网络层…

02- 模块化编程-006 ADC0808数码显示对比

1、ADC0808 芯片介绍 ADC0808是一款集成的CMOS设备,包含8位模拟至数字转换器、8通道多路复用器和与微处理器兼容的控制逻辑。8位A/D转换器采用逐次逼近作为转换技术。转换器特点包括高阻抗斩波稳定比较器、256R电压分压器、模拟开关树和逐次逼近寄存器。8通道多路复…

【自动化测试】APP UI 自动化(安卓)-本地环境搭建

一、软件准备及版本介绍 软件版本JAVA-SDK1.8.0_181 python 3.10.10 Android SDK Tools 下最新版本即可,无特殊要求 PyCharm 2023.3.5(下最新版本即可,无特殊要求) 二、安装步骤及环境变量配置 2.1 Java安装及配置 1&am…

leetcode912.排序数组的题解

题目描述: 题目要求在不使用任何内置函数的情况下解决问题,时间复杂度为 O(nlog(n))。 笔者使用了快速排序,但是直接使用最原始的快速排序,有些特殊的测试用例会超时。 1)如果数组本身基本有序,则使用原始…

安装Blender并使用

前言 该系列记录了如何用Blenderpro来构建自己的场景数据集,从环境搭建到后期构建数据集的整个流程 本文章是第一部分,BlenderPrc2的安装以及环境配置 部分参考https://blog.csdn.net/weixin_49521551/article/details/121573334 官方文档https://dlr…

json-server的使用(根据json数据一键生成接口)

一.使用目的 在前端开发初期,后端 API 可能还未完成,json-server 可以快速创建模拟的 RESTful API,帮助前端开发者进行开发和测试。 二.安装 npm install json-server //局部安装npm i json-server -g //全局安装 三.使用教程 1.准备一…

MySQL详细安装教程

一、从MySQL官网安装 可以翻译成中文看起来就舒服多了 下载并打开安装包,能看到版本是8.0.36,双击运行或者右键选择打开,打开后是一个安装向导,这个安装向导会先帮我们安装一个 mysql-installer 的程序,再通过该程序安…

qt QErrorMessage详解

1、概述 QErrorMessage是Qt框架中用于显示错误消息的一个对话框类。它提供了一个简单的模态对话框,用于向用户显示错误或警告消息。QErrorMessage通常用于应用程序中,当需要向用户报告错误但不希望中断当前操作时。它提供了一个标准的错误消息界面&…

Vue3安装、创建到使用

vue安装 npm install vuenext # 全局安装 vue-cli npm install -g vue/cli #更新插件 项目中运行 vue upgrade --nextvue create 命令 vue create [options] <app-name> options 选项可以是&#xff1a; -p, --preset <presetName>&#xff1a; 忽略提示符并使用已…

Linux 下执行定时任务之 Systemd Timers

不知道 ECS 因为什么缘故&#xff0c;上面安装的 MySQL 服务老是不定期挂掉&#xff0c;本来想通过 Linux 得 Cron 配置个半小时的定时检测任务&#xff0c;结果一直没有执行&#xff0c;因此又尝试使用了 Systemd Timers 进行了重新配置&#xff0c;简要做个记录。 Systemd Ti…

计算机网络:网络层 —— IP 多播技术

文章目录 基本概念IP多播地址和多播组 IP多播的类型硬件多播将IPv4多播地址映射为多播MAC地址 基本概念 多播&#xff08;Multicast&#xff0c;也称为组播&#xff09;是一种实现“一对多”通信的技术&#xff0c;允许一台或多台主机&#xff08;多播源&#xff09;发送单一数…

OuteTTS:基于纯语言建模的开源文本到语音合成项目,支持语音克隆等多种语音合成任务

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

C语言 | Leetcode C语言题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; int singleNonDuplicate(int* nums, int numsSize) {int low 0, high numsSize - 1;while (low < high) {int mid (high - low) / 2 low;mid - mid & 1;if (nums[mid] nums[mid 1]) {low mid 2;} else {high mid;}}return …

【学习笔记】SAP ABAP——数据类型

SAP ABAP——数据类型 SAP模块介绍数据类型内涵数据类型分类预定义数据类型数据字典数据类型用户自定义数据类型 SAP模块介绍 模块模块名称FI财务会计CO管理会计SD销售分销MM物料管理PM工厂维护HR人力资源PS项目管理BW数据仓库BC系统相关PP生产制造 数据类型内涵 ​ 数据类型…

国产服务器平台离线部署k8s和kubesphere(含离线部署新方式)

"信创&#xff1a;鲲鹏麒麟&#xff0c;ARM64架构&#xff0c;实现K8s和Kubesphere的离线部署&#xff0c;全新方式助力企业高效运维。" 本文将深入探讨如何借助鲲鹏CPU(arm64)和操作系统Kylin V10 SP2/SP3,通过KubeKey制作KubeSphere与Kubernetes的离线安装包&#…

SpringBoot在线教育系统:技术与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…