指令周期

mqtt协议系统设计参考

蓝咒 提交于 2020-01-07 15:52:39
作者:极寒 链接:https://zhuanlan.zhihu.com/p/28525517 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 回顾自己的工作经历最遗憾的是没有用代码实现设计好的系统就匆匆离职了!写这篇文章主要目的是分享一下实现通信服务的思路,方便大家设计自己的通信服务,也希望通过分享实践知道设计中的不足。工作的公司是做电动汽车充电的可以说是一个很伟大的物联网项目,一个EVCS系统(Electric vehicle charging system)包括APP、云平台、充电桩、电动汽车等部分。在云平台众多的服务中通信服务是一个负责接入嵌入式网关和与后端业务服务相协调的中间件。今天主要根据自己的经历分享一下通信服务的实现细节,其中包括具体实践的也有针对系统缺陷做的一些思考。本文内容不局限于电动汽车充电系统只是以电动汽车充电系统为例,也可以作为基于mqtt协议系统的设计参考。 术语说明 嵌入式网关:它一般由嵌入式微处理器、外围硬件设备、嵌入 式操作系统以及用户的应用程序等四个部分组成。在本系统中负责继电器的开关以及与服务器的网络通信。 充电设备(充电桩):给电动汽车充电的设备通过充电枪与车连接,里面包含了一个嵌入式网关。 comm:一个需要我们实现的broker扩展程序,communication 的简称。 通信服务

内嵌汇编

[亡魂溺海] 提交于 2020-01-05 09:58:01
参考1、AT&T汇编语言与GCC内嵌汇编简介 2、 Professional.Assembly.Language十三章 ARM GCC 内嵌(inline)汇编手册 内嵌汇编语法如下: __asm__ __volatile__ ( 汇编语句模板: 输出部分: 输入部分: 破坏描述部分 );   汇编语句模板由汇编语句序列组成, 语句之间使用“;”、“\n”或“\n\t”分开 。指令中的操作数可以使用占位符引用C语言变量,操作数占位符最多10个,名称如下:%0,%1…,%9。指令中使用占位符表示的操作数,总被视为long型(4个字节),但对其施加的操作根据指令可以是字或者字节,当把操作数当作字或者字节使用时,默认为低字或者低字节。对字节操作可以显式的指明是低字节还是次字节。方法是在%和序号之间插入一个字母,“b”代表低字节,“h”代表高字节,例如:%h1。 “__asm__” 表示后面的代码为内嵌汇编,“asm”是“__asm__”的别名。 “__volatile__” 表示编译器不要优化代码,后面的指令保留原样,“volatile”是它的别名。括号里面是汇编指令   C语言关键字volatile(注意它是用来修饰变量而不是上面介绍的__volatile__)表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。该关键字在多线程环境下经常使用

曹大谈内存重排

淺唱寂寞╮ 提交于 2020-01-05 03:38:18
目录 什么是内存重排 CPU 重排 编译器重排 为什么要内存重排 内存重排的底层原理 总结 参考资料 写这篇文章的原因很简单,公司内部的 Golang 社区组织了第一期分享,主讲嘉宾就是我们敬爱的曹大。这个必定是要去听的,只是曹大的讲题非常硬核,所以提前找他要了参考资料,花了 1 个小时提前预习,才不至于在正式分享的时候什么也不懂。当然了,这也是对自己和主讲者的尊重。所有的参考资料都在文章最后一部分,欢迎自行探索。 在我读曹大给我的中英文参考资料时,我发现英文的我能读懂,读中文却很费劲。经过对比,我发现,英文文章是由一个例子引入,循序渐进,逐步深入。跟着作者的脚步探索,非常有意思。而中文的博客上来就直奔主题,对于第一次接触的人非常不友好。 两者就像演绎法和归纳法区别。国内的教材通常是演绎法,也就是上来先讲各种概念、原理,再推出另一些定理,比较枯燥;国外的教材更喜欢由例子引入,步步深入,引人入胜。这里,不去评判孰孰劣。多看看一些英文原版材料,总是有益的。据我所知,曹大经常从亚马逊上购买英文书籍,这个侧面也可以反映曹大的水平高啊。据说英文书一般都很贵,可见曹大也是很有钱的。 所以啊,技术文章写好不容易,我也自省一下。 什么是内存重排 分两种,硬件和软件层面的,包括 CPU 重排、编译器重排。 CPU 重排 引用参考资料 【内存一致模型】 里的例子: 在两个线程里同时执行上面的代码,A

操作系统-同步互斥

