嵌入式系统------ARM

目录

一.c语言回顾

        1.特殊符号

        (1)const

        (2)static

        (3)extern

        2.内存的结构

        (1)kernel:内核

        (2)栈区

        (3)堆区

        (4)bss

          (5) data

3.知识点

4.编译的流程

二.ARM 

   1.内存

   2.flash

   3.晶振

    4.cpu

        (1)R0 --R12

        (2)ALU:

        (3)Cache:

                缓冲区的特性:        

        (4)MMU

        (5)满减栈

5.处理器


一.c语言回顾

        1.特殊符号

        (1)const

         修饰一个标识符,属性为只读,只能当右值使用(就是把值传给别的变量),可以被修改,但是编译的时候会报错。要想修改可以定义一个指针来改变,只会警告不会报错。        

const int a = 10;
int *p = &a;
*p = 100;
printf("a = %d",a); //结果为100

        (2)static

           ① 限制全局变量及函数的作用域(使其只在本文件中使用)

                最常用的功能,在大的项目中,合并的时候,防止重名的函数冲突,最好用使用static的习惯。

                要想让别人使用的函数加在头文件中中,不希望别人使用的则用static,并且不把函数加在头文件中。

           ②对于局部变量的作用,延长生命周期(和整个程序生命周期一致)

            static修饰的变量只会初始化一次

        (3)extern

                声明一个外部的全局变量及函数,可以在本文件中去使用外部的这个变量。

        2.内存的结构

        (1)kernel:内核

                大小为1G,多进程时候,共用一个内核。

        (2)栈区

                存放:局部变量、函数参数、函数返回地址。总的大小为8M。

                ①:栈区为什么由高到低,因为在存储的时候防止越界进入内核,进入堆区只会段错误,影响没有那么大。

                ②:为什么放在内核下面,而不是其他位置,因为bss,data,code,还有堆区的大小具体不知道为多少,所以放在其他位置不能确定栈区的起始位置。

        (3)堆区

                大小为4G - 8M - bss - data - code,程序员自己管理的空间,需要申请,释放。

        (4)bss

                存储未初始化的全局变量和静态变量。它的内容在程序加载到内存时被初始化为零(或由系统自动填充为默认值),内存大小在程序编译时确定,但它的实际内容不需要在可执行文件中存储。只有内存大小和分配信息被记录。

                   因为 .bss 段的内容在磁盘上并不存储实际数据,所以它比 .data 段节省空间。

char data[1024] = {0};
char data[1024];

  

            (5) data

                  用于存储已初始化的全局变量和静态变量。变量在定义时已经有明确的初始值,内容会被包含在可执行文件中,因此它需要在磁盘上占用空间。程序在加载时将这些初始值从文件中读取到内存中,由于实际的数据会被存储在可执行文件中,所以 .data 段在磁盘上会占用空间。

char data[1024] = {1};

3.知识点

        

int a;
int a = 10;
int main(void)
{
  
}

//和
int a = 10;
int a;
int main(void)
{
  
}

        这俩中情况在编译的时候都不会报错,且a的值都为10;

        ①:不会报错的原因是因为俩个a的值所存储的空间不同,int a ;在bss区域,其实这里相当于声明,而int a = 10;在data区域,这里是赋值。

        ②:程序先从data区域开始,然后再到bss区域.

        

int a = 10;
int a = 10;
int main(void)
{

}

 上面这种情况会报错,因为都保存在一个区域,会重复定义。

int a ;
int a ;
int a ;
int a ;

int main(void)
{

}

上面的情况不会报错,是相当于多次声明,不会报错

在 C 和 C++ 中,变量的多次声明是允许的,但变量的多次定义是不允许的。

4.编译的流程

        

二.ARM 

整体结构

   1.内存

   2.flash

                            

3.晶振

最小工作单位时间,振动频率越高,越不稳定。

4.cpu

        (1)R0 --R12

                是寄存器,大小和操作系统一样,如32位系统,则寄存器大小为32 == 4字节。

        (2)ALU:

                是运算单元,是个集合。

        (3)Cache:


                ① D-Cache:存放数据。

                ②D-Cache:存放指令。

                哈佛省时间,D、I同时可取,但是不省空间。

                冯诺依曼,省空间,但是不省时间,D、I只能先取一个。

                缓冲区的特性:        

        adcd      abc      abcd     ef

        缓冲区为    abcd----->  adce,因为从使用频率来说,d最低,所以替换d。

        abcd     abcd   abcd     ef

        缓冲区为     abcd------>bcde,因为从使用时间来说,最远使用的是a,所以替换a。

        (4)MMU

                

        (5)满减栈

        减栈:之前说过,防止越界到内核,所以从高到低。

        满栈:指针先移动,然后再存数据。这样第一个位置就是空的。

        空栈:现存数据,然后指针再向下移动,这样指针指向的位置就是空的。

        满栈和空栈对于入栈没有什么影响,但是对于出栈有影响,满栈在出栈的时候,当走到空的时候就代表出完了,而空栈不好判断。

所以综上所述使用满减栈。

5.处理器

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

名城优企游学活动之走进万事利:巴黎奥运文创合作伙伴数字化之路

近日,由纷享销客主办的“数字中国 高效增长——名城优企游学系列活动之走进万事利”成功举办,此次活动众多业内精英齐聚万事利科创中心,领略万事利的数字化转型之道,共同探讨如何运用先进数字化手段,实现企业的持续增长…

Java 入门指南:Java 并发编程 —— 同步工具类 Semephore(信号量)

