ARM基础
文章目录
- 1.ARM成长史
- 1.1 ARM发展的里程碑1
- 1.2 ARM发展的里程碑2
- 1.3 ARM发展的里程碑3
- 1.4 ARM发展的里程碑4
- 2.ARM的商业模式和生态系统
- 3.先搞清楚各种版本号
- 3.1 ARM 的型号命名问题
- 3.2 ARM 的几种版本号
- 3.3 ARM型号的发展历程
- 4.SoC和CPU的区别 & 外设概念的引入
- 4.1 SoC和CPU
- 4.2 外设(Peripheral)
- 5.单片机和嵌入式
- 5.1 芯片平台
- 5.2 资源、价格、应用领域
- 5.3 开发模式
- 5.4 技术特征
- 6.嵌入式系统的特点和演进方向
- 6.1 嵌入式系统组成
- 6.2 嵌入式系统的分层
- 6.3 嵌入式系统的发展演进1
- 6.4 嵌入式系统的发展演进2
- 7.交叉编译
- 7.1 两种开发模式
- 7.2 为何使用交叉编译
- 7.3 交叉编译的特点
- 8.CPU的设计原理,数据总线和地址总线
- 8.1 三种总线
- 9.Jlink,SD卡等辅助设备
- 9.1 嵌入式开发特点
- 9.2 Jlink的作用
- 9.3 SD卡的作用
- 9.4 USB转串口线的作用
1.ARM成长史
1.1 ARM发展的里程碑1
- ARM的前身为艾康电脑(Acorn)1978年英国剑桥创建;
- 1980年末 苹果加入合作开发ARM核心;
- 1985年第一款商用的RISC处理器即为ARM1上市;
- 1990年 艾康公司 分立出我们现在所知道的 ARM Aduvanced RSIC Machines ARM公司上市;
1.2 ARM发展的里程碑2
- 1991年,ARM推出第一款嵌入式RISC处理器,即ARM6
- 1993年,发布ARM7
- 1997年,发布ARM9TDMI
- 1999年,发布ARM9E
- 2001年,发布 ARMv6 架构
- 2002年,发布 ARM11 微架构
1.3 ARM发展的里程碑3
- 2004年,发布 ARMv7 架构的 Cortex 系列处理器,同时推出Cortex-M3
- 2005年,发布 Cortex-A8 处理器
- 2007年,发布 Cortex-M1 和 Cortex-A9
- 2009年,实现 Cortex-A9、发布 Cortex-M0
- 2010年,推出 Cortex-M4、成立 Linaro,推出 Cortex-A15 MPcore 高性能处理器
1.4 ARM发展的里程碑4
- 2011年,推出Cortex-A7,ARMv8 发布
- 2012年,开始64位处理器进程
2.ARM的商业模式和生态系统
- ARM只负责设计IC,并且出卖自己的设计IP(版权)。
- ARM自己不生产芯片,而是把设计IP授权给其他半导体厂商来生产芯片。
- 严格地说,ARM并不是一家半导体厂商。
3.先搞清楚各种版本号
3.1 ARM 的型号命名问题
- ARM7 和 ARMv7不是一回事
- Cortex-A9 比 Cortex-A7更先出来
- 型号很乱,初学者分不清那个是那个
3.2 ARM 的几种版本号
- ARM内核版本号 ARMv7
- ARM SOC版本号 Cortex-A8
3.3 ARM型号的发展历程
ARM内核版本号和SoC版本号是由ARM确定的,而SoC型号是由半导体公司确定的。SOC(system on ship)内核版本号 SOC版本号 芯片型号(三星)ARMv1......ARMv4 ARM7 S3C44B0ARMv4 ARM9 S3C2440 S3C2410ARMv5 ARM9+XScaleARMv6 ARM11 S3C6410ARMv7 cortex-Mcortex-Acortex-R-----------------------------------------------------------cortex-A8 S5PV210/S5PC100cortex-A9 Exynos4412cortex-A7 全志A10 A20 A31-----------------------------------------------------------cortex-A53 A57 高通骁龙815和410,苹果iPhone5s
cortex-M microcontroller cortex-A application cortex-R realtime |
4.SoC和CPU的区别 & 外设概念的引入
4.1 SoC和CPU
- SoC = System on Chip
- 芯片的发展方向:从CPU到SoC
- 现在已经没有纯粹的CPU了,都是SoC
- ARM出卖的内核其实就是CPU(当然还需要总线),各种外设是半导体厂商自己添加的。
4.2 外设(Peripheral)
- 外设就是外部设备
- SoC中外设大部分都跑进去了
- 网卡、音频编解码等个别还经常在外面
- 芯片设计的趋势是更大集成度,近年甚至将音视频编解码、DDR都集成进SoC内做成所谓单芯片解决方案。如海思Hi3518E
- 裸机学习其实就是学习SoC的内核(CPU,表现为汇编指令集)和各种外设(如串口)
5.单片机和嵌入式
5.1 芯片平台
- 主流的芯片平台:51、PIC、AVR、MSP430、STM32等
- 主流的嵌入式平台:ARM、PPC、MIPS
5.2 资源、价格、应用领域
- 单片机片上资源有限、价格低、应用领域多为小家电、终端设备等。
- 嵌入式系统片上资源丰富、价格较高、应用领域宽广,如智能手机、平板电脑、游 戏机、路由器、摄像机、智能电视机、广告机、智能手表、收银机等。
5.3 开发模式
- 单片机开发多为裸机,程序规模小,多为单个程序员独立开发。有些复杂产品也会使用高端单片机如STM32之类,并使用RTOS(uCOS、freeRTOS等)。
- 嵌入式开发几乎全部基于嵌入式操作系统,目前使用最多的是linux和Android。
5.4 技术特征
编程语言方面:单片机主要使用C语言(少量用汇编),和标准C略有不同,很少使用结构体、函数指针等C语言高级特性。而嵌入式开发较复杂,一般分底层和应用层。底层使用C语言,应用层使用C、C++、Java等语言均有。嵌入式C语言对结构体、数据结构、算法、函数指针(用来实现面向对象)等高级特性使用比较多。
软硬件组件方面:单片机多涉及一些简单外设,譬如串口、I2C、ADC、LCD(小屏幕和分辨率);
而嵌入式系统则涉及更多复杂外设,譬如网络(有线网卡、wifi、蓝牙等)、USB、音视频编解码等。
6.嵌入式系统的特点和演进方向
- 专用、软硬件可裁剪可配置
- 低功耗、高可靠性、高稳定性
- 软件代码短小精悍
- 代码可固化
- 实时性
- 弱交互性
- 专用开发工具及开发环境
- 专业开发人员
6.1 嵌入式系统组成
- 硬件:微处理器、存储器、I/O接口、输入输出设备等
- 软件:嵌入式操作系统、BSP boardsupport package板级支持板、应用软件;
6.2 嵌入式系统的分层
- 应用程序:GUI、GPRS、3G、WIFI等;
- 操作系统:智能操作系统、操作平台;
- 硬件:中央处理器、ROM、RAM、IO和电源;
6.3 嵌入式系统的发展演进1
- 以单芯片为核心、可编程控制器存在形式
没有操作系统支持
软件以汇编为主
功能单一、处理效率低、存储容器小、没有对外接口
使用简单、价格低 - 以嵌入式CPU为基础、简单操作系统为核心
CPU种类多,通用性弱
系统开销小,效率高
达到一定兼容性,拓展性
用户体验度不高,交互界面不够友好
6.4 嵌入式系统的发展演进2
- 以嵌入式操作系统为标志
兼容性好,适用于不同平台
系统开销小,效率高,具有高度模块化及拓展性
图形化界面,用户界面友好
丰富的外部接口 - 以物联网为标志
将传感器技术、互联网技术及传统嵌入式技术综合联系
小型化、智能化、网络化及可视化
低功耗、绿色环保
多核技术SWP、云计算技术及虚拟化技术
7.交叉编译
7.1 两种开发模式
- 非嵌入式开发:A类机编写、编译,得到可执行程序,发布给A类机运行;
- 嵌入式开发:A类机编写、编译,得到可以行程序,发布给B类机运行;
7.2 为何使用交叉编译
- 嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至操作系统都没有。
- 交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和 应用级软件)
7.3 交叉编译的特点
- 必须使用交叉编译工具链;
- 由于可执行程序不能再本地运行调试,因此,必须配合一定的手段(专用调试器、JTAG调试器、USB下载、串口下载、SD启 动、网络共享等)将可执行程序加载到目标嵌入式设备上运行调试;
8.CPU的设计原理,数据总线和地址总线
8.1 三种总线
数据总线:CUP通过地址总线寻址,然后通过数据总线与外部设备交换信息;
地址中线:地址总线的位数决定CPU的寻址范围;数据总线的位数决定CPU单次通信能交换的信息数量;总线的速度决定CPU和外设互换信息的速度。
命令总线:CPU在通过数据总线进行数据交换时,会通过命令总线发送一个命令,然后再通过地址总线和数据总线,进行数据交换;
注意:
电脑位数指的是数据总线数量
CPU的地址总线位数和数据总线可以不同(典型代表就是51单片机),但是一般都相同。
CPU的位数指的是数据总线的位数。
32位CPU寻址的范围是4G,所以最多支持4G内存;
数据总线是32位的,所以内存是32位的好,所以编程最好用int
9.Jlink,SD卡等辅助设备
9.1 嵌入式开发特点
- 采用交叉编译,不便于本机运行调试程序;
- 嵌入式需要BootLoader来启动,BootLoader必须先存在于启动介质中,需要专业工具
- 嵌入式系统无法通过纯软件实现单步调试,因此,必须借助专用的调试器。
9.2 Jlink的作用
- 用于下载可执行程序到目标机;
- 在目标机上实现单步调试,便于开发BootLoader;
9.3 SD卡的作用
作为启动介质。工作方式是:事先用读卡器将SD卡连接到开发机(一般是Windows电脑),通过写卡软件将交叉编译得到的可执行程序镜像烧录到SD卡,然后将SD卡插入 嵌入式目标机卡槽,设置正确的启动方式启动,则系统可以从SD卡中烧录的镜像处启动。
9.4 USB转串口线的作用
- 串口本身用来做嵌入式目标机的调试输出,主要目的是用来监视及调试软件。
- 因为现在大部分个人电脑(大部分台式机和几乎全部的笔记本电脑)都未配置DB9串口,因此工作中一般直接使用USB转串口线来连接PC和开发板。
相关文章:

