Phimas

【原创】【翻译】从Cortex - M3过度到Cortex - M4(5)-软件应用程序移植

0
阅读(3607)

由于本人文笔拙劣,可能翻译的不到位,望大家多多包涵。

原作者:罗伊.罗
软件应用程序移植
 
1 通用信息
Cortex - M4作为Cortex - M3的一个ISA扩展的集合,各种软件包括系统级软件可以在两个平台上通用。具体来说, 堆栈,内存,代码和数据的放置,以及在两个处理器的中断 都是相同的。因为他们都有相同的ARM V7 - M 硬件和Thumb/Thumb-2 指令集。从Cortex - M3到M4的软件移植可以做到非常简单,仅仅需要一点修改。如果代码是用C语言开发,几乎没有必要进行任何修改。因为针对开发Cortex - M4的编译器会自动调用32位乘法累加(MAC)单元和SIMD指令执行DSP任务。不过,完全兼容的代码仍然有一些注意事项:

 ·只有在访问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的核心微架构强大功能