关于嵌入式变量存储位置的思考

        嵌入式软件中的变量存储比较灵活,可以将变量存储在内核中,此时变量的访问最快;也可以将变量存储在ram中,此时变量的访问速度次之;最后可以将变量存储于flash中,此时变量的访问速度最快。(不考虑单片机内核带cache的情况)

        在实际的应用中,可以根据变量的使用情况,将变量分配在不同的存储空间,搭配合适的数据结构,提高程序的运行速度。

1、存储于内核中

1.1 内核寄存器

        在函数调用时,mcu会根据参数的数量将全部或部分形参和局部变量存储在r0,r1,r2,r3等通用寄存器上,方便快速调用。如果形参或局部变量数据过多时会在栈上分配一部分空间用于数据存储。

1.2 特殊寄存器

        如果函数的形参中含有浮点型数据,如果将编译器配置为硬件浮点计算,则此时浮点型数据会被存放于浮点计算专用的寄存器中,用于提高运算速度。

2、存储于ram中

2.1 堆中

        在使用malloc进行动态内存分配时,此时的数据将会被存放在堆上,动态内存分配具有一定的灵活性。

2.2 栈中

        函数在调用时,会将函数的返回地址,局部变量等数据压入栈中,在退出函数时进行数据弹出,完成函数调用。栈是c语言函数调用的基础。

2.3 ram固定地址

        全局变量及声明为static的局部变量会被存储在ram的固定地址中,数据地址固定,比动态内存分配要可靠一些。在安全类产品的应用中会禁用动态内存分配机制。

3、存储于flash中

        声明为const类型的变量,会被存储于flash中,变量值不可改变,可以用于存储不可变的数据,节省ram空间。

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

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

相关文章

v-for中key的原理以及用法

在 Vue.js 中,v-for 指令用于基于源数据多次渲染元素或模板块。当使用 v-for 渲染列表时,为每个列表项提供一个唯一的 key 属性是非常重要的。key 的主要作用是帮助 Vue 跟踪每个节点的身份,从而重用和重新排序现有元素。 先来张原理图&#…

Batch文件中的文件移动指南:使用move命令的深度解析

Batch文件,也称为批处理脚本,是Windows操作系统中一种自动化执行一系列命令的脚本文件。使用Batch文件可以极大地提高工作效率,尤其是在需要重复执行相同命令序列的情况下。move命令是Batch文件中用于移动或重命名文件和目录的基本命令之一。…

开机弹窗缺失OpenCL.dll如何解决?分享5种靠谱的解决方法

在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是“开机提示找不到OpenCL.dll”。那么,这个错误提示到底是怎么回事呢?它又对电脑有什么影响?我们又该如何解决这个问题并预防OpenCL.dll再次丢失呢&#xff1…

基于Ollama Python的本地多模态大模型

0,背景 最近测试Ollama,发现之前直接下载开源模型在我电脑上都跑不动的模型,居然也能运行了(AMD 7840HS核显/32GB内存),突发奇想那些多模态大模型能不能基于Python接口使用,所以决定尝试一下。…

网页用事件监听器播放声音

一、什么是监听器: 在前端页面中,事件监听器(Event Listener)是一种编程机制,它允许开发者指定当特定事件(如用户点击按钮、鼠标悬停、页面加载完成等)发生时执行特定的代码块。简而言之&#x…

用Python实现的10种聚类算法汇总

前言 聚类是一种无监督学习问题。 它经常用来在输入数据的特征空间中寻找分组,例如基于顾客行为将消费者分组。 聚类算法有很多种,没有哪一种聚类算法适用于所有的问题。不过,有必要去探究多种聚类算法,以及每种算法的不同配置…

服务器上VMWare Workstation虚拟机声卡支持

问题:联想服务器没有声卡,Windows 服务器安装了VMWare Workstation,里面的Windows 11虚拟机,我远程桌面上来,没有声卡,但是我想做 声音方面的测试就没办法。 解决办法: 服务器主机上安装虚拟机…

Java 多线程编程:线程的基本概念

在现代计算中,多线程编程是一种常见且重要的技术。Java 提供了强大的多线程支持,使得开发者可以轻松地实现并发编程。本文将详细介绍 Java 中线程的基本概念,包括线程与进程的区别以及线程的生命周期。 线程和进程 首先,让我们了…

5.4符号三角形问题

#include<iostream> #include<stdio.h> using namespace std; int half; int ssum; int cnt0;//减号的个数 int n; int p[100][100]; int countt0; void BackTrack(int s) {if(cnt>half||s*(s-1)/2-cnt>half)return ;if(s>n){countt;return ;}for(int i0;…

