• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32启动文件中堆栈大小的疑问

大头 2020-12-15 浏览量:1892
对于启动文件中的堆栈,一直有个疑问,像F407的ram有192kb,为什么不直接全部都分到这里来,默认却只开辟1.6kb左右的堆栈空间?那其他剩下的是用来干嘛的?另外还有一个问题,如果上了RTOS,各任务应用的堆栈空间是占用上诉配置的堆栈大小吗?


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 启动文件的堆栈是给函数的局部变量用的,调用程序会自动分配堆栈空间,函数返回就释放掉了,所以堆栈大小适合就行,太小了可能使空间不够程序卡死,太大浪费了,其他的ram就是一些全局变量还有座位缓冲区使用,代码运行要加载到那的

    RTOS创建任务分为动态创建和静态创建,静态要你自己开个数组给他,动态的话就是分配堆栈空间了。

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

其他答案 数量:5
  • 另一些是给程序中的变量使用的啊

    如果用了RTOS的,是会用到分配的堆栈的

    • 发布于2020-12-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般的堆空间等都不可能直接拿内存所有空闲空间来做,只能安排一部分,其他的是普通程序运行必要的空间,因为程序加载到内存中才能执行,这些不仅是数据,还有程序代码本身,而堆栈只是数据啊。

    如果用了RTOS等系统,堆栈的管理由系统来进一步管理,具体的分配机制要根据具体实现情况啦(可能是可以配置的)

    • 发布于2020-12-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 我认为没有必要全部分配,以满足使用需求为主。如果你想分配全部的你可以试下,亲自动手收获最大。另外对于RTOS的话,主流的OS都存在两种任务堆栈的申请方法。一种用户自己在栈上创建一个全局数组,另一种就是OS自动在堆上申请空间。从这里可以看出来,无论哪种方法,用户都必须注意可用的堆栈大小。所以对于启动文件中设置堆栈还是很有必要的。如果对你有启发,请点赞并设置最佳回答
    • 发布于2020-12-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 其他的没有分配的是分配给程序运行的,这部分还能被其他的代码中的数据占用的
    • 发布于2020-12-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 剩下的用来作为静态内存区,全局变量那些就要从这里取

    RTOS一般用内存池,它使用的内存池空间视为静态内存

    • 发布于2020-12-25
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32启动文件中堆栈大小的疑问