专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
今天看啥  ›  专栏  ›  嵌入式微处理器

编译器如何处理函数的调用?

嵌入式微处理器  · 公众号  ·  · 2024-06-05 17:42
    

文章预览

一、概要 网上对函数调用未做系统化分析,本文主要根据汇编、寄存器、堆栈、 map、 内存 几 个角度进行分析,在函数进行调用的时候,编译器做什么工作进行举例分析。 二、环境介绍 函数流程如下: 1)串口输入指令; 2)中断调用接口uint16_t getUartData(void); 3)getUartData 中调用了shell_cmd_parse接口;从开始调用shell_cmd_parse进行讲解,即下图断电位置。 三、步骤 断点位置( 2800 行),寄存器分析如下: 1)寄存器 由于示例采用的是多进程方式,调用 getUartData 前的接口可能是任何一个函数,故【 R0-R12 】寄存器的值不确定,上图【 R0-R12 】值无特别意义; SP 为当前堆栈地址 0x20008948 ; LR 为调用 getUartData 前地址,查询 .map 文件可知, getUartData 运行完成返回 parseIni 接口。 PC 为当前程序运行地址 0x801B3BC ,查看 .map 文件可知为当前函数 getUartData 里面某 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览