RabbitMq教程【精细版一】

一、引言 模块之间的耦合度过高&#xff0c;导致一个模块宕机后&#xff0c;全部功能都不能用了&#xff0c;并且同步通讯的成本过高&#xff0c;用户体验差。 RabbitMQ引言 二、RabbitMQ介绍 MQ全称为Message Queue&#xff0c;消息队列是应用程序和应用程序之间的通信方法。…

在安装HDFS过程中遇见Permission denied

HDFS Shell命令权限不足问题解决 问题 想必有同学在实战Shell的时候&#xff0c;遇到了&#xff1a; Permission denied: userroot, accessWRITE, inode"/":hadoop:supergroup:drwxr-xr-x 这种类似的问题。 问题的原因就是没有权限&#xff0c;那么为什么呢&#…

功能强大的声音模拟合成软件Togu Audio Line TAL-Mod 1.9.7

Togu Audio Line TAL一个虚拟模拟合成器,具有卓越的声音和几乎无限的调制能力。其特殊的振荡器模型能够创建广泛的声音,从经典的单声道到丰富的立体声引线、效果器和焊盘。路由可以使用虚拟跳线电缆来完成。只需连接调制输出以达到调制的目的。之后,您可以调整调制强度。您不…

【SQLmap】常用命令

文章目录 实际使用案例常用命令基本命令数据库指纹识别用户信息用户权限数据库枚举数据导出密码哈希操作系统命令执行文件操作代理和网络参数指定保存恢复自动搜索注入智能模式等级设置自动注入WAF 绕过杂项帮助和支持 SQLmap 是一款开源的自动化 SQL 注入检测和利用工具&#…

时间复杂度与空间复杂度(小白向)

&#x1f916;&#x1f4bb;&#x1f468;‍&#x1f4bb;&#x1f469;‍&#x1f4bb;&#x1f31f;&#x1f680; &#x1f916;&#x1f31f; 欢迎降临张有志的未来科技实验室&#x1f916;&#x1f31f; 专栏&#xff1a;数据结构 &#x1f468;‍&#x1f4bb;&#x1f4…

你真的会udf提权???数据库权限到系统权限 内网学习 mysql的udf提权操作 ??msf你会用了吗???

我们在已经取得了数据库的账号密码过后&#xff0c;我们要进一步进行提取的操作&#xff0c;我们mysql有4钟提权的操作。 udf提权(最常用的)mof提权启动项提权反弹shell提权操作 怎么获取密码操作&#xff1a; 怎么获取密码&#xff0c;通过sql注入获取这个大家都应该知道了&a…

Python-数据分析组合可视化实例图【附完整源码】

数据分析组合可视化实例图 开篇&#xff1a;应女朋友的要求&#xff0c;于是写下了这篇详细的数据可视化代码及完整注释 一&#xff1a;柱状图、折线图横向组合网格布局 本段代码使用了pyecharts库来创建一个包含多个图表&#xff08;柱状图、折线图&#xff09;和网格布局的…

51单片机第22步_interrupt和using关键字

Keil C51中有一些关键字&#xff0c;一定要牢记&#xff0c;它和其它CPU不一样&#xff0c;所以需要记住interrupt和using关键字&#xff0c;以及它后面所跟的数字在程序中的意义。 单独提出来讲&#xff0c;我也和大家一样记不住&#xff0c;那些数字的意义太少&#xff0c;不…

第一周:李宏毅机器学习笔记

第一周学习周报 摘要一、机器学习基础理论1. 什么是机器学习&#xff1f;2. 机器学习“寻找”的函数有哪些类型&#xff1f;3. 机器学习中机器如何“寻找”函数&#xff1f;三步走3.1 第一步&#xff1a;设定函数的未知量&#xff08;Function with Unknown Parameters&#xf…

【高考志愿】冶金工程

目录 一、专业简介 1.1 专业定义 1.2 主要课程 1.3 培养目标 二、就业方向与就业前景 三、报考注意 四、行业发展趋势与前景 五、个人特质与职业规划 六、冶金工程专业排名 一、专业简介 1.1 专业定义 冶金工程&#xff0c;这是一门古老而又充满活力的普通高等学校本…

Vue3 按钮根据屏幕宽度展示折叠按钮

文章目录 一、组件封装二、使用三、最终效果(参考)四、参考 一、组件封装 ButtonFold.vue 1、获取父组件的元素&#xff0c;根据元素创建动态插槽 2、插槽中插入父元素标签。默认效果和初始状态相同。 3、当屏幕宽度缩小时&#xff0c;部分按钮通过 dropdown 的方式展示出来&a…