image frame

星际旅行日志

彼汾一曲,言采其藚.彼其之子,美如玉.美如玉,殊异乎公族.

Quartus II 虚拟引脚Virtual Pin的使用

Quartus II 虚拟引脚Virtual Pin的使用

一个较大的FPGA项目往往由许多模块组合而成,开发时我们可能需要一个模块一个模块地验证,有时候一个模块可能会有非常多的模块之间的接口或者有些大工程会有好几百个引脚,这样FPGA提供的引脚就可能不够,而我们在进行单一功能验证时有些引脚可能没用到,可以通过添加虚拟引脚解决这一问题。

阅读更多...

现代操作系统:原理与实现(第二章)

第二章 硬件结构


冯 诺依曼结构

主要包含三个部分:

  • 中央处理单元(Central Processing Unit,CPU):主要负责运算与逻辑控制。
  • 存储器(memory unit):负责存储程序指令和数据,以及保存程序执行的中间结果和最终结果。
  • 输入输出(Input and Output ,I/O):负责与外界进行交互,从外界获得输入,将结果向外界输出。

image-20211225154135650

目前主流的计算机依然采用的是冯诺依曼架构。

CPU与指令集架构

指令集架构(Instruction Set Architecture,ISA)是CPU和软件之间的桥梁。

ISA 包括指令集、特权级、寄存器、执行模式、安全扩展、性能加速扩展诸多方面。

指令集

指令集是ISA的重要组成部分,通常包含一系列不同功能的指令,用于数据搬移、计算、内存访问、过程调用等。

CPU在运行操作系统或应用程序时,实际上实在执行它们被编译后所包含的指令。

本书选择AArch64体系结构作为介绍操作系统的主要平台,其指令集属于精简指令集计算机(Reduced Instruction Set Computer,RISC)

AArch64中每条指令的长度固定为4字节,指令类型包括:

  • 数据搬移指令(如mov);
  • 寄存器计算指令(如加法指令add、减法指令sub);
  • 内存读写指令(如内存加载指令ldr、内存写入指令str);
  • 跳转指令(如无条件跳转指令b);
  • 过程调用指令(调用指令bl、返回指令ret);
  • 特权指令(如读写系统)

ARM处理器在嵌入式系统和智能手机等领域被广泛应用,其最新的商用体系结构是ARMv8。ARMv7及之前的ARM体系结构至多只支持32位虚拟地址,而ARMv8支持两种执行模式——AArch32AArch64,前者主要为了向前兼容,本书主要关注后者AArch64,即支持64位虚拟地址的AArch64,也称之为AArch64体系结构。

x86-64体系结构的指令集属于复杂指令集计算机(Complex Instruction Set Computer,CISC)。通常来说,相比于RISC,CISC具有指令数量更多、指令编码长度可变和指令寻址方式多样等特点。

特权级

特权级也是ISA中的重要组成部分,AArch64中的特权级被称为异常级别(Exception Level,EL),共有四种特权级。

image-20211225164935955

  • EL0:最低的特权级,应用程序通常运行在该特权级,也称为用户态
  • EL1:操作系统通常运行在该特权级,也称为内核态
  • EL2:在虚拟化场景下需要,虚拟机监控器(Virtual Machine Monitor,VMM,也称为Hypervisor)通常运行在该特权级
  • EL3:和安全特性TrustZone相关,负责普通世界(normal world)安全世界(secure world)之间的切换。

TrustZone是从ARMv6体系结构开始引进的安全特性,如今已被广泛使用。该特性从逻辑上将整个系统分为安全世界和普通世界,计算资源可以被划分到这两个世界中。安全世界可以不受限制地访问所有的计算资源,而普通世界不能访问被划分到安全世界中的计算机资源。比如说,普通世界不能访问属于安全世界的的物理内存和设备。

CPU在提供四种特权级的同时也提供了特权级之间切换的方式。

通常应用程序运行在EL0,而操作系统运行在EL1,所以这里主要介绍EL0和EL1之间常见切换场景

一般来说,从EL0(应用程序)切换到EL1(操作系统)的可能场景有三种:

  1. 应用程序需要调用操作系统提供的系统调用,此时应用程序会通过执行svc(特权调用,supervisor call)指令将CPU特权级从EL0切换到EL1。
  2. 应用程序执行了一条指令,而该指令触发了异常(exception),该异常导致CPU特权级从EL0切换到EL1。
  3. 应用程序在执行的过程中,CPU收到一个来自外设的中断(interrupt),该中断也会导致CPU特权级从EL0切换到EL1。

