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

news2024/11/14 18:44:17

目录

一.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.处理器

        

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

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

相关文章

Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListMap

ConcurrentMap ConcurrentMap 是 Java 并发包中提供的一个接口,它继承了 java.util.Map 接口,专门用于支持高并发环境下的线程安全操作。ConcurrentMap 提供了一系列线程安全的方法,旨在解决在多线程环境下使用普通 Map 类型(如 …

用ChatGPT三分钟写一个完美的PPT,彻底告别繁琐的制作过程

用AI或ChatGPT来制作PPT的方式多得很! 下面就用超级简单的语言,一步步教你怎么搞定,三分钟内保准搞定你的PPT。 所有需要的方法和工具都在这里! 很简单,只要你输入一个标题,AI就能完成PPT的制作。 如果…

文件 fd

目录 1. 建立共识原理2. 回忆 C 文件接口2.1 当前工作路径2.2 w / a 方式写入2.3 默认打开的三个文件流 3. 认识文件系统调用3.1 O_WRONLY|O_CREAT 写时创建3.2 O_TRUNC 截断长度(也即全覆盖式写入)3.3 O_APPEND 追加 4. 浅谈文件访问的本质4.1 简证 1. …

高级算法设计与分析 学习笔记 2 希尔排序 线性时间内的排序——计数排序,基数排序,桶排序

希尔排序(比较排序) 要选定一个步长(比如4),那么0,4,8……它们是一组,1,5,9……他们是一组。分组排完之后再换成2步长,最后改成1,就行…

牛心包瓣类医用生物瓣膜厚度无损检测

关键字:牛心包瓣膜,牛心包瓣叶,生物瓣膜,生物心脏膜,测厚仪,瓣膜生产,瓣膜检测设备, 牛心包瓣叶的厚度和轮廓所需的高精度取决于多个因素,包括瓣膜的制造标准、临床应用需…

百度飞将 paddle ,实现贝叶斯神经网络 bayesue neure network bnn,aistudio公开项目 复现效果不好

论文复现赛:贝叶斯神经网络 - 飞桨AI Studio星河社区 https://github.com/hrdwsong/BayesianCNN-Paddle 论文复现:Weight Uncertainty in Neural Networks 本项目复现时遇到一个比较大的问题,用pytorch顺利跑通源代码后,修改至pad…

【每日一练】python之tkinter的Label标签基础用法

""" 什么是tkinter窗口?tkinter是python中一个标准的库,用于创建图形界面(GUI)应用程序,它提供了一组工具和组件,使开发者能够在Python中创建窗口、按钮、标签、文本框、菜单等各种界面元素…

基于协同过滤的电影推荐系统

推荐系统已经成为当今互联网平台不可或缺的一部分,尤其是在电影、音乐和电子商务等领域。本文将带您深入探讨如何利用协同过滤算法,构建一个功能齐全的电影推荐系统。我们将结合Python、Django框架以及协同过滤算法,逐步实现这一目标。 完整…

Go父类调用子类方法(虚函数调用)

前言 在Go语言中,支持组合而不是继承。网上都说可以通过接口和结构体内嵌来模拟面向对象编程中的子类和父类关系。但给的例子或写法感觉都不是很好,难以达到我的目的(比如通过模板模式实现代码的重用等)。因此调查了一下实现方式…

内裤洗衣机需要一人一台吗?快来围观2024年五大好货集合

随着市面上的内衣抑菌产品越来越多,内衣洗衣机的质量也是参差不齐,一些网红跨界品牌内衣洗衣机的用料和做工品质较差,使用过程中出现清洗不干净和稳定性不足等问题。那么选购内衣洗衣机需要注意什么呢?我作为一名小家电测评博主&a…

pikachu文件包含漏洞靶场(本地文件包含+远程文件包含关卡)

本地文件包含 1.来到关卡随便点击一个提交 可以发现这里可以读取文件 这是1.txt内容 能读取到上一级文件那么也就可以读取本地文件 上传一个jpg文件 拿去连就ok了 远程包含 包含写木马的文件 该文件内容如下,其作用是在fi_remote.php文件的同级目录下新建一个文…

Java 基于微信小程序的小区服务管理系统,附源码

博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

【赵渝强老师】MongoDB的WiredTiger存储引擎

WiredTiger提供文档级别(Document-Level)的并发控制,检查点(CheckPoint),数据压缩和本地数据加密( Native Encryption)等功能。从MongoDB 3.2 版本开始,WiredTiger成为Mo…

大带宽服务器推流延迟怎么回事

大带宽服务器推流延迟的原因可能涉及多个方面,包括编码解码的延迟、网络传输延迟、CDN分发延迟以及播放端的缓冲处理等。下面将详细解释各个影响因素,并提出相应的优化建议: 1. 编码解码的延迟 视频编码格式的影响:不同的编码格式…

net、udp、tcp

Makefile的main.c文件中的全局变量SONG song,要在fun.c文件里面写成extern SONG song 编译方法 第一次编写 或 网络编程 物理层的网线规定有八根,颜色不一样,功能不一样,光猫把光信号转换成电信号,光纤10Gb WiFi叫无线局域网,一般也就50米左右,手机流量叫蜂窝网络,…

无限延展(倒推法)

本题不妨逆推。 对于长度为的字符串 ,若要求第位的延展,考虑 在最后一次延展前的位置。 若延展结束后的长度为,每次考虑以下内容: 若 ​,说明本次伸展无效, ,

CTFHub技能树-备份文件下载-bak文件

当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。 使用dirsearch扫描出index.php.bak 有些时候网站管理员可能为了方便,会在修改某个文件的时候先复制一份,将其命名为xxx.b…

没关系,会一手Git版本控制就行(全)

Git版本控制 文章目录 Git版本控制1. 版本控制1.1 概述1.2 版本控制优点1.3 本地版本控制系统(离线版)1.4 集中化的版本控制系统(联网版)1.5 分布式版本控制系统(离线联网版) 2. Git概述2.1 Git基本工作流程…

BUUCTF PWN wp--ciscn_2019_n_8

第一步 checksec一下,本题为32位。 分析一下保护机制: 一、RELRO: Partial RELRO Partial RELRO 提供了一定程度的保护。在这种情况下,部分重定位表在程序启动时被设置为只读。这可以防止一些针对重定位表的攻击,比如通过篡改重…

Elasticsearch 介绍

1、课程介绍 1.1 ES 8.x 演化进程 版本号发布日期多少个次要版本迭代历时8.02022年2月11日?至今7.02019年4月11日17个次要版本34个月6.02017年11月15日8个次要版本17个月5.02016年10月27日6个次要版本13个月 2、Elasticsearch 是什么 2.1 概念 2.1.1 标准定义 …