£可爱£侵袭症+ 提交于 2020-01-03 01:15:59
并发性:互斥和同步 基本概念 原子操作: 一个函数或动作由一个或多个指令的序列实现,对外是不可见的;保证指令的序列要么作为一个组执行, 要么都不执行,对系统状态没有可见的影响。 保证了并发的隔离。 临界区:一段代码,在这段代码中进程将访问共享资源,当另一个进程已经在这段代码中运行时,这个进程就不能在这段代码中运行。 临界资源:虽然多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所使用,我们把一次只允许一个进程使用的资源成为临界资源。包括许多的物理设备如打印机,以及许多的变量和数据。 死锁:两个或两个以上的进程因其中的每个进程都在等待其他进程做完某些事情而不能继续执行。 活锁:两个或两个以上进程为了响应其他进程中的变化而持续改变自己的状态但不做有用的工作。 互斥:当一个进程在临界区访问共享资源的时候,其他进程不能进入该临界区访问任何共享资源。 同步:为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递消息所产生的制约关系。进程间的直接制约关系就是源于他们之间的相互合作。 竞争条件:多个线程或者进程在读写一个共享资源时,结果依赖于它们执行的相对时间,这种情形称为竞争条件 饥饿: 一个可运行的进程尽管能继续执行,但被调度程序无限期地忽视,而不能被调度执行的情形。 忙等待/自旋等待: 进程在得到临界区访问权之前

HITICS-2019大作业报告

女生的网名这么多〃 提交于 2019-12-30 01:24:03
计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机类 *指 导 教 师 吴锐   * 计算机科学与技术学院 2019年12月 摘 要 当hello world这个句子显示在电脑上时,标志着世界上第一个程序的诞生。然而很多人都认为让hello world显示在屏幕上是一件很简单的事。殊不知,这个程序的所有执行周期却经历了很多阶段,当然,计算机科学家们在这个程序执行之前也做了大量的铺垫。所以,当我们研究hello world程序的整个生命周期时,我们发现这个程序是不平凡的,我们也理解了计算机科学家们的执着与智慧。从开始对这个程序的编码,再到预处理,编译的高级语言阶段。再到汇编成机器语言,转换成机器码。再进行链接生成可执行文件,再执行。在此过程中,CPU,操作系统,内存,磁盘等计算机的重要组成部分都有条不紊的相互协调工作,其中又产生了进程的创建与回收、异常处理、内存管理等后台。这些后台过程都默默地支持着程序的执行。本篇论文来告诉你hello world被打印在电脑屏幕里所要经历的所有过程。 **关键词:**程序 编码 执行 进程管理 储存管理 目 录 第1章 概述 - 4 - 1.1 Hello简介 - 4 - 1.2 环境与工具 - 4 - 1.3 中间结果 - 4 - 1.4 本章小结 - 4 - 第2章 预处理 - 5 - 2.1 预处理的概念与作用 -

接口与总线 考点整理

删除回忆录丶 提交于 2019-12-29 23:11:06
说明 以下内容为个人整理,答案也是个人回答,不一定对,所以你对答案有任何问题,都欢迎与我讨论。 Q01:51单片机P0、P1、P2、P3口功能作用? 答: P0可做地址口的低8位也可以做数据口和I/O口 P1可做普通的I/O口 P2除了做I/O口,也是作为地址口的高8位(总共16位) P3 既可以是普通IO口,也可以是外部中断、定时、外部输入的端口 Q02:当串口发送一个数据或接收数据时,哪两个位会置位? 答: 接收数据时,RI 会置位 发送数据时,TI 会置位 Q03:81单片机的累加器是什么? 答: ACC Q04:当晶振频率为12MHz,定时器的频率为多少? 答: 频率为1Mhz 说明: 机器频率 = 晶振频率/12 Q05:LED的显示分为几种? 答: 两种,动态扫描和静态扫描 说明: 动态扫描中LED的调度是放在定时器中 Q06:51单片机内存划分 答: 低128个字节 从00H~1FH(32字节):寄存器区,四组寄存器区,一组有8个寄存器 从20H~2FH(16字节 128位):位寻址区 剩下:普通内存 高128个字节 特殊功能寄存器 Q07:ex0、ex1、et0的含义 答: ex0 = 1; //允许外部中断0 ex1 = 1; //允许外部中断1 et0 = 1; //允许定时器0中断 1 2 3 说明: 在这里插入图片描述 上图为IE(中断允许寄存器) EA

计算机组成原理期末复习往年卷子

怎甘沉沦 提交于 2019-12-29 21:35:29
1. I/O设备的编址方式通常有___ 统一编址 __和_ 独立编址 __两种方式。 P145 2.Cache是一种高速缓冲存储器,是为了解决____CPU____和___主存____之间速度不匹配而采用的一项重要技术 。 P124 3.在计算机系统中, I/O 设备与主机传递消息的控制方 式除了 程序查询方式、程序中断方式 ( 硬件方式 ) 外,还有_ _DMA__ 方式、 __ 通道 _ 方式、 __I/O 处理机 _ _方式( 软件方式 )。 P148 1. I/O设备的编址方式通常有___ 统一编址 __和_ 独立编址 __两种方式。 P145 4.动态随机存储器常见的刷新方式有___集中式__刷新、__分散式__刷新、_异步式___刷新三种。 P109 5.直接寻址方式中,指令的地址码部分直接给出操作数在内存中的 真实地址 EA (有效地址) ,在执行阶段只需要__ __1 ____次访存即可得到操作数。 P178 6.RISC称为 ___精简指令系统计算机 ,与其对应的是___ CISC ,即复杂指令系统计算机 。 P189 7.用二进制代码0、1表示的计算机语言称为___ _ 机器语言 ______,用助记符编写并增加了指示性指令的计算机语言称为____ 汇编语言 ____。 8.CPU从主存取出一条指令并执行该指令所需的全部时间叫做__ _ 指令周期 _。 P203

