【原创】【翻译】从Cortex - M3过度到Cortex - M4(5)-软件应用程序移植
0赞由于本人文笔拙劣,可能翻译的不到位,望大家多多包涵。
·只有在访问NVIC和系统控制空间(SCS)寄存器时使用字传输
·请勿修改所有未使用的SCS寄存器和有关处理器方面的寄存器
·如下配置CCR(STKALIGN 位为1、UNALIGN_TRP 位为1、在CCR寄存器的所有其他位保留其原始值)
2 示例代码
下面的例子采用一个高级的算术源代码,来实现IIR滤波器算法,来对比演示Cortex - M3和M4使用的运行周期。
功能Y [N] = B0 * X [N] + B1 * X [N - 1] + B2 * X [N - 2] - A1 * Y [N - 1] - A2 * Y [N - 2]
Cortex - M3 Cortex - M4
xN = *x++; 2 2
yN = xN * b0; 3-7 1
yN += xNm1 * b1; 3-7 1
yN += xNm2 * b2; 3-7 1
yN -= yNm1 * a1; 3-7 1
yN -= yNm2 * a2; 3-7 1
*y++ = yN; 2 2
xNm2 = xNm1; 1 1
xNm1 = xN; 1 1
yNm2 = yNm1; 1 1
yNm1 = yN; 1 1
递减循环计数器 1 1
支路 2 2
26~46个周期 16 个周期
要执行相同的源代码,Cortex - M3的需要26〜46个运算周期(注意执行,乘法运算的时间是取决于数据),而Cortex - M4的只需要16个周期。Cortex - M4在这个IIR滤波器计算时提供了相当于1.6倍- 2.9倍的性能改善。
通过研究详细运行过程,发现在代码线上执行在连续乘法累加运算能力是二者的主要差别。要执行这些功能,在Cortex - M3的需要多个指令,消耗3-7个周期,而Cortex - M4的只需要一个单周期指令。以上真实世界的信号处理的例子展示了ISA 能力和的Cortex - M4的核心微架构强大功能
