以stm32f407为例,学习cortex-m4通用寄存器的用法

Posted yanhc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以stm32f407为例,学习cortex-m4通用寄存器的用法相关的知识,希望对你有一定的参考价值。

测试代码如下:

int add(int a, int b, int c, int d, int e, int f)
{
    return a+b+c+d+e+f;
}

int main(void)

{
    int g;
    
    g = add(1,2,3,4,5, 6);

 

设置断点后,如下图所示,进入add函数前,将函数输入参数存入寄存器,r0=6, r1=5, r3=4, r2=3, 由于输入参数只能用r0-r4这4个寄存器,因此,需要将r0和r1存入堆栈,然后,再将剩余的2和1两个输入参数存入r1和r0,然后,跳到add的地址。

技术分享图片

下图,跳到add的地址处了,因为,有6个参数的运算,外加输出结果,一共需要7个寄存器,即需要r0-r3之外,还需要r4,r5,r6;所以,首先,将r4、5、6存入堆栈;同时,在add里可能还需要调用其它函数,因此,也将lr存入堆栈(每个函数初始,都需要将lr存入堆栈)。

然后,由于r0用于存放计算结果,返回值,因此,将r0存入r4,同时,将堆栈里的另外2两个输入参数,提取出来放到r5和r6中。

然后,就可以计算了,最后的计算结果在r0中。

技术分享图片

 

以上是关于以stm32f407为例,学习cortex-m4通用寄存器的用法的主要内容,如果未能解决你的问题,请参考以下文章

极海MCU APM32F407xExG可兼容替换STM32F407xG,同时在性能方面有所优化

STM32F407的DSP教程第39章 STM32F407的FIR带通滤波器实现(支持逐个数据的实时滤波)

STM32F407的DSP教程第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波)

STM32F407的DSP教程第44章 STM32F407的IIR低通滤波器实现(支持逐个数据的实时滤波)

STM32F407的DSP教程第46章 STM32F407的IIR带通滤波器实现(支持逐个数据的实时滤波)

STM32F407的DSP教程第44章 STM32F407的IIR低通滤波器实现(支持逐个数据的实时滤波)