首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数调用是如何在堆栈和代码内存方面工作的?

函数调用是如何在堆栈和代码内存方面工作的?
EN

Stack Overflow用户
提问于 2021-08-22 08:45:17
回答 1查看 368关注 0票数 1

我一直试图了解内存是如何工作的,在内存方面,特别是在嵌入式系统中,应用程序的执行过程中会发生什么。C/C++中的更多上下文

  • 应用程序的堆栈、堆、静态和代码内存,它存储在RAM或易失性内存中,哪一部分存储在非易失性内存中?或者当一个应用程序被执行时,整个应用程序被复制到RAM或易失性内存中?
  • 当一个函数被调用时,该函数的所有程序集指令是否被复制到堆栈中,还是只将内存分配给函数?
  • 如果只将内存实时分配给函数,这意味着必须将这些变量的地址添加到函数的组装代码中,这是如何发生的?
  • 当我们用C语言为嵌入式系统编写代码时,谁会在嵌入式系统中使用嵌入式系统堆栈、内存分配等等来完成这些工作呢?在MCU中没有操作系统为我们做内存管理,所以在MCU中的函数调用过程中,谁来管理内存分配?
EN

回答 1

Stack Overflow用户

发布于 2021-08-22 10:13:15

当我们用C语言为嵌入式系统编写代码时,谁会在嵌入式系统中使用嵌入式系统堆栈、内存分配等等来完成这些工作呢?在MCU中没有操作系统为我们做内存管理,所以在MCU中的函数调用过程中,谁来管理内存分配?

程序员在C中的接口是main.c文件:

代码语言:javascript
复制
int main (){

// User code here

return 0;
}

但从技术上讲,您的IDE (Keil uVision或Composer等)除了它的RTE (运行时环境)组件,在这个main.c文件之前和之后,在构建(编译)特定目标硬件(如Tiva C TM4C123GH6PM或STM32F400等)的源代码时,放置一个初始化和去初始化文件(通常称为MCU启动代码)的普通代码。

这些启动/初始化文件中的代码初始化您的堆栈和堆内存,您的mcu的时钟门控,设置不同的外围设备(gpio、串行、i2c等)、中断向量表、PC (程序计数器)、SP (堆栈指针)等。

您可以为目标MCU打开简单程序的调试会话,同时将其配置为“在第一次组装指令/启动时停止”,然后执行步进操作以遍历所有代码,直到到达main.c文件为止。

这些发现太棒了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68879745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档