前两种场景往往统称为同步的CPU特权级切换,因为他们的特权级都是由CPU中正在执行的指令所导致的。

第三种场景下CPU发生的特权级切换并不是由于CPU运行程序过程中的指令而导致的,属于异步的CPU特权级切换。

下图EL1和EL0之间切换的基本流程,该流程通常由CPU和操作系统内核协同完成。

具体来说,在发生特权级切换的时刻,CPU负责保存当前执行状态,以便操作系统内核在处理异常时使用,并在处理结束后能够快速恢复应用程序的执行。

CPU保存的主要状态包括:

  • 触发异常的指令地址(即当前程序计数器(Program Counter,PC))
  • 异常原因(即异常是由于执行svc指令还是由于访存缺页导致的)
  • CPU将栈指针(Stack Pointer ,SP),从SP_EL0(应用程序使用的栈)切换到SP_EL1(操作系统可以通过设置这个寄存器来配置异常处理过程中使用的栈)
  • CPU还会保持一些其他状态,例如将CPU的相关状态保存在SPER_EL1(已保存的程序状态寄存器,Saved Program Status Register)中,将引发缺页异常的地址保存在FAR_EL1(错误地址寄存器,Fault Address Register)中。

image-20211225212206669

异常处理完成后,操作系统会恢复应用程序的上下文,然后执行eret(异常返回,Exception Return )指令,以恢复CPU自动保存的EL0状态(包括PC和SP等),并切换回EL0,使应用程序从被中断处继续执行。


寄存器

寄存器是ISA的另一个重要组成部分。在AArch64中,有31个64位通用寄存器,被命名为X0~X30。

其中,X29用作帧指针(Frame Pointer,FP)寄存器,按照使用惯例,一般用于保存函数调用过程中栈顶的地址;X30用作链接指针(Link Pointer,LP)寄存器,因为CPU在执行函数调用指令b1时会自动把返回地址保存在其中。

在EL1特权级下有两个页表基地址寄存器(Translation Table Base Register,TTBR),即TTBR0_EL1TTBR1_EL1,它们负责翻译虚拟地址空间中不同地址段,负责的地址范围由另一个控制寄存器TCR_EL1(翻译控制寄存器,Translation Control Register)决定。

操作系统中一种常见的配置是TTBR0_EL1负责 [0, 248 )的地址映射(作为用户地址空间),TTBR1_EL1负责 [248,264)的地址映射(作为操作系统内核地址空间)

image-20211225222924332


物理内存与CPU缓存

CPU在执行过程中,可以通过访存指令向物理内存中写入数据或者从中读取数据。

CPU使用物理内存的方式:通过总线向物理内存发送一个读写请求,其中包括目标地址(若是写请求,则还包括写入值),物理内存在收到请求后进行读写操作(若是读请求,则将读取值发送回CPU)。

因此从CPU的角度,可以把物理内存看做由字节组成的大数组:其中每一个字节拥有一个地址(物理地址),CPU可以在这个数组中存取数据。

CPU的处理速度相比与内存访问速非常快,为了降低CPU访问内存的开销,现在的CPU中引入了缓存(cache),用于存放一部分物理内存中的数据。访问CPU缓存比访问物理内存快得多,一般最快只需要几个时钟周期。当CPU需要向物理内存写入数据的时候,他可以直接写在CPU缓存当中,若缓存已满,则写回内存;当CPU需要从物理内存读取数据时,它可以先在CPU缓存中查找,如果没有找到再去物理内存中获取,并且把取回的数据放入缓存当中,以便加快下次读取速度。

image-20220121212017942

缓存结构

CPU缓存是由若干个缓存行(cache line)组成的。每个缓存行包括:一个有效位(valid bit),用于表示其是否有效;一个标记地址(tag address),用于标识其对应的物理地址;一些其他的状态信息。通常,CPU以缓存行(常见的是64字节)为单位把物理内存中的数据读取到CPU缓存当中;也就是说,即使只需要单个字节的值,该字节对应的缓存行也会全部进入缓存中。同样,将数据写入到物理内存也是以缓存行为单位的。

image-20220121213332084

缓存寻址

以AArch64架构的Cortex-A57 CPU中的L1数据缓存为例,给出CPU缓存查找的一般过程。该CPU缓存的相关参数如下:

  • 物理地址的长度为44位
  • 缓存大小为32KB,缓存行大小为64字节
  • 256组,2路组相联缓存。

