STM32微控制器堆栈的详细说明

日期:2025-07-18 10:41 浏览:

学习STM32微控制器时,您总是可以遇到“堆栈”概念。我希望本文能帮助您了解堆栈。对于那些对会议编程有所了解的人,您可能知道堆栈是用于保存一些临时数据的内存中的连续存储区域:汇编和C语言在开发开发中更接近基础层。堆栈操作通过两个说明完成:PUSH和POP。程序内存可以分为几个区域:●堆栈●摩尔●全局区域(静态)1在累积程序后,在程序代码区域中始终很明显文本,全局变量和静态变量提供内存空间。操作操作时,该程序需要为局部变量提供堆栈空间。当它出现干扰时,需要将功能指针放在夹具上以保护站点,以便处理干扰器,然后返回到先前执行的操作。堆栈是从希格分配的h至低,堆是从低到高的分配。 2普通微控制器和STM32微控制器中的堆栈之间的差异时,当普通微控制器启动时,无需使用bootloader将代码从ROM移动到RAM。但是STM32微控制器需要它。在这里,我们可以首先查看实现微控制程序程序的过程。微控制器的实现分为三个步骤:教学和分析教学指令根据PC值阅读程序记忆中的说明,并将其发送到指令寄存器。然后研究ANG实施。这样,微控制器将使用内部程序内存中的代码指令,并从RAM中访问数据。 RAM的采集速度高于ROM,但是由于普通微控制器的频率的运行不高,因此从ROM中提取指令的缓慢会不会影响。 ST的CPUM32以高频运行,高于ROM的阅读和写作速度。因此,您需要使用引导加载程序将代码从ROM移动到RAM。使用堆栈就像去餐厅吃晚餐,只是订购菜肴(释放申请),花钱和进食(使用),饱满时离开,不注意切割蔬菜,洗蔬菜和清洁菜肴等准备的准备。洗碗,洗锅。它的优势是它很快,但是自由度很小。使用一堆就像自己做自己喜欢的菜。这很困难,但它与您的口味更一致,并且具有很大的自由。实际上,该堆栈是微控制器上的几个存储单元,该单元指定用于存储一些特殊信息,例如地址(保护断点)和数据(保护站点)。如果您需要在此处添加某些功能,则是这些存储单元中的内容,作为Accid中的某些相关参数当程序的实现中断程序时,场景。如果未保存这些参数,则微控制器将不再能够返回主程序,并在执行中断操作后继续执行。地址ng此存储单元记录在称为堆栈指针(SP)的区域。 3与STM32的开发结合使用,我们可以从上面的描述中看到堆栈如何征服代码上的堆和堆栈。许多人可能仍然不明白。在这里,我们结合了与STM32开发过程中与堆栈相关的内容。如何设置堆栈尺寸堆栈?在基于MDK的启动文件的开头,有一个提供堆栈尺寸的装配代码。在这里,我们只需要知道堆栈的大小即可。还有一个地方(地点),这意味着分配堆栈数据段。数字的大小可以自己更改,也可以使用STM32Cubemx调整大小的调整s如下图所示。 STM32F1的默认设置为0×400,大小为1K。 stack_size equ 0×400局部函数中的局部变量:void happy(void){char i; INT TMP [256]; // ...}本地变量总计占256*4 +1字节的堆栈空间。因此,当有许多本地变量要运行时,您需要注意它是否超过我们配置的堆栈大小。功能参数:void hal_gpio_init(gpio_typedef *gpiOox,gpio_inittypef *gpio_init)在这里我们应该给出一件事:仅通过4个字节,如果结构传递是一个结构,则它将覆盖结构的大小和空间。提示:当操作嵌套和递归时,系统仍将占据堆栈空间。默认设置(HEAP)为0×200(512)字节。 Heap_size Equ 0×200大多数人很少使用Malloc提供堆空间。尽管只要程序员没有解放空间,降低的数据就可以通过Orget要释放堆内存,它将导致内存泄漏甚至致命的潜在错误。 4经常在网上审查的MDK人中使用RAM使用评估可以研究某些基本内容。在这里,我们将MDK-ARM结合起来研究使用RAM的问题。 MDK积累后,将会有一块RAM大小信息:这里4+6 = 1640,将其转换为十六进制,即0×668。在奉献过程中,它将出现:此MSP是堆栈的主要指针。通常,我们在重置后教授的位置确实是夹具的顶部:指向地址0×200006668的MSP为0×20000000 Offset 0×668。对于覆盖RAM的特定区域,您可以参考映射文件中的[Image Symern]内容:

0
首页
电话
短信
联系