ARM/计算机体系结构

1、STM32

参考:CSDN

stm32f1系列是Cortex-M3内核 、72MHZ、SRAM最大64K字节、512KB ROM;
stm32f4系列是基于Cortex-M4内核、168MHZ、SRAM有192K字节;
在这里插入图片描述
在这里插入图片描述

1.STM32启动步骤

  • STM32启动流程
  1. 设置堆栈指针SP指向_initial_sp

  2. 设置PC指针指向Reset_Handler

  3. 设置中断向量表

  4. 配置系统时钟

  5. 配置外部SRAM/SDRAM

  6. 跳转的C库执行main

2.STM32时钟

2、ARM 汇编指令

gcc/gun/g++

gcc是一款linux Gun计划当中的一款编译工具,用于编译C语言文件。
其显著特点就是可以交叉编译
在C语言源文件到可执行文件的过程经历:预处理->编译->汇编->链接 。

3、体系机结构

  • ARM架构
  • X86架构

1、冯.哈结构

冯诺依曼结构主要用于通用计算机领域,需要对存储器中的代码和数据频繁的进行修改,统一编址有利于节约资源。
哈佛结构主要用于嵌入式计算机,程序固化在硬件中,有较高的可靠性、运算速度和较大的吞吐。
ARM7系列采用冯·诺依曼体系结构,而ARM9~ARM11采用哈佛体系机构。

  • “冯·诺依曼”体系结构

20世纪30年代中期,德国科学家冯诺依曼大胆的提出,抛弃十进制,采用二进制作为数字计算机的数制基础。同时,他还说预先编制计算程序,然后由计算机来按照人们事前制定的计算顺序来执行数值计算工作。
冯诺依曼理论的要点是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。 其主要内容是:
◎ 计算机由控制器、运算器、存储器、输入设备、输出设备五大部分组成。
◎ 程序和数据以二进制代码形式不加区别地存放在存储器中,存放位置由地址确定。
◎ 控制器根据存放在存储器中地指令序列(程序)进行工作,并由一个程序计数器控制指令地执行。控制器具有判断能力,能根据计算结果选择不同的工作流程。

  • “哈佛”体系结构

数字信号处理一般需要较大的运算量和较高的运算速度,为了提高数据吞吐量,在数字信号处理器中大多采用哈佛结构。
哈佛结构特点如下:
◎ 使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;
◎ 具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输;

  • 两种结构区别

在典型情况下,完成一条指令需要3个步骤,即:取指令、指令译码和执行指令。从指令流的定时关系也可看出冯.诺曼结构与哈佛结构处理方式的差别。
举一个最简单的对存储器进行读写操作的指令,指令1至指令3均为存、取数指令,对冯.诺曼结构处理器,由于取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行,只有一个完成后再进行下一个。
如果采用哈佛结构处理以上同样的3条存取数指令,如下图所示,由于取指令和存取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,这样,也就克服了数据流传输的瓶颈,提高了运算速度。

2、大.小端

ARM 和现代通用计算机一般是小端
STM32 C51采用大端

0. 什么是大小端?

参考CSDN
对于一个由2个字节组成的16位整数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。
在这里插入图片描述
假如现有一32位int型数0x12345678,那么其MSB(Most Significant Byte,最高有效字节)为0x12,其LSB (Least Significant Byte,最低有效字节)为0x78,在CPU内存中有两种存放方式:(假设从地址0x4000开始存放)
在这里插入图片描述
总结:

  • 数组:a{1, 2, 3, 4, 5, 6, 7, 8} //从左到右地址依次增大

  • 若将上述数组转换成整数:
    1.在小端序中:87654321 //从左到右地址依次减小
    小端左边放高位元素
    2.在大端序中:12345678 //从左到右地址依次减小
    大端左边放低位元素

  • 大端是高字节存放到内存的低地址

  • 小端是高字节存放到内存的高地址

1. 联合体测试机器的大小端
#include<stdio.h>
union var{
        char c[4];
        int i;
};
 