由于软件的运行通常具有局部性(时间局部性、空间局部性),因此缓存能够有效提升CPU访问物理内存数据的性能;另外,操作系统和应用程序也可以根据CPU缓存的特点对代码实施优化,从而更好地利用缓存以提升性能。

设备与中断

本节介绍CPU与设备之间的主要交互方式。

内存映射输入输出

内存映射输入输出(Memory-Mapped I/O,MMIO)是一种常见的CPU控制和访问设备的方式

MMIO的原理是:把输入输出设备和物理内存放在同一个地址空间为设备内部的内存和寄存器也分配相应的地址。

CPU可以使用和访问物理内存一样的指令(ldrstr)去读写这些属于设备的地址;设备会通过总线监听CPU分配给自己的地址,然后完成相应的CPU访问请求。

轮询与中断

CPU通过MMIO配置的地址可以获取输入,但是CPU如何才能知道有输入事件发生了?

一种可行的做法是轮询(polling),即让CPU不断去通过MMIO查看UART是否有输入。但是这种做法会使得CPU长时间都处于等待UART输入的状态,造成CPU的浪费。

一种做法是中断(interrupt)机制就赋予了设备通知CPU的能力。设备通过向CPU发出中断来打断CPU的执行,使得CPU去处理这个中断。中断机制除了使得设备能够主动通知CPU外,还包括让一个CPU核心去通知另一个CPU核心等用途。

MMIO使得CPU可以主动地访问设备,中断使得设备能够主动地通知CPU,这两种机制是CPU与设备之间交互的重要方式。

  1. 从应用程序的视角来说,异常与中断的区别是什么?

    CPU在运行的过程中,也会被各种“异常”打断,这些“异常”有:

    ·指令未定义;

    ·指令、数据访问有问题;

    ·SWI(软中断);

    ·快中断;

    ·中断;

    中断也属于一种“异常”,导致中断发生的情况有很多,比如:

    ·按键;

    ·定时器;

    ·ADC转换完成;

    ·UART发送完数据、收到数据;

    这些众多的“中断源”,汇集到“中断控制器”,由“中断控制器”选择优先级最高的中断并通知CPU。

  2. 在发生特权级切换时,CPU会自动保存当前执行状态,包括:程序计数器(Program Counter,PC)、栈指针(Stack Pointer,SP)等。请分析:如果不保存程序计数器和栈指针,会出现什么问题?

​ CPU在处理异常结束后无法恢复到之前应用程序的执行状态。

  1. 正文中介绍,操作系统在异常处理函数开始执行时,通常该函数会先对应用程序的上下文进行保存(比如通用寄存器),这和CPU自动保存执行状态是否有冲突?请分析为什么需要软硬件一起来保存状态。

  2. 假设现在有一个很大的数组(远远大于缓存大小),请思考:在有缓存的情况下,是随机读取在这个数组上一字节的数据一万次,还是连续读取一万字字节块?

连续读取一万字快,连续读取可减小访问内存的次数,减小页面切换的开销。

  1. 轮询是否在任何情况下都比中断差?请结合具体的例子进行分析。

物联网成长计划(二)

应用层

平台层

网络层

感知层

MQTT协议

发布与订阅模式;

image-20211218094056447

image-20211218094115342

image-20211218094136201


LwM2M协议

轻量级M2M,资源有限的、轻量级、标准通用的物联网设备管理协议。

IOT设备发放服务

LiteOS设备开发

RTOS

实时操作系统,实时性。

LiteOS

“软实时”操作系统;

高实时性,高稳定性;

超小内核,基础内核可裁剪;

image-20211218093540938

image-20211218093609924

物联网应用开发

计算机字节、字、字长的区别

计算机字节、字、字长的区别

1word=2Byte=16bit
一个字由两个字节组成,16位组成
通常称16位是一个字,32位是一个双字,64位是两个双字
计算机的字长决定CPU一次处理实际位数的多少,字长越大,性能越优。

数据总线

(1) 是CPU与内存或其他器件之间的数据传送的通道。

(2)数据总线的宽度决定了CPU和外界的数据传送速度。

(3)每条传输线一次只能传输1位二进制数据。eg: 8根数据线一次可传送一个8位二进制数据(即一个字节)。

(4)数据总线是数据线数量之和。


地址总线

(1)CPU是通过地址总线来指定存储单元的。

(2)地址总线决定了cpu所能访问的最大内存空间的大小。eg: 10根地址线能访问的最大的内存为1024位二进制数据(1024个内存单元)(1B)

(3)地址总线是地址线数量之和。


控制总线

(1)CPU通过控制总线对外部器件进行控制。