ARM基础
文章目录1.ARM成长史1.1 ARM发展的里程碑11.2 ARM发展的里程碑21.3 ARM发展的里程碑31.4 ARM发展的里程碑42.ARM的商业模式和生态系统3.先搞清楚各种版本号3.1 ARM 的型号命名问题3.2 ARM 的几种版本号3.3 ARM型号的发展历程4.SoC和CPU的区别 & 外设概念的引入4.1 SoC和CPU…...

Python排序 -- 内附蓝桥题:错误票据,奖学金
排序 ~~不定时更新🎃,上次更新:2023/02/28 🗡常用函数(方法) 1. list.sort() --> sort 是 list 的方法,会直接修改 list 举个栗子🌰 li [2,3,1,5,4] li.sort() print(li) …...
容器化部署是什么意思?有什么优势?
多小伙伴不知道容器化部署是什么意思?不知道容器化部署有什么优势?今天我们就来一起看看。 容器化部署是什么意思? 容器化部署是指将软件代码和所需的所有组件(例如库、框架和其他依赖项)打包在一起,让它…...
1.设计模式简介
一、设计模式的目的 1. 代码重用性 2. 可读性 3. 可扩展性 4. 可靠性 5. 高内聚,低耦合 二、设计模式七大原则 1. 单一职责原则 1)降低类的复杂度,一个类只负责一项职责 2)提高类的可读性,可维护性 3&#x…...
【算法题解】实现一个包含“正负数和括号”的基本计算器
这是一道 困难 题。 题目来自:leetcode 题目 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意: 不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 提示: s 由数字、‘’、‘-’…...
网站服务器如何防护攻击?网站服务器被挂马如何检测
网站服务器是指安装在互联网上的服务器,主要用于提供网站服务。由于网站服务器的重要性,它也是攻击者的活动焦点,因此如何防护攻击就显得尤为重要。本文将分析网站服务器是如何被攻击的以及如何防护攻击。 网站服务器是怎么被攻击的? 网站…...
JavaSE16-面向对象-接口
文章目录一、概念二、格式1.使用interface来定义接口2.implements实现接口三、接口中的成员1.常用成员2.新增成员(不重要)2.1 默认方法2.2 静态方法2.3 私有方法四、继承关系 & 实现关系五、抽象类和接口的使用区别一、概念 接口就是规范\规则&…...
安卓设备蓝牙键盘快捷键
安卓设备蓝牙键盘快捷键前言注意鼠标按键系统快捷键桌面快捷键输入法快捷键其它快捷键旧快捷键(已失效)前言 安卓设备可以通过蓝牙或有线外接键盘,值得一提的是,安卓平板连接蓝牙键盘和蓝牙鼠标是一个不错的组合。本文以鸿蒙3.0平…...