文章目录 同步工具类Semephore核心功能限制并发访问量公平与非公平策略灵活性与适应性 常用方法使用示例 同步工具类 JUC(Java.util.concurrent)是 Java 提供的用于并发编程的工具类库,其中包含了一些通信工具类,用于在多个线程之…

游戏开发| Unreal5.2-5.4接入chatGPT定制游戏NPC

引擎版本UE5.2 (也支持到5.4,有试用其它插件所以选择之前版本) 使用插件(免费) 1.VArest (插件官方介绍:Plugin that makes REST communications much easier.)可以让REST(Representational State Transfer)通信变得更加容易,涉及客户端与服务器之间通过 HTTP 协议…

万亿低空经济火爆,无人机飞手培训正当时

低空经济是一种新兴的经济形态,主要依托于低空空域(通常指垂直高度1000米以下,根据不同地区特点和实际需要可延伸至3000米以内的空域)进行各种有人驾驶和无人驾驶航空器的飞行活动。 一、低空经济的蓬勃发展 近年来,…

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示,也让人摸不着头脑。只能是记下来备用吧。

基于SpringBoot+Vue的考研学习分享互助平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的考研学习…

uniapp(H5)设置反向代理,设置成功后页面报错

设置反向代理后,页面报错图: 反向代理代码:devServer下面就是配置对应的代理,一般这样就没问题了 "h5": {"router": {"mode": "hash"},"devServer": {"port": 517…

Mac 上终端使用 MySql 记录

文章目录 下载安装终端进入 MySql常用操作查看数据库选择一个数据库查看当前选择的数据库Navcat 打开提示报错参考文章 下载安装 先下载社区版的 MySql 安装的过程需要设置 root 的密码,这个是要进入数据库所设定的,所以要记住 终端进入 MySql 首先输…

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软…

unocss 一直热更新打印[vite] hot updated: /__uno.css

控制台持续打印了几千条这条信息,页面逐渐卡死 client.ts:450 [vite] hot updated: /__uno.css 找出的原因是:依赖出问题了,重新安装unocss, 执行命令 npm i unocss 后修复。 但奇怪的是,删除node_modules重新全部安装…

中介者模式mediator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/mediator 减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。

第十五节:学习Springboot 的响应结果封装(自学Spring boot 3.x的第四天)

这节记录下如何使用枚举类和响应封装类实现响应结果封装。 第一步:新建立一个枚举类。枚举类的要求有两个变量,响应码code,响应信息desc。响应码需要跟前端约定好。 public enum ResponseCode {SUCCESS("success",101),ERROR(&qu…

JavaWeb后端开发总结(3)

AOP基础 AOP概述 首先我们要知道AOP是什么? 看下图 个人解析: AOP叫做面向切面编程,但是实际上就是面向方法编程 图中下面一部分是一个AOP的案例 AOP快速入门案例代码实现 案例:测出业务中各个业务方法所需的执行时间 如果…

某red书最新版x-s、x-s-common(下)

本文继续某red书参数逆向,接下来是x-s-common,x-s的逆向过程请转战某red书最新版x-s、x-s-common(上) x-s-common就比较好找了,直接搜索就可以了 成功断住: 这里要注意了,断点是断在第二个x-s…

线性代数 第六讲 特征值和特征向量_相似对角化_实对称矩阵_重点题型总结详细解析

文章目录 1.特征值和特征向量1.1 特征值和特征向量的定义1.2 特征值和特征向量的求法1.3 特征值特征向量的主要结论 2.相似2.1 相似的定义2.2 相似的性质2.3 相似的结论 3.相似对角化4.实对称矩阵4.1 实对称矩阵的基本性质4.2 施密特正交化 5.重难点题型总结5.1 判断矩阵能否相…

QT——事件处理机制(9.10)

用C写个闹钟 要求一个标签类显示时间&#xff0c;一个行编辑类输入闹钟时间&#xff0c;两个按钮组件分别控制启动和取消。 1.头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> //定时器类 #include <QTime…

数据集 CrowdPose 多人姿态估计 深度学习 >> DataBall

数据集 CrowdPose 多人姿态估计 深度学习 CrowdPose 数据集 这是一个用于探讨在拥挤场景中的多人姿态估计的图像数据集。该数据集包括 2 万张图像和标注有 14 个关键点的 8 万个人体姿势&#xff0c;其中测试集包括 8,000 张图像。 article{li2018crowdpose, title{CrowdPose…

新闻资讯类APP流量变现技巧——提升广告变现收益

新闻资讯类APP拥有庞大的用户基础&#xff0c;始终拥有较强的广告变现能力&#xff0c;如何在激烈的行业竞争中凸显媒体的优势&#xff0c;进而吸引更多的广告主&#xff1f;优化核心场景广告样式的同时&#xff0c;挖掘更多的广告场景样式&#xff1f;如何把握好广告变现和用户…

Whistle 客户端抓包工具

Whistle 客户端 安装或更新 官网&#xff1a; 关于whistle GitBook (wproxy.org)https://wproxy.org/whistle/ Whistle 客户端目前只支持 Mac 和 Windows 系统&#xff0c;如果需要在 Linux、 Docker、服务端等其它环境使用&#xff0c;可以用命令行版本&#xff1a;GitHub…

JAVA- 多线程

一&#xff0c;多线程的概念 1.并行与并发 并行&#xff1a;多个任务在同一时刻在cpu 上同时执行并发&#xff1a;多个任务在同一时刻在cpu 上交替执行 2.进程与线程 进程&#xff1a;就是操作系统中正在运行的一个应用程序。所以进程也就是“正在进行的程序”。&#xff0…