(2)控制总线的宽度决定了CPU对外部器件的控制能力。

(3)控制总线是控制线数量之和。


总结

最后总结如下:
地址总线的宽度决定CPU的寻址能力;
数据总线的宽度决定CPU与其他元器件一次最大传送的数据量;
控制总线决定CPU对其他元器件的控制能力。
————————————————
版权声明:本文为CSDN博主「你若盛开,清风自来!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/daima3/article/details/102753293

AD7606模块记录

AD7606是一款集成式8通道同步采样数据采集系统,片内集成输入放大器、过压保护电路、二阶模拟抗混叠滤波器、模拟多路复用器、16位200 kSPS SAR ADC和一个数字滤波器, 2.5 V基准电压源、基准电压缓冲以及高速串行和并行接口。

AD7606采用**+5V单电源供电**, 可以处理±10V和±5V真双极性输入信号, 同时所有通道均以高达200KSPS的吞吐速率采样。输入钳位保护电路可以耐受最高达±16.5V的电压。 无论以何种采样频率工作, AD7606的模拟输入阻抗均为1M欧姆。它采用单电源工作方式, 具有片内滤波和高输入阻抗, 因此无需驱动运算放大器和外部双极性电源。

AD7606抗混叠滤波器的3dB截至频率为22kHz; 当采样速率为200kSPS时, 它具有40dB抗混叠抑制特性。灵活的数字滤波器采用引脚驱动, 可以改善信噪比(SNR), 并降低3dB带宽。

阅读更多...

物联网全栈成长计划(一、初识物联网)

初识物联网

image-20211218093018304

image-20211218093042084

通信技术

有线通信技术

  • 以太网

    标准以太网

    快速以太网

    实际以太网

  • PLC

    电力线通信

  • RS232

    异步传输标准接口

    例如VGA接口

    本地设备之间通信

  • M-Bus

    户用仪表总线

  • RS-485

    差分传输方式

    几十米到上千米


无线通信技术

蜂窝移动通信—2G\2G\4G通信技术

短距无线通信技术

  • 蓝牙

    2.4GHZ频段

  • WIFI

  • 2G\3G\4G

  • LoRa

  • Z-Wave

    适合于窄宽带,网络结构点单

  • ZigBee

    基于IEEE802.15.4标准的低功耗局域网协议

    短距离,低功耗,自组织,低数据率

    网络灵活不易维护

  • NB-IoT

  • SigFox

image-20211218093118452

LPWA通信技术

低功耗广域网,(sigfox 、 NB-IOT 、LoRa )

  • sigfox

  • NB-IOT

    构建于蜂窝网络的窄带物联网

  • LoRa

    基于扩频技术的超远距离传输协议

image-20211201083721151

IOT平台

物联网协议

  • MQTT
  • CoAP
  • HTTP

image-20211218093202697

物联网平台提供MQTT、CoAP、HTTP接入的接口。

物联网平台

image-20211218093220583

NB-IOT

narrow Band ,基于窄带的通信技术。

物联网关

网络层。

物联网应用开发入门

文章来源:https://www.bilibili.com/video/BV1Bh41147M7?p=1&share_medium=android&share_plat=android&share_session_id=5bae398d-d0e3-4632-94da-bb4b9aabf866&share_source=WEIXIN&share_tag=s_i&timestamp=1638186683&unique_k=m5YdnhH

WEB应用基础

应用服务架构

  • C/S架构

    客户机/服务器

  • B/S架构

    浏览器/服务器模式,是C/S架构的一种改进。利用了WWW浏览器技术,使用通用浏览器就能实现原来需要专用软件才能实现的功能。

架构特点

  • C/S架构

    优点:充分发挥客户端PC的处理能力,可以在客户端处理工作后再提交给服务器。

    缺点:需要安装专用客户端软件,开发维护成本高。

    image-20211129212024166

  • B/S架构

    优点:成本低,维护方便,开发简单,不需要安装专用软件,只需要使用浏览器。

    缺点:通信开销大、系统和数据的安全性较难保障。

    image-20211129212042234

Web开发

Web开发分为前端开发和后端开发。

前端是指直接和用户接触的网页。

后端是只程序、数据库和服务器层面的开发。

Web应用开发需要遵循的标准叫做Web标准,Web标准是一系列标准的集合。

HTML

超文本标记语言,构建网页的一种标记语言。

AJAX

是一种与服务器交换数据的技术,可以再不重新载入整个页面的情况下更新网页的一部分。

