• 已解决 33699 个问题
  • 已帮助 5814 位优秀工程师

如何理解堆栈,stm32启动代码这部分是做什么的?

8370eb225ea32fad 2019-12-15 浏览量:286
如何理解堆栈,stm32启动代码这部分是做什么的?
单片机 STM32
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 在系统中,栈的作用主要是存储局部变量、函数调用以及函数形参等参数,堆的作用是用于malloc()之类函数申请的动态内存的分配,系统执行完启动代码后会跳转进入到main()函数运行,这些函数的执行及调用,需要涉及局部变量,形参的传递,以及内存分配,这些都是在栈中和堆中完成的,哪怕是main()函数也是具备形参的,需要传入参数,所以正因为在启动代码中堆和栈已经被初始化,所以STM32工程C语言才可以顺利的执行。
    • 发布于 2019-12-16
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 单片机执行第一步是从启动文件执行的,首先是堆栈的分配,然后是中断向量

    的一些参数,还有系统时钟配置,这些都在启动文件里完成,最后才跳到主函数里面运行程序

    • 发布于2019-12-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 虽然在裸开发中,并没有操作系统参与,但为了方便程序开发,在相应的编译处理中,其实都有一部分通用的处理,即在main函数真正启动之前,有一部分的基础化处理已经完毕,这就是所谓的启动代码部分,它提供一定的标准化处理来方便主要程序部分的构建开发,主要就涉及 内存空间的预分配(堆、栈的分配、中断向量空间的分配等等),还涉及系统时钟配置等等,正因为有了这些,后续开发就有了一定的基础条件。

    当然,这段启动代码理论上也是可以自行开发的,从而让后续开发遵从不同的规范,但就需要涉及对相应架构(特别是MCU)资源的全面掌控,这就基本上算是寄存器开发啦,很是复杂,对一般开发者而言也没有必要啦。所以这部分开发其实更多的是直接利用官方提供的版本。这样就遵从其相应规范来开发,这样一来还带来了移植更方便的有优势。

    • 发布于2019-12-16
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32默认没有堆。 就是一块内存空间。  启动代码就是把程序考入栈中运行。
    • 发布于2019-12-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 这部分代码是存储程序运行过程中的一些变量的,还有中断向量,中断现场保存的功能

    是要编译器进行分配的

    • 发布于2019-12-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 堆就是alloc系列函数分配空间时使用的,栈是局部变量使用的,都可以视为是内存的一部分

    STM32启动代码中需要将内存一部分分配给堆栈,这个堆栈,是使用高级编程语言如C C++等必备的,否则无法实现局部变量与内存动态分配,所有的处理器在跳转到高级编程语言编译出的代码前都要初始化堆栈,这个初始化堆栈及之前的语句必须用汇编实现

    • 发布于2019-12-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 堆栈是软件运行过程中的一些数据的存储位,启动部分代码就是通过堆栈的数据转跳实现关键地址启动
    • 发布于2020-01-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 启动代码就是引导你的程序转跳到指定的地址启动,用于对数据的读取和识别,达到启动的引导
    • 发布于2020-01-18
    • 举报
    • 评论 0
    • 0
    • 0

如何理解堆栈,stm32启动代码这部分是做什么的?