以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低通滤波器实现(支持逐个数据的实时滤波)