打印

关于ARM位指令效率不如MCU位指令效率的革命道理

[复制链接]
楼主: hotpower
手机看帖
扫描二维码
随时随地手机跟帖
21
ejack| | 2011-11-25 07:39 | 只看该作者 回帖奖励 |倒序浏览
我觉得大家的讨论应当限于深入了解内核及指令架构,
至于拿这个来比较说51和Mx如何如何,真的意义不大,
按51的设计,很多目的的实现都依赖于单片机亲力亲为,IO不做到单周期根本不行。
拿32位机去做指令级IO翻转是比较极端的情况,大部分日常所需都有丰富的专用外设接口打理。
吃什么饭干什么事。

使用特权

评论回复
22
alnjby| | 2011-11-25 07:57 | 只看该作者
32位机本身对32位数据处理效率最高,由于ARM的指令集带16位子集,所有对16位数据处理的效率也高,只是对1位I/O口的操作离32位太远,要效率高,所花的代价太大,要单独插入精简位处理指令集。









干燥性鼻炎
过敏性鼻炎的症状

使用特权

评论回复
23
ayb_ice| | 2011-11-25 07:59 | 只看该作者
Cortex-M3 的 bit-banding 就是一条指令完成的,虽然有可能是多周期指令,但是是百分之百的原子操作。
而且即便是多周期指令,顶多也就 2、3 个周期而已,以 STM32 的 72MHz 的速度来说,也有 24MHz 的 IO 速度,完 ...
流行音乐 发表于 2011-11-25 00:01

都说了需要先加载地址然后存储数据,至少需要2条指令,相当于51的间接寻址,bit-banding是原子操作没错,这种做法也是没有办法的办法,确实比ARM7要强,只能置1,清零,不能直接取反,取反要先判断,再清零或置1,取反也不是原子操作

使用特权

评论回复
24
hotpower|  楼主 | 2011-11-25 08:12 | 只看该作者
本帖最后由 hotpower 于 2011-11-30 00:43 编辑

同意楼上。
目前cortexm系列各厂家都提供了丰富的外设接口模块,串行接口将是发展的趋势。
虽然位控制对于我们很重要,但也会逐步消弱。
例如PC端编程对硬件的操作基本是API函数的调用。对一般应用我们根本不需要知道底层。硬件的驱动是厂家提供的。
32位或16位指令编码若强行原子处理gpio的位,那么指令编码就会大受影响。
在满足控制应用的前提下,我们可以不需纠结IO的翻转速度。

使用特权

评论回复
25
hotpower|  楼主 | 2011-11-25 08:38 | 只看该作者
俺对M3的汇编无研究,因为ARM汇编费脑桨。
但是俺绝对不相信它对GPIO位操作能做到真正的原子操作。
可以用硬件片选寻址来分析对GPIO位的操作。
首先对GPIO地址的编码是32位寻址的,故一条指令对GPIO的寻址就需要32位。例如4个GPIO将需要2位编码长度。
每个GPIO又可以控制若干位,这两部分我们可以将其压缩在一起寻址。假若有32位将需要5位编码长度。
而对于一个位的操作最基本的是清零,置1和取反。这个至少需要2个位控制的编码长度。
现在我们已经需要至少9位编码长度了。
根据硬件的访问时序,还需读写控制的1位编码。
所以32位或16位ARM指令集不可能针对GPIO做到一条指令完成,必须由多条指令完成。
只要一条指令由多个操作码和操作数组成也算原子操作,这将是各厂家的具体所为,因为ARM指令集肯定不会考虑具体GPIO的操作系统。

使用特权

评论回复
26
yhn1973| | 2011-11-25 08:41 | 只看该作者
最主要的是ARM是个贩子不是厂家,故只能做成通用的模糊设计。
谁买他的核自己定义。故ARM不可能有最佳的位操作指令。
hotpower 发表于 2011-11-24 20:10

这不是主要原因。原因是ARM指令体系决定的,ARM只能逐渐改进,而不可能步子迈的太大,ARM指令本身直接寻址能力就很弱,别说是位操作,就是对内存字操作不也是需要这些步

