嵌入式系统------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.处理器

        

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

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

相关文章

Mental-LLM——通过在线文本数据利用大型语言模型进行心理健康预测

概述 源码地址:https://github.com/neuhai/Mental-LLM.git 论文地址:https://arxiv.org/abs/2307.14385 在一项关于哪些法律硕士适合精神健康护理的研究中,对以下五种法律硕士进行了比较 羊驼-7b。羊驼-LoRA。FLAN-T5-XXLGPT-3.5GPT-4. 作…

人该怎样活着呢?48

人该怎样活着呢? A多观察多思考 【思考问答】 (20240411) B记录自己的灵感。 (20240412) 别人抢不走的东西:肚子里的食物,脑子里的知识,还有梦想(202011…

爬虫常用模板

这里记录的是我学习爬虫自己用到的一些东西,方便以后打开直接使用。我会不定期的往里面添加内容。 爬虫工具库-spidertools.cn 协程 模板1(通过loop): async def download()passasync def main():# 创建任务队列tasks []for.…

Qt QPushButton 按钮添加数字气泡

使用场景 项目中,在某个按钮的右上角添加数字气泡是一个很常见的功能,可以用新建一个组合类来实现。不过这样比较麻烦,如果加气泡是后面的需求,可能改动的地方较多。 下面介绍2种比较简单,不需要改动按钮响应的方式。…

docker安装prometheus、grafana监控SpringBoot

1. 概述 最新有一个需求, 需要安装一个监控软件,对SpringBoot程序进行监控, 包括机器上cpu, 内存,jvm以及一些日志的统计。 这里需要介绍两款软件: prometheus 和 grafana prometheus: 中文名称, 普罗米…

Excel 将行和列转置的两种方法

方法一: 方法二:使用transpose公式

Unity数据持久化 之 文件操作(增删查改)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ 这里需要弄清几个概念: File:提供文件操作的静态方法,是管理的 Windows.File -…

AI驱动测试管理工具会有哪些发展前景呢?

在软件测试领域,人工智能(AI)的出现犹如一场技术革命,改变了传统的测试管理方式。随着AI技术的迅速发展,它将如何进一步提升测试管理的效率与准确性?未来的AI驱动测试管理工具又会带来哪些令人期待的创新呢…

HTTP协议(超文本传输协议)

HTTP请求消息 http请求消息组成: 请求行 :包含请求的方法 操作资源的地址 协议的版本号 http请求方法: GET:从服务器获取资源 POST:添加资源信息 PUT:请求服务器更新资源信息 DELETE:请…

Postman环境变量:简化API测试的利器

引言 在当今快速发展的互联网时代,API(应用程序接口)的重要性不言而喻。无论是内部系统间的通信还是对外服务的提供,API都扮演着至关重要的角色。然而,在API的开发与测试过程中,经常需要处理各种各样的配置…

数学建模强化宝典(10)多元线性回归模型

一、介绍 多元线性回归模型(Multiple Linear Regression Model)是一种用于分析多个自变量(解释变量、预测变量)与单个因变量(响应变量、被预测变量)之间线性关系的统计模型。这种模型假设因变量的变化可以通…

ARM下汇编语言编程

一、ARM汇编语言程序格式 ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。 段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需…

Java学习|Java基础知识

目录 类与对象继承封装多态高级话题实践项目类与对象 定义与创建 类: 定义一组具有相同属性和行为的对象的模板。对象: 根据类模板创建的实体。示例代码 public class Person {String name;int age;public Person(String name, int age) {this.name = name;this.age = age;}…

4.1 数据分析-excel 基本操作

第四节:数据分析-excel 基本操作 课程目标 学会excel 基本操作 课程内容 数据伪造 产生一份招聘数据 import pandas as pd from faker import Faker import random import numpy as np# 创建一个Faker实例,用于生成假数据,指定中文本地…

iOS 中,用户点击一个按钮到响应的全部流程

在 iOS 中,当用户点击一个按钮(或其他 UI 控件)时,会触发一系列复杂的操作流程,从硬件到软件,再到应用层的事件处理。以下是从用户点击一个按钮到应用响应的完整流程: 硬件层:触摸事…

CSS3 文本效果(text-shadow,box-shadow,white-space等)文本溢出隐藏并且显示省略号

一 text-shadow text-shadow 属性是 CSS3 中用于为文本添加阴影效果的工具。它可以增强文本的可读性和视觉吸引力,提供丰富的视觉效果 1 语法 text-shadow: offset-x offset-y blur-radius color;offset-x:阴影相对于文本的水平偏移量。可以是正值&am…

专用于理解游戏场景的开源大模型-VideoGameBunny

大模型在游戏开发领域扮演了重要角色,从AI机器人生成到场景搭建覆盖各个领域。但在游戏场景理解、图像识别、内容描述方面很差。 为了解决这些难题,加拿大阿尔伯塔的研究人员专门开源了一款针对游戏领域的大模型VideoGameBunny(以下简称“VG…

开源模型应用落地-LlamaIndex学习之旅-LLMs-集成vLLM(二)

一、前言 在这个充满创新与挑战的时代,人工智能正以前所未有的速度改变着我们的学习和生活方式。LlamaIndex 作为一款先进的人工智能技术,它以其卓越的性能和创新的功能,为学习者带来前所未有的机遇。我们将带你逐步探索 LlamaIndex 的强大功能,从快速整合海量知识资源,到…

集成电路学习:什么是ISP系统编程

一、ISP:系统编程 ISP(In-System Programming)即系统编程,是一种在系统内部进行的编程方法,主要用于对闪存(FLASH)、EEPROM等非易失性存储器的编程。ISP编程提供了巨大的灵活性,允许…

Input输入框数值与金额格式的互换(拿来即用的完美组件)

一、前言 实际的页面开发中,需要输入金额类型的输入框比较常见,这类输入框根据实际的业务场景都是要进行个性化的组件封装,本文借助自己封装的一个输入框组件 NumberToAmount.vue 来讲述el-input 输入框中数值与金额格式的互换方法,组件包含的功能如下: 1、限制了输入框只…