优势:

  • 大幅提升用户体验,减轻服务器端的压力。
  • 异步加载,局部更新
  • 前端通过AJAX访问服务器进行数据更新

跨域请求

同源策略:

  • 浏览器的安全策略
  • 协议名+主机名+端口号
  • http://localhost:8080/web

image-20211129221553985

image-20211129221623954

跨域资源共享CORS,允许浏览器向跨源服务器发送XMLHttpRequest请求,从而克服AJAX只能同源使用的限制。

物联网应用侧开发

整体方案

image-20211129222141482

image-20211129222257558

I

物联网应用典型架构

image-20211217235619749

设备管理

上面是IOT控制台的设备常规界面,可以通过控制台进行操作管理设备。

但是面向最终客户提供服务的时候,不可能将你的华为云账号给你的客户,让他在控制台进行操作。这种场景下,现需要基于应用侧API设备管理的对应的接口,在应用侧实现对接口的调用,然后再应用界面上将相关的功能开放给你的用户,用户通过应用触发动作,应用与平台对接,调用对应的接口,实现上面的一些设备注册、查询、删除等管理功能。

业务处理

应用的核心业务逻辑,主要对物联网设备上报数据的分析处理和对物联网设备行为的控制。

数据获取和命令下发的功能由物联网平台提供,其他业务逻辑需由开发者自行实现。

image-20211218091452910

用户管理

若物联网应用需要供都哦个用户使用,建议加入用户管理功能,实现权限控制,分组管理。

用户管理能力由厂商根据主机的需求自行设计实现。

image-20211218091543475

IOT平台侧无法对用户角色进行感知,只能在应用侧解决。

API集成开发

重点API接口

创建产品

image-20211218091745253

创建设备

image-20211218091828903

设备标识码:例如小熊派,标识码有的可以自定义,有的有明确要求串号之类的。

下发命令

如果设备没有响应,平台会返回给应用服务器超时,平台超时时间是20秒。

image-20211218091900542

下发异步设备命令

查询设备属性

image-20211218091944459

查询设备影子数据

image-20211218092005579

应用场景案例

image-20211218092118894

image-20211218092051146

image-20211218092142325

API调用方法

image-20211218092202901

Verilog 基础

Quartus设计和仿真

在建立完一个项目后,在设计中可以采用图形设计方法,也可以使用语言设计方法,一般是两种方法混用

file - new 选择新建文件类型。

其中,“AHDL File” 是AHDL格式的文件;

“Block Diagram/Schematic File” 是图形文件;

“Verilog HDL File” 是Verilog HDL 格式的文件;

“VHDL File” 是VHDL格式的文件。

阅读更多...

HarmonyOS设备开发工程师(三)

HarmonyOS 驱动基础

设备驱动

驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息。

驱动程序能使计算机与相应的设备进行通信。

不同的操作系统,硬件的驱动程序也各不相同。

UNIX环境高级编程(一)

本书描述了UNIX系统的程序设计接口——系统调用接口和标准C库提供的很多函数。UNIX系统调用接口和库函数可参见《UNIX》程序员手册第2、3部分,但是手册中并没有给出实例及基本原理,而这些就是本书所要讲述的内容。

《UNIX环境高级编程》精选了常用的400多个系统调用和库函数,这些接口基本是UNIX系统软件的核心功能,涵盖了UNIX/Linux系统编程的方方面面。本书通过简明完整的例子来说明其用途,不仅说明了其基本用法,还反映了不同平台之间的细微差异,有助于读者对整个编程环境有全面深入的了解。


UNIX环境高级编程(一)

第一章 UNIX基础知识

1.2 UNIX体系结构

操作系统可定义为一种软件,它控制计算机硬件资源,提供程序运行环境,这种软件通常称之为内核(kernel),它相对较小,位于环境的核心。

微信图片_20211125095739

系统调用(System Call):内核的接口称为系统调用。

公有函数库构建在系统调用接口之上,应用持续既可使用公有函数库,也可使用系统调用。

shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口。

广义上来说,操作系统包括了内核和一些其他软件,如系统实用程序(system utility)、应用程序、shell以及公有函数库等。

如Linux是GNU操作系统使用的内核,这种操作系统可称为GNU/Linux操作系统,也可简单的称为Linux。


1.3 登录

  1. 登录名

    UNIX在其口令文件(/etc/passwd文件)中查看登录名。

    口令文件中的登录项由7个以冒号分隔的字段组成,依次是:

    登录名:加密口令:数字用户ID:数字组:注释字段:起始目录:shell程序

    image-20211125101829352


  2. shell

  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信