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
上一次我们给大家说了主键索引的目录结构,只要在一个主键索引里包含每个数据页跟他最小主键值,就可以组成一个索引目录,然后后续你查询主键值,就可以在目录里二分查找直接定位到那条数据所属的数据页,接着到数据页里二…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