使用特权

评论回复
27
yewuyi| | 2011-11-25 08:47 | 只看该作者
MICROCHIP的PIC32使用的MIPS位操作如何!?

呵呵,前几天听课说位操作比较快!

使用特权

评论回复
28
yhn1973| | 2011-11-25 08:49 | 只看该作者
M3核对GPIO位操作能做到真正的原子操作,前提是GPIO地址要在位带之内。读--修改--写三步操作只要能用1个指令完成就算是原子操作

使用特权

评论回复
29
xyz549040622| | 2011-11-25 08:53 | 只看该作者
随着科学的进步,一切都有可能实现,实践是检验真理的唯一标准,我们只用就OK

使用特权

评论回复
30
yhn1973| | 2011-11-25 08:53 | 只看该作者
M3核确实1条指令就可以对位进行读--修改--写三步操作

使用特权

评论回复
31
hotpower|  楼主 | 2011-11-25 08:55 | 只看该作者
楼上说的实际是间接寻址。新唐的M0称其为快速IO,以空间换速度。烈火网友没用其功能。

使用特权

评论回复
32
yhn1973| | 2011-11-25 08:55 | 只看该作者
只是对位操作的效率还不是最高

使用特权

评论回复
33
hotpower|  楼主 | 2011-11-25 08:59 | 只看该作者
读修改写是原子操作,但中断改变你的GPIO地址又将如何?还有再换其它GPIO的位呢?

使用特权

评论回复
34
yhn1973| | 2011-11-25 09:01 | 只看该作者
菜农前辈应该去研究研究M3核,而不应整个阉割版的天天研究

使用特权

评论回复
35
hotpower|  楼主 | 2011-11-25 09:07 | 只看该作者
计算机寻址方式一般有立即寻址,直接寻址和间接寻址三种。前两种直观,到意味着要占用指令的编码长度,故直接寻址分页分段将会缩短指令的编码长度,但必须先指定好对应的页或段,如前面网友说的必须在当前GPIO的访问范围内。故不能真正地算原子操作。因为指令集编码长度是有限和珍贵的。

使用特权

评论回复
36
hotpower|  楼主 | 2011-11-25 09:26 | 只看该作者
谢谢楼上,M3肯定比M0强大,这是不争的事实,那么为何又有M4?M3为何不一统天下?
为何有了M3,MCU还能生存?
为何先有M3后有M0?至少俺知道M3俺玩后才知道有M0。
为何?
存在就是道理,生存才是真理。51是最好的榜样。
M3和M0俺都玩过,但俺绝对不会研究它们的指令集。
为何?答案是费脑桨,因为它们和DSP汇编不同,算法它们也都不能胜任,要研究,俺想研究M4。

作为控制,MCU已经不错了,否则51,PIC,AVR早死了。
作为算法,M3,M0都不适合,那么用它们替代MCU到是可选择的。

新唐的M05x在GPIO上也有51的准双向IO,有EBI接口,快速GPIO,I2C,SPI,PWM,WDT,UART(IrDA,RS-485),12位ADC,FMC,TMR,SYSTICK

使用特权

评论回复
37
yhn1973| | 2011-11-25 09:30 | 只看该作者
读修改写是原子操作,但中断改变你的GPIO地址又将如何?还有再换其它GPIO的位呢?
hotpower 发表于 2011-11-25 08:59

GPIO地址是在寄存器中,中断程序肯定要保护的。并且M3核位原子操作是ARM也说的,即使想忽悠也不敢这样忽悠吧

使用特权

评论回复
38
tendence| | 2011-11-25 09:36 | 只看该作者
还得慢慢消化!

使用特权

评论回复
39
hotpower|  楼主 | 2011-11-25 09:37 | 只看该作者
若是保护就没问题

使用特权

评论回复
40
HWM| | 2011-11-25 09:46 | 只看该作者
M3有一段位空间,一位对应于一个常规内存的地址。在此空间内对内存存取等效为对相应位的操作。但是,M3没有类似MCS-51那样的位处理器,所以最终还得软件自己处理“位”和“字”的关系。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则