小编Cal*_*ian的帖子

嵌入式 8051 的堆栈和堆混淆

我试图了解有关 8051 MCU 架构内存布局的一些基本概念。如果有人能给我一些澄清,我将不胜感激。

因此,对于 8051 MCU,我们有几种类型的存储器:

  • IRAM - (idata) - 用于通用寄存器和 SFR

  • PMEG - (code) - 用于存储代码 - (FLASH)

  • 扩展数据

    • 片上(数据) - 数据高速缓冲存储器(RAM)/
    • 片外 (xdata) - 外部存储器 (RAM)

问题:

  1. 那么堆栈实际上位于哪里?我假设在 IRAM (idata) 中,但它非常小 (30-7Fh) - 79 字节

  2. 堆栈有什么作用?

    现在,一方面,我读到它在我们调用函数时存储返回地址(例如,当我调用函数时,返回地址存储在堆栈上并且堆栈指针递增)。

    http://www.alciro.org/alciro/microcontroladores-8051_24/subrutina-subprograma_357_en.htm

    另一方面,我读到堆栈存储函数中的局部变量,一旦我们从该函数返回,这些变量就会被“删除”。 http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html

  3. 如果我使用动态内存分配(堆),该内存是否始终保留在片外 RAM(xdata)中,还是取决于编译器/优化?

c memory embedded 8051

3
推荐指数
1
解决办法
2587
查看次数

标签 统计

8051 ×1

c ×1

embedded ×1

memory ×1