Puppeteer项目结构梳理
最近接触了一个个人感觉很奈斯的项目,故记录思路如下: puppeteer项目梳理: 入口文件 run.js 入口命令 node run.js YourConfig.json 1、我们可以在自己的config.json里面设置好 ①、登录的用户名密码;aws或其它服务器的access等id,accessKey…...

(02)Unity HDRP Volume 详解
1.概述这篇文章主要针对HDRP中的Volume和Volume Post-processing进行解释,针对于各个组件只能进行部分参数的解释,具体的信息可参考官方资料,这里只是对官方文档的图片效果补充以及笔者自己的理解。看到这里进入正文,请确保你的Un…...

拒绝B站邀约,从月薪3k到年薪47W,我的经验值得每一个测试人借鉴
有时候,大佬们总是会特立独行。因为像我这样的常人总是想不通,究竟是怎样的情境,连B站这样的大厂面试都可以推掉? 缘起一通电话,踏出了改变人生轨迹的第一步 我是小瑾,今年28岁,2016年毕业于陕…...
分享一种实用redis原子锁的方式
1. setnx(lockkey, 当前时间过期超时时间) ,如果返回1,则获取锁成功;如果返回0则没有获取到锁,转向2。2. get(lockkey)获取值oldExpireTime ,并将这个value值与当前的系统时间进行比较,如果小于当前系统时间…...
【华为OD机试】 字符串解密(C++ Java JavaScript Python)
题目描述 给定两个字符串string1和string2。 string1是一个被加扰的字符串。 string1由小写英文字母(’a’’z’)和数字字符(’0’’9’)组成,而加扰字符串由’0’’9’、’a’’f’组成。 string1里面可能包含0个或多个加扰子串,剩下可能有0个或多个有效子串,这些有…...

