stack、heap大小问题
1、请问下就407为例他的stack、heap最大可设置大多空间?2、不同的芯片的stack、heap的最大空间是有什么决定的?
3、入门的视频里看到将堆设置为0x00000200也就是512Byte吧,这样的话如果我定义一个1024Byte的全局的数组,那么不就超出堆空间的大小了么?
继续学习map和htm视频教程,有讲解到。 堆heap只有在使用malloc函数的时候才会用到。 你自己定义的全局变量不适用堆和栈;局部变量会使用栈。 所以,一般的栈需要大一点,堆可以小一些。 堆空间和全局数组空间是并列的,全局数组并不会占用堆空间。
一些第三方软件中有大量的动态空间分配,我曾经将整个407的64K ccram作为堆空间来移植代码,很好用。 全局数组不在堆的 eric2013 发表于 2019-12-9 08:42
继续学习map和htm视频教程,有讲解到。
视频看了 但是没见到有说stack、heap最大可设置多大空间,及stack、heap的空间由谁来决定的? startup_stm32h743xx.s中的
Stack_Size EQU 0x00000400
Heap_Size EQU 0x00000200
即堆栈空间大小
和FreeRTOSConfig.h中
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 130 )//单位字
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )//系统所有总的堆大小
他们有啥区别? FLY 发表于 2020-2-15 12:05
视频看了 但是没见到有说stack、heap最大可设置多大空间,及stack、heap的空间由谁来决定的?
stack大小就是视频教程里面的htm视频部分,给出了最大栈需求(不含中断嵌套)。
heap大小主要是malloc,这个基本完全由你自己写的程序决定。 FLY 发表于 2020-2-15 12:15
startup_stm32h743xx.s中的
Stack_Size EQU 0x00000400
系统栈和任务栈。
系统栈:
裸机情况下,凡是用到栈的地方都是用的Stack_Size EQU 0x00000400
而到了FreeRTOS下,这个系统栈主要是手动入栈的寄存器,中断服务程序里面的局部变量,中断嵌入要用到。
任务栈:
就是 configTOTAL_HEAP_SIZE定义的大小。
startup_stm32h743xx.s中的
Stack_Size EQU 0x00000400
Heap_Size EQU 0x00000200
即堆栈空间大小
和FreeRTOSConfig.h中
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 130 )//单位字
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )//系统所有总的堆大小
这个Stack_Size 、Heap_Size、 configTOTAL_HEAP_SIZE 最大值应该是受内存限制的吧,那他们是受哪个内存的限制呢? RAM、ROM、FLASH ? FLY 发表于 2020-2-26 18:10
startup_stm32h743xx.s中的
Stack_Size EQU 0x00000400
这个问题呢? 请教下? FLY 发表于 2020-2-28 07:12
这个问题呢? 请教下?
RAM. eric2013 发表于 2020-2-15 12:54
系统栈和任务栈。
系统栈:
不错, 学习到了,温故而知新 eric2013 发表于 2020-2-28 09:56
RAM.
那为啥我把这个改成110K, 即 #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 110* 1024 ) ),就报错了,难道是我MPU这个内存管理这块弄得不对?
FLY 发表于 2020-2-29 11:50
那为啥我把这个改成110K, 即 #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 110* 1024 ) ),就报错 ...
超了。 eric2013 发表于 2020-2-29 13:48
超了。
这个是超过芯片的RAM吗?那按理说stack最大可以设置成和芯片的RAM一样?
18776743354 发表于 2023-6-29 21:09
这个是超过芯片的RAM吗?那按理说stack最大可以设置成和芯片的RAM一样?
我觉得你可以查查内存里都有什么分区,,或者程序里变量都是怎么占用内存的,,应该就能明白一点吧 FreeRTOS中的堆栈,并没有占用系统启动文件中的堆栈空间大小。两者在空间分配上互不影响,需要单独设置。并且FreeRTOS有自己的内存申请函数pvPortMalloc()以及一系列的内存管理函数。 FreeRTOS中的堆栈,并没有占用系统启动文件中的堆栈空间大小。两者在空间分配上互不影响,需要单独设置。并且FreeRTOS有自己的内存申请函数pvPortMalloc()以及一系列的内存管理函数。stm32407 常规内存128K 看着分配就行。 系统的
栈+堆+全局变量区 = ram
ram大小总和不变 建议多查查手册 fman0562 发表于 2023-8-10 16:01
FreeRTOS中的堆栈,并没有占用系统启动文件中的堆栈空间大小。两者在空间分配上互不影响,需要单独设置。并 ...
我的stm32h743芯片SRAM有1060KB,结果config_TOTAL_HEAP_SIZE设置为300k就不行了,调试也会卡在启动文件里,有大佬知道为什么吗 飒戾 发表于 2024-4-6 02:10
我的stm32h743芯片SRAM有1060KB,结果config_TOTAL_HEAP_SIZE设置为300k就不行了,调试也会卡在启动文件 ...
这个应该是没有移植好,FreeRTOS启动前什么都不要做,特别是各种外设初始化。main函数里面仅仅是创建第1个启动任务,看看还有问题没,还有问题就是没移植好。
页:
[1]