Cortex-M0/M0+/M3/M4处理器是什么鬼?

一、说在前面的话
自从arm在2016年的十月发布两款armv8-m架构的新处理器cortex-m23和cortex-m33以来,已经过去了3年多,而市面上基于这两款处理器的微控制器产品也刚刚才崭露头角。   很多才刚刚通过开发板熟悉cortex-m0/m0+/m3/m4处理器的童鞋可能心中又要飘过弹幕:
谁tm告诉我,这个m23和m33是什么鬼?
从个位数一下蹦到两位数了喂!
前面十几位兄弟怎么了?喂!
别说跟m3有啥关系,这以后下第n代是不是就该叫2333333了?
该来的总会来,那么如何简单粗暴的理解这两个全新的处理器呢?以下是傻孩子独家特别提供的的无责任囫囵吞枣公式:
cortex-m23 = 
cortex-m0/m0 + 硬件除法器 + 性能提升 +
专门的栈溢出硬件检测+
指令集不可忽略的小动作 +
安全扩展(trustzone for armv8-m) +
mpu开发者模型的友好化改进
cortex-m33 =
cortex-m3/m4 + 性能提升 +
专门的栈溢出硬件检测+
指令集不可忽略的小动作 +
安全扩展(trustzone for armv8-m)+
mpu开发者模型的友好化改进
再简单点说就是无敌增强版的“m0/m0+,m3/m4”加“安全扩展”。有人说,armv8-m的主要功能就是为cortex-m家族引入trustzone,这么看来也是不无道理的。
1.1 增强版的cortex-m0/m0+
根据官方的说法,cortex-m23实现的是armv8-m架构的baseline子架构,我们不妨理解为手机里面的“入门级”产品。
cortex-m23从定位上也非常直接,就是给cortex-m0/m0+增加个安全扩展。因此,实际上所有为cortex-m0/m0+编译生成的二进制代码基本上都可以“无修”的在cortex-m23/m33上执行——除非你原本的代码使用了mpu。此外cortex-m23居然配备了硬件除法器,这无疑在原本cortex-m0和cortex-m0+主打的8位/16位市场上把“基本配置”又提升了一个档次。   指令集上,cortex-m23师承armv6-m,除了支持“安全扩展”所必须的一系列指令之外,这款入门级产品还做了一个“不可忽略的小动作”——也就是说,除了cortex-m33以外,cortex-m23也可以通过很小的代价支持“暗代码(execute only memory, xom)”。
什么是暗代码呢?和“暗物质”只能理论上知道它存在却很难探测到类似——“暗代码”是一类只能由处理器执行(取指令)却根本无法用任何形式读取机器码(opcode)内容的程序——也就是人们常说的xo(execute-only)代码。“暗代码”并不是依靠内核来实现的,但却需要编译器和内核共同努力才能支持。这是因为xom本质上是芯片厂家在地址空间上划分出的一段特殊区域——只能由处理器取指令、用于代码的运行(instruction fetch),而不能进行普通的数据访问(data access)。这就要求“暗代码”里不能直接保存任何常数——它们必须编码到指令里面——成为指令的一部分,以指令编码中的立即数形式存在。
armv6-m的指令集大部分都是16位的thumb指令,16位的指令可以用于编码的立即数的二进制位长度可想而知——少得可怜。armv7-m由于引入了32位的thumb2指令集,从而极大增强了指令携带立即数的能力。为了将这一能力引入armv8-m的baseline指令集,movt和movw这两个可以分别携带32位立即数“高、低16位”的指令就被特别加入到cortex-m23所使用的指令集中。考虑到armv8-m所强的调信息安全,“暗指令”对固件的保护有多大的分量,可想而知。
结论:cortex-m23——这个m0+不简单。
1.2 增强版的cortex-m3/m4
相对cortex-m3/m4来说,cortex-m33在性能上有了提升并不是什么意料之外的事情,不提也罢。值得说明的是,从城里来的cortex-m7在性能上仍然可以甩其他cortex-m土包子几条街——6级流水线和3级流水线的差别可是三缸夏利和六缸宝马之间的差距所不能比拟的!(认真脸)。
1.3 armv8-m是个知错就改的好少年
我不知道有多少人真正用过armv7-m,也就是cortex-m3/m4的mpu——简单说就是个以region为单位来修改memory属性的系统级外设。原本设计的时候想法很简单,一个region,给个大小(size)给个基地址(base address),再给个属性(memory attribute),一使能,就工作了,很简单,很happy。然而,出于优(pi)化(gu)内(jue)核(ding)面(nao)积(dai)的原因,region地址范围的设定被人为加入了一个限定:
基地址(base address)必须对齐(aligned with)到它的尺寸(size),而且尺寸必须是2的整数次方(还必须大于4次方)。
举个例子:一个region大小为512k,那么基地址必须是512k的整数倍……如果你还不能理解这个问题蛋疼的点在哪里,设想一个任意大小的region该怎么设定,比如,一个234k大小的memory该咋办?——还能咋办,用多个region组合出来呗。正是这个蛋疼的限制,导致几乎没有什么rtos可以很好的使用mpu,也罕有身边的项目把mpu这么骨感的现实应用的如理想般美好。
那么armv8-m做了什么呢?他更正了这一蛋疼的设定,即:region的设置由“基地址+尺寸”进化为“起始地址+终止地址”,除了这两个地址都必须是32字节的整倍数的要求外,再也没有变态的关于“基地址必须是region大小的整倍数”这样的限定。是不是突然觉得眼前一亮,是不是突然发现了一个宝藏?mpu顿时好玩起来。
结论:armv8-m的mpu是个好同志,士别三日当刮目相看


LM4702功放模块的应用及设计方案
一文了解电子显微镜和光学显微镜的差异
开关电源中的基本元件 整流器
诺基亚出售逾450项专利给专利授权公司Sisvel
专访韩国区块链企业CONUN集团表世镇议长
Cortex-M0/M0+/M3/M4处理器是什么鬼?
提升机结构是如何组成的
DC/DC评估篇损耗探讨-损耗的简单计算方法
C语言-结构体与位域
什么是超导数字集成电路呢?超导数字集成电路的基本知识
华为mate10最新消息:国行版华为mate10确定10月20号发布,售价依旧很良心,颜值媲美iPhoneX
画面美!一加3T镀铬版首次曝光:镜面溜背
三星旗舰强势来袭,4K原色屏+双6400万+5500mAh
苹果Xs和三星Note9哪个更值得买
是德科技推出面向移动运营商的 5G 解决方案
XR将成为驱动下一次变革的重要平台,高通推动XR生态协同发展
蓝牙芯片解决方案市场规模的简单分析
Nuraphone耳机评测 聆听音乐的全新方式
智芯科微发布AT610x深度学习语音识别芯片
大疆最新推出FPV无人机,自带“人机合一”效果