int main(){
        union var data;
        data.c[0] = 0x04;//因为是char类型,数字不要太大,算算ascii的范围~
        data.c[1] = 0x03;//写成16进制为了方便直接打印内存中的值对比
        data.c[2] = 0x02;
        data.c[3] = 0x11;
//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
//而把四个字节作为一个整体(不分类型,直接打印十六进制),应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。
        printf("%x\n",data.i);
----------结果:----------------------
11020304
证明我的32**linux是小端**(little-endian)
  • 法2:
判断当前机器的大小端存储
 
#include <stdio.h>
#include <stdlib.h>
int check_sys()
{
	union{
	  int i;
	  char c;
	}un;
	un.i = 1;
	return un.c;
}
int main()
{
	int ret = check_sys();
	if (ret == 1)  //原来的整型从低地址开始向小端左边流入
	{
		printf("小端\n");
	}
	else    //原来的整型从高地址开始向大端左边流入
	{
		printf("大端\n");
	}
	return 0;
}
2. 自创大小端序检测器
#include <stdio.h>
	//手撸大小端序检测器
	int main(){
	char a[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
	int *p = (int*)a;
	printf("%x\n",*++p); 
   return 0;
}

输出:8070605(小端序)
3. 整型强转字符型法

例如:
整型int a = 1,即 0x 00 00 00 01
小端序为:00 00 00 01(地址从左到右依次降低)
大端序为:01 00 00 00
(char)&a对于小端可以理解为取最低地址的字节
因此小端序返回1,大端序返回0。

#include <stdio.h>
#include <stdlib.h>
 
int check_sys()
{
    int a = 1;
    return *(char*)&a;//返回1表示小端,返回0表示大端
}
/*
int main()
{
    if (check_sys() == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    system("pause");
    return 0;
}*/
4.结论:
  • 网络字节序是大端
  • linux是小端序
  • windowns是小端序(用C在线工具和力扣在线工具测得)

CPU / MPU / MCU / SOC / SOPC
CPU的运作原理:分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。

CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。
所谓的计算机的可编程性主要是指对CPU的编程。

  • 1.CPU(Central Processing Unit),是一台计算机的运算核心和控制核心。
  • 2.MPU (Micro Processor Unit),叫微处理器(不是微控制器),通常代表一个功能强大的CPU
  • 3.MCU(Micro Control Unit),叫微控制器,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的芯片(51 avr)。
  • 4.SOC(System on Chip),指的是片上系统,MCU只是芯片级的芯片,而SOC是系统级的芯片,可以运行操作系统
  • 5.SOPC(System On a Programmable Chip)可编程片上系统(FPGA就是其中一种)

3、指令流水线

流水线技术通 过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一
ARM7处理器核使用了典型三级流水线的冯·诺伊曼结构,ARM9系列则采用了基于五级流水线的哈佛结构

ARM指令是三级流水线,取指,译指,执行,
在这里插入图片描述

在这里插入图片描述

  • 2. 计算
  1. 流水线执行时长及周期
    流水线周期为执行时间最长的一段
    流水线计算公式为:
    1条指令执行时间+(指令条数—1)流水线周期
    ​ 理论公式:(t1+t2+……tk)△t
    ​ 实践公式(k+n—1)△t(k表示分的部分数,n表示条数)

例:若指令流水线把一条指令分为取值、分析和执行,且三部分的时间分别是取值2ns,分析2ns,执行1ns。那么,流水线周期是多少?100条指令全部执行完需要多少时间?

流水线周期为:2ns
100条需耗时:
理论值:先算一条指令耗时:2ns+2ns+1ns=5ns
​ 5ns+(100—1)x2ns=203ns
实际值:(3+99)x2ns=204ns //这里有疑问,感觉理论值更实际些

  1. 流水线吞吐率计算
    流水线吞吐率(TP)是指在单位时间内流水线所完成的任务数量或输出的结果数量。
    计算流水线吞吐率的最基本的公式如下:
    在这里插入图片描述
    流水线最大吞吐率:
    在这里插入图片描述

4、单片机ROM/RAM/FLASH

ROM/RAM/FLASH作用
(1)ROM是只读存储器,CPU只能从里面读数据,而不能往里面写数据,掉电后数据依然保存在存储器中;RAM是随机存储器,CPU既可以从里面读出数据,又可以往里面写入数据,掉电后数据不保存,这是条永恒的真理,始终记挂在心。

1. 什么是Nand Flash

Flash主要分两种,Nand Flash和nor flash。

关于Nand Flash和Nor Flash的区别:

Nor的成本相对高,容量相对小,比如常见的只有128KB,256KB,1MB,2MB等等,优点是读写数据时候,不容易出错。所以在应用领域方面,Nor Flash比较适合应用于存储少量的代码。

Nand flash成本相对低,说白了就是便宜,缺点是使用中数据读写容易出错,所以一般都需要有对应的软件或者硬件的数据校验算法,统称为ECC。但优点是,相对来说容量比较大,现在常见的Nand Flash都是1GB,2GB,更大的8GB的都有了,相对来说,价格便宜,因此适合用来存储大量的数据。其在嵌入式系统中的作用,相当于PC上的硬盘,用于存储大量数据。

所以,一个常见的应用组合就是,用小容量的Nor Flash存储启动代码,比如uboot,用大容量的Nand Flash做整个系统和用户数据的存储。

4、硬件/通信 接口

1.基础知识

  1. 串行并行
    串行:一次一位,串行口传输方式为数据排成一行、一位一位送出接收也一样;
    并行:一位(比特)时间内可传输一个字符,并行口传输8位数据一次送出.;
    在这里插入图片描述

  2. 同步异步
    同步:同步通信要求接收端时钟频率和发送端时钟(外界时钟)频率一致,发送端发送连续的比特流,传输速度比异步传输快;
    异步:异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节;

  3. 串行通信方式:
    在这里插入图片描述

0.概述

UART:(Universal Asynchronous Receiver Transmitter:通用异步收发器/异步串行通信口),是一种通用的串行数据总线,用于异步通信,支持全双工。它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。

IIC总线协议:I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
SPI总线协议:SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。

RS232接口缺陷:
(1)接口的信号电平值较高( +/-12V),易损坏接口电路的芯片。
(2)传输速率较低,在异步传输时,波特率为20Kbps。
(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
(4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。

RS485是对RS232的改进,特点包括:
①接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2 ~ 6)V表示,逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片。
②传输速率高。10米时,RS485的数据最高传输速率可达35Mbps,在1200m时,传输速度可达100Kbps。
③抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
④传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。
————————————————
原文链接:https://blog.csdn.net/fengge2018/article/details/107592487

1. UART(硬件接口)

0. 基础知识

  1. 串口和UART区别?
    首先串口、COM口、UART口一般指的是硬件接口
    而TTL、RS-232、RS-485则是逻辑电平0和1的不同表示标准,它们区别如下:
    在这里插入图片描述
    1)和RS232相比,由于RS485采用了差分传输的方式,因此抗干扰能力强很多。TTL抗干扰能力最差。
    2)像STM32这类单片机的USART口,出来的电平都是TTL电平,想要和电脑通讯需要电平转换芯片。
  • 一般用TTL转USB给单片机下载程序
    在这里插入图片描述
  • 两个设备之间采用RS232通讯
    在这里插入图片描述

参考:小肥侠123

  1. USART与UART的区别?
    USART(universal synchronous asynchronous receiver and transmitte): 通用同步异步收发器
    USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。

    UART(universal asynchronous receiver and transmitter): 通用异步收发器
    异步串行通信口(UART)就是我们在嵌入式中常说的串口,它还是一种通用的数据通信议。

区别:

USART是指单片机的一个端口模块,可以根据需要配置成同步模式(SPI,I2C),也可以将其配置为异步模式,后者就是UART。所以说UART姑且可以称之为一个与SPI,I2C对等的“协议”,而USART则不是一个协议,而是更应该理解为一个实体。(摘自知乎-Sean回答)

相比于同步通讯,UART不需要统一的时钟线,接线更加方便。但是,为了正常的对信号进行解码,使用UART通讯的双方必须事先约定好波特率,即单位事件内传输码元的个数。
————————————————
版权声明:本文为CSDN博主「JYU_hsy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40774605/article/details/88398709

1.RS232(电平标准)

  1. 通信方式:RS232采用不平衡传输,即单端通信;
  2. 传输距离:适合本地设备之间通信,<20m
  3. 设备数量:一对一通信

2. RS485(电平标准)

  1. 通信方式:RS485采用了(平衡传输)差分传输的方式,因此抗干扰能力强很多;
  2. 传输距离:几十米到上千米;
  3. 设备数量:128个收发器

2. CAN

STM32常用CAN收发器;TJA1050或者82C250。
理想情况下,可以 达 128 个,当然,使用特定的 芯片,可以达到 256 等等,这是由它自身的驱动能力决定的。​
在 CAN 总线的起止端有一个 120Ω的终端电阻,是用来来做阻抗匹配,以减少回波反射
在这里插入图片描述
在这里插入图片描述

  1. 传输数据
    每次发送数据前,节点都会监听总线的状态,如果总线状态为空闲时,它就会立即向总线上发送自己的数据,这个数据里不仅有数据,还有本身的ID信息或者其他的控制指令,应称为数据包(数据帧),也叫做报文。当报文被传输到其它节点时,只要这些节点按格式去解读,就能还原出原始数据。

    报文: 在原始数据段的前面加上传输起始标签、片选(识别)标签、控制标签,在数据的尾段加上 CRC 校验标签、应答标签和传输结束标签。类似这样的数据包就被称为 CAN 的数据帧。为了更有效地控制通讯,CAN 一共规定了 5 种类型的帧,帧也称为报文。

    1. 五种帧类型:在这里插入图片描述
    2. 数据帧是在 CAN 通讯中最主要、最复杂的报文,它以一个显性位(逻辑 0)开始,以 7 个连续的隐性位(逻辑 1)结束。在它们之间,
      分为仲裁段、
       控制段、
       数据段、
       CRC 段
        ACK 段,

        以标准数据帧为例。
      在这里插入图片描述
      在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 数字设计是一门关于数字电路系统的领域,它研究如何将电子电路实现为数字逻辑电路以及如何设计和优化这些电路以满足特定的功能和性能要求。它涵盖了数字逻辑门、寄存器、时序电路、计数器等基本的数字电路模块的设计和实现方法。 计算机体系结构是指计算机硬件和软件之间的接口和关系,它定义了计算机的组成部分、它们之间的通信方式以及指令集架构等方面的设计。计算机体系结构决定了计算机系统性能的上限,也对计算机程序的执行速度和能力产生影响。 ARM架构是一种广泛应用于嵌入式系统和移动设备中的计算机体系结构。它的设计理念是在提供高性能和低功耗的同时保持简洁和灵活。ARM架构为系统设计提供了多种处理器核和指令集的选择,可以根据应用需求进行定制。 数字设计和计算机体系结构是紧密相关的领域。数字设计关注于如何将各个数字电路模块组合在一起以实现计算机指令功能,而计算机体系结构则关注于如何将这些指令映射到硬件层面上。ARM架构在嵌入式系统和移动设备中的广泛应用使得数字设计和计算机体系结构ARM平台上有着重要的作用。 在数字设计和计算机体系结构的研究中,ARM版的答案意味着针对ARM架构的解决方案。这需要针对ARM平台上的具体特点和要求进行设计和优化,以提高系统性能和效率。同时,还需要考虑到ARM架构与其他平台的兼容性和互操作性,以确保系统的稳定性和可靠性。 总之,数字设计和计算机体系结构ARM架构中的研究和应用具有重要意义。在这个领域的发展中,我们需要不断提高数字设计和计算机体系结构的水平,以满足不断发展的计算需求。 ### 回答2: 数字设计是指利用数字电路构建和实现数字系统的过程。数字系统是由数字电路组成的,数字电路是由逻辑门构成的,并且可以在逻辑门之间实现逻辑功能的电路。数字设计的目标是实现特定的功能,并且具有高效、可靠、经济等特性。 计算机体系结构是指计算机硬件和软件之间的接口,它定义了如何组织和设计计算机系统的原则和规范。计算机体系结构包括计算机的指令集、寄存器、存储器、总线等组成部分。它决定了计算机的性能、可扩展性和可移植性。 ARM是一种常用的计算机体系结构,它由英国公司ARM Holdings开发。ARM体系结构被广泛应用于移动设备、嵌入式系统和低功耗设备中。ARM的特点是低功耗、高性能和灵活性。ARM处理器的架构具有精简指令集和流水线技术,能够实现高效的指令执行和处理速度。同时,ARM体系结构支持多种操作系统和编程语言,具有很好的兼容性和可移植性。 数字设计和计算机体系结构的结合可以实现高效、稳定和可靠的数字系统。ARM版的数字设计和计算机体系结构可以应用于各种场景,如智能手机、平板电脑、嵌入式系统、物联网等。这种设计可以提升系统的性能和功耗效率,在满足用户需求的同时,提供良好的用户体验。同时,ARM版的数字设计和计算机体系结构还具有较强的可扩展性和可定制化特性,可以根据具体应用的需求进行灵活的配置和优化。 ### 回答3: 数字设计是指利用数字电路设计和实现各种数字系统的过程。数字电路由逻辑门和触发器等基本电路元件组成,能够对数字信号进行处理和运算。数字设计要考虑电路的功能、速度、功耗等因素,同时还要遵循一定的设计规范和方法。 计算机体系结构是计算机硬件和软件之间的接口,包括计算机的指令集、寄存器和数据通路结构等。ARM(Advanced RISC Machine)是一种精简指令集计算机(RISC)体系结构,广泛应用于移动设备和嵌入式系统。ARM计算机体系结构设计中,重点考虑的是提高计算机的性能、降低功耗、提升系统的可靠性和安全性。 数字设计和计算机体系结构的结合,ARM版的数字设计是指在ARM体系结构基础上进行数字电路设计的过程。ARM提供了丰富的开发工具和支持,使得数字设计师能够更加容易地进行系统设计和验证。数字设计可以应用在ARM芯片的各个层次,包括处理器核心、内存控制器、外设接口等。通过数字设计,可以实现ARM芯片在不同应用场景下的高性能和低功耗。 总之,数字设计和计算机体系结构ARM版的结合,是为了充分发挥ARM体系结构的优势,实现更加高效、可靠和智能的数字系统。这对于提升移动设备和嵌入式系统的性能、降低功耗、提高用户体验具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值