金三银四,助力你的大厂梦,2023年软件测试经典面试真题(1)(共3篇)
前言 金三银四即将到来,相信很多小伙伴要面临面试,一直想着说分享一些软件测试的面试题,这段时间做了一些收集和整理,下面共有三篇经典面试题,大家可以试着做一下,答案附在后面,希望能帮助到大…...
假如面试官要你手写一个promise
promise 在开发中,经常需要用到promise,promise具有很多特性,这一次将对promise特性进行总结,并从零写一个promise。 步骤一 Promise特点 1,创建时需要传递一个函数,否则会报错2,会给传入的函…...

【leetcode】寻找重复数
题目链接:寻找重复数https://leetcode.cn/problems/find-the-duplicate-number/ 方法一:快慢指针 因为只有一个数字是重复的,且一个数字正好对应一个唯一的下标,所以可以将数组抽象为一个链表,假定数组为{1,2,3,4,5,…...
LeetCode 1247. Minimum Swaps to Make Strings Equal【数学,贪心,字符串】
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
pid控制加热算法,附代码仓库
1、该项目层次化结构清晰,代码框架耦合度低,可复用性、可移植性强。 2、功能代码与底层硬件无直接关联,无需更改上层应用逻辑,只需更改接口文件,即可移植到不同的硬件平台; 3、使用lwrb开源组件、pid开源算…...
一文看懂预训练和自训练模型
说到预训练模型,不得不提迁移学习了,由于很多数据不是标签数据,人工标注非常耗时,神经网络在很多场景下受到了限制。但是迁移学习和自学习的出现,在一定程度上缓解甚至解决了这个问题。我们可以在标签丰富的场景下进行…...

(五十四)大白话索引的页存储物理结构,是如何用B+树来实现的?.md
上一次我们给大家说了主键索引的目录结构,只要在一个主键索引里包含每个数据页跟他最小主键值,就可以组成一个索引目录,然后后续你查询主键值,就可以在目录里二分查找直接定位到那条数据所属的数据页,接着到数据页里二…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...