Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 仅使用静态内存调整资源大小_Gcc_Resources_Arm_Embedded_Stm32 - Fatal编程技术网

Gcc 仅使用静态内存调整资源大小

Gcc 仅使用静态内存调整资源大小,gcc,resources,arm,embedded,stm32,Gcc,Resources,Arm,Embedded,Stm32,对于我的嵌入式应用程序,我们使用的是STM32F411芯片。该芯片有512kb的闪存和128kb的RAM。 我想对资源大小进行调整,这样我就可以监控我对资源(闪存和RAM)的使用情况 我只静态分配内存,没有Malloc()调用。使用gcc进行大小调整后,我可以: text data bss dec hex filename 230868 11236 74048 316152 4d2f8 application.elf 从我所做的阅读()

对于我的嵌入式应用程序,我们使用的是STM32F411芯片。该芯片有512kb的闪存和128kb的RAM。 我想对资源大小进行调整,这样我就可以监控我对资源(闪存和RAM)的使用情况

我只静态分配内存,没有Malloc()调用。使用gcc进行大小调整后,我可以:

text      data     bss     dec    hex     filename
230868   11236   74048  316152   4d2f8   application.elf
从我所做的阅读()中我了解到,因为没有动态分配的资源,上面的信息应该可以清楚地衡量我将运行的RAM使用的深度

我是否可以期望RAM的使用最终是数据部分+bss部分(根据上述链接上的摘要)?所以在这个例子中是85284字节


闪存大小为文本+数据节。在这种情况下:242104?

简言之,是的。由于需要存储初始化数据部分的初始化器,“数据”部分在内存使用中计数两次——一次用于闪存,一次用于RAM。这也是为什么将常量数据声明为“const”非常重要的原因。然后将数据放在Flash中,只在整个内存使用中计数一次。

是的,但也要考虑到,即使在代码中没有显式使用动态内存,库函数也可以。如果您试图保持对内存使用的超严格控制,并且您的应用程序使用的内存接近您的RAM总量,那么您需要对此进行说明。如果不这样做,您可能会遇到严重的运行时问题

我能期望RAM最终被用于数据部分+bss吗 以上链接的摘要中的每个部分?所以在这个例子中是85284 字节

取决于链接器脚本。特别是堆栈和堆配置。文本段和数据段也是如此


有关更多详细信息,您需要查看.map文件。

他的代码运行时没有堆栈?我认为他需要对此作出解释。有时设备也需要bss之外的内存。最好使用自定义链接器文件检查是否超过硬件大小。向量表可能需要位于特殊位置,并且需要一些空间。正如PeterJ的回答所指出的,如果要倒计时到最后一个字节,则需要一个链接器映射来说明堆栈、堆和其他内容。大多数供应商提供的默认链接器脚本已经足够了。而且,是的,尺寸计划并不能说明一切。仍然需要判断和经验。411是最简单的。它只有一块RAM。但即使是2英镑STM32F3也有一个未计入账户的CCMRAM。我将其用于DMA+stack&heap访问的变量和数据,有时用于时间敏感例程,而“普通”SRAM用于其他所有程序。当然,自定义链接器脚本和启动例程是必需的