SIMD指令集

▼魔方 西西 提交于 2019-12-25 05:50:11
概述 SIMD,即Single Instruction, Multiple Data,一条指令操作多个数据。是CPU基本指令集的扩展。主要用于提供fine grain parallelism,即小碎数据的并行操作。如说图像处理,图像的数据常用的数据类型是RGB565, RGBA8888, YUV422等格式,这些格式的数据特点是一个像素点的一个分量总是用小于等于8bit的数据表示的。如果使用传统的处理器做计算,虽然处理器的寄存器是32位或是64位的,处理这些数据确只能用于他们的低8位,似乎有点浪费。如果把64位寄存器拆成8个8位寄存器就能同时完成8个操作,计算效率提升了8倍.SIMD指令的初衷就是这样的,只不过后来慢慢cover的功能越来越多. 好多处理器都有SIMD指令,我们先仅关注Intel的SIMD。Intel的初代SIMD指令集是MMX,Multi-Media Extension, 即多媒体扩展,因为它的首要目标是为了支持MPEG视频解码.MMX将64位寄存当作2X32或8X8来用,只能处理整形计算.这样的64位寄存器有8组,分别命名为MM0~MM7.这些寄存器不是为MMX单独设置的,而是借用的FPU的寄存器,也就是说MMX指令执行的时候,FPU就没有办法工作。后来Intel进一步实现了SSE, SSE2~SSE4指令集,给了他们单独的寄存器,之后MMX就被停掉了。

计算机组成与结构复习整理(五)

霸气de小男生 提交于 2019-12-24 01:27:53
指令系统与中央处理机组织 指令系统 基本概念 指令格式 一般格式 按指令所包含的地址个数将指令划分 指令长度 寻址方式 指令类型 指令类型 堆栈和堆栈存取方式 中央处理机组织 CPU的三种实现方式 CPU中的主要寄存器 单总线数据通路 CPU四项基本功能 CPU时序控制方式 CPU控制流程 一条完整指令的执行 ①Add (R3),R1 ②无条件转移指令的控制序列 CPU性能设计 指令系统 基本概念 ①程序员用各种语言编写的程序最后要翻译(解释或编译)成以指令形式表示的机器语言以后,才能在计算机上运行。计算机的指令有微指令、机器指令和宏指令之分。 微指令是微程序级的命令,属于硬件;宏指令是由若干机器指令组成的,属于软件;机器指令介于二者之间,因而是硬件和软件的界面。 ②一台计算机能执行的机器指令的集合统称位该机的指令系统。 指令格式 一般格式 操作码 地址码 OP D 按指令所包含的地址个数将指令划分 a.三地址指令:(D1)OP(D2)→ D3 b.二地址指令:(D1)OP(D2)→D2 c.单地址指令:(D)OP (A)→ A(累加寄存器) d.零地址指令:空操作、停机 指令长度 选取原则: ①指令长度应为存储器基本字长的整数倍。 ②指令字长应尽量短。 寻址方式 ①立即寻址:| OP | 操作数地址 | ②直接寻址:| OP | @间接地址 | ③间接寻址:| OP | Rx |

ARM处理器和体系结构介绍(Cortex-A9)

↘锁芯ラ 提交于 2019-12-21 18:07:29
ARM(Advanced RISC Machines) 概述 :有三种含义,它是一个公司的名称,是一类微处理器的通称,还是一种技术的名称。 技术特征 体积小、低功耗、低成本、高性能。 支持Thumb(16位)/ARM(32位)双指令集,能很好地兼容8/16位器件。 大量使用寄存器,指令执行速度更快。 大多数数据操作都在寄存器中完成。 寻址方式灵活简单,执行效率高。 指令长度固定。 嵌入式RISC微处理器 概述 :RISC(Reduced Instruction Set Computer)是精简指令集计算机,RISC把着眼点放在如何使计算机的结构更加简单和如何使计算机的处理速度更加快速上。RISC选取了使用频率最高的简单指令,抛弃复杂指令,固定指令长度,减少指令格式和寻址方式,不用或少用微码控制。 嵌入式CISC微处理器 概述 :传统的复杂指令级计算机(CISC)更侧重于硬件执行指令的功能性,使CISC指令及处理器的硬件结构更加复杂。 RISC和CISC的区别 ARM的基本数据类型 ARM采用32位架构,ARM的基本数据类型有以下3种。 Byte:字节,8bit。 Halfword:半字,16bit(半字必须与2字节边界对齐)。 Word:字,32bit(字必须与4字节边界对齐)。 注意 ARM 系统结构 v4 以上版本支持以上3种数据类型,v4 以前版本仅支持字节和字。