打印
[经验分享]

单片机占用 RAM 分析

[复制链接]
5177|47
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kkzz|  楼主 | 2023-11-12 23:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不定义任何数据下编译工程

查看 map ,双击下图标记处

由 map 可知
REG BANK 0 占用 8Byte
STACK 占用 1Byte

定义数据下编译工程

定义数据如下

#ifndef _UART_H_#define _UART_H_#define RX_Len 20#define TX_Len 20extern char RX_DataBuff[RX_Len];extern char TX_DataBuff[TX_Len];extern char rec_flag;void UART1_Init();void Send_Byte(unsigned char Data);void Send_String(char *String);#endif

map 图

上述文件中
第二行明显看出定义数据占用 41 Byte,但是 map 中显示占用 42 Byte (最终发现 51 的中断函数中的static数据会占用 1 Byte)
第三行是函数void Send_String(char *String)占用 3 Byte


使用特权

评论回复
沙发
tpgf| | 2023-12-2 16:48 | 只看该作者
可以通过什么工具打开map文件呢

使用特权

评论回复
板凳
wiba| | 2023-12-2 17:22 | 只看该作者
这个是如何能看出来的呢 静态数据有显示吗

使用特权

评论回复
地板
kxsi| | 2023-12-2 20:02 | 只看该作者
还有其他方式对占用的ram进行分析吗

使用特权

评论回复
5
coshi| | 2023-12-2 20:41 | 只看该作者
从map文件里边都可以看到哪些信息呢

使用特权

评论回复
6
drer| | 2023-12-2 21:23 | 只看该作者
map文件可以人为的进行修改吗

使用特权

评论回复
7
qcliu| | 2023-12-2 22:11 | 只看该作者
map文件是在哪个阶段生成的呢

使用特权

评论回复
8
bartonalfred| | 2024-4-6 20:49 | 只看该作者
理解和分析单片机占用的RAM 资源是非常重要的。

使用特权

评论回复
9
olivem55arlowe| | 2024-4-7 14:27 | 只看该作者
通过查看内存映射文件,了解程序在RAM中的分布情况,包括代码段、数据段、堆栈段等。

使用特权

评论回复
10
ccook11| | 2024-4-7 14:34 | 只看该作者
单片机在运行过程中,需要将程序中的变量、常量、堆栈等数据存储在RAM中。这些数据的大小和数量直接决定了单片机对RAM的需求。

使用特权

评论回复
11
lzmm| | 2024-4-7 21:36 | 只看该作者
这部分RAM主要用于存储程序执行过程中需要用到的数据和变量。程序RAM的大小取决于程序的复杂程度和数据处理需求。在编写程序时,需要根据实际需求合理规划程序RAM的使用,避免过度占用可用RAM。

使用特权

评论回复
12
lihuami| | 2024-4-8 10:55 | 只看该作者
存储中断服务程序的入口地址,虽然这部分占用空间不大,但对于51单片机等资源有限的单片机来说也是需要考虑的。

使用特权

评论回复
13
ingramward| | 2024-4-8 11:54 | 只看该作者
良好的软件架构设计可以有效地管理内存资源,例如模块化设计、对象池技术等。

使用特权

评论回复
14
macpherson| | 2024-4-9 10:09 | 只看该作者
单片机占用RAM的分析需要综合考虑数据存储、代码执行、中断处理和外设通信等多个方面。通过编写测试程序、编译程序并分析内存映射文件,可以准确了解单片机在实际应用中对RAM的需求,从而为硬件设计和程序优化提供有力支持。

使用特权

评论回复
15
robertesth| | 2024-4-9 14:37 | 只看该作者
动态内存分配的区域,程序员可以在程序运行时手动申请和释放内存。

使用特权

评论回复
16
51xlf| | 2024-4-9 15:12 | 只看该作者
程序大小:首先,需要知道程序的总体大小,包括代码和数据段。
变量和缓冲区:分析程序中使用的所有变量和缓冲区,以及它们的大小。
动态内存分配:如果程序中有动态内存分配(例如使用malloc或类似的函数),则需要特别注意这部分的内存使用。

使用特权

评论回复
17
tabmone| | 2024-4-10 17:44 | 只看该作者
合理的内存分配策略可以减少RAM的浪费,例如避免过度分配内存或重复分配内存。

使用特权

评论回复
18
guijial511| | 2024-4-11 08:26 | 只看该作者
编译后不是也可以看占用RAM大小吗?

使用特权

评论回复
19
timfordlare| | 2024-4-11 18:57 | 只看该作者
未初始化的全局变量和静态变量保存在BSS段中,这部分内存空间在程序开始运行时会被初始化为0,同样在编译时确定大小。

使用特权

评论回复
20
primojones| | 2024-4-11 21:14 | 只看该作者
每个函数调用都会使用栈空间来存储局部变量和返回地址。因此,函数调用深度和局部变量的大小都会影响栈的使用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

317

主题

10907

帖子

13

粉丝