打印
[疑难问答]

关于keil里program size:code,RO,RW,ZI

[复制链接]
1254|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eefas|  楼主 | 2023-11-25 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
*在Keil工具中,代码(code)和RO-data(Read-Only Data)通常是下载到Flash存储器中的。*

**1·Code(代码)**: 这是你的程序逻辑部分,包括执行各种功能和任务的指令。
**2·RO-data(Read-Only Data)**:这是在程序运行时只读的数据,通常包括预先定义的常量、编译时常量、以及不允许修改的变量等。

*RW-data(Read-Write Data)和ZI-data(Zero-Initialised Data)通常不会下载到Flash存储器中,因为它们在程序运行时才被使用,并可能被存储在更易访问且可以更快访问的RAM中。*

**3·RW-data(Read-Write Data)**:这是在程序运行时可以被读取和写入的数据,也就是我们通常说的动态数据。
**4·ZI-data(Zero-Initialised Data)**:这是在程序开始运行前被初始化为零或NULL的数据。

通常情况下,Keil工具不会直接将代码和各种数据段的大小相加来计算Flash存储器的大小。在确定下载到Flash的大小时,需要考虑以下几个因素:
**代码大小**:例如代码大小为55656。通常,代码是下载到Flash存储器的主体部分,并且占据了Flash的大部分空间。
**RO-data大小**:RO-data是只读数据,通常也会下载到Flash中。例如RO-data大小为3892。
**RW-data和ZI-data**:RW-data和ZI-data通常不会下载到Flash存储器中。这些数据在程序运行时存储在RAM中,因此它们的大小不会计入Flash存储器的使用量。
**Flash存储器的容量**:Flash存储器的容量是有限的,因此需要确保下载的数据不超过其容量限制。

综上所述,如果Flash存储器的容量足够大,并且代码和RO-data总和不超过其容量限制,那么(55656+3892)/1024的结果可以近似为Flash的大小(以KB为单位)。
但是,实际情况可能因目标设备和Keil工具的配置而有所不同,因此最好参考Keil工具的文档或使用Keil工具自带的工具和向导来计算Flash的大小。

使用特权

评论回复
沙发
uiint| | 2024-4-7 18:47 | 只看该作者
可以通过查看Map文件来查看Program Size的具体信息。Map文件是一个文本文件,包含了程序的内存分配、符号地址等信息。

使用特权

评论回复
板凳
bestwell| | 2024-4-7 21:05 | 只看该作者
ZI数据在程序运行时保存在RAM中,因此这部分数据的大小也反映了程序运行时对RAM的需求。

使用特权

评论回复
地板
plsbackup| | 2024-4-7 22:35 | 只看该作者
代码占用的空间。这部分包括了程序中的指令代码和编译器产生的常量数据。Code部分通常占用的是程序存储器(ROM或Flash)的空间。

使用特权

评论回复
5
yorkbarney| | 2024-4-8 16:46 | 只看该作者
Code 代码段,存储程序的指令和常量。这部分数据在程序运行过程中是只读的,不能被修改。

使用特权

评论回复
6
dspmana| | 2024-4-9 12:59 | 只看该作者
RO代表Read-Only,即只读内存。
这部分内存用于存储程序中不会改变的常量、字符串和程序初始化的数据。
在某些微控制器上,RO区域可能映射到Flash存储器,用于存储固件程序。

使用特权

评论回复
7
biechedan| | 2024-4-9 19:08 | 只看该作者
RW 读写数据段,存储程序中的可读写数据,如全局变量、静态变量等。这部分数据在程序运行过程中可以被修改。

使用特权

评论回复
8
elsaflower| | 2024-4-11 20:14 | 只看该作者
RO-data (Read Only data): 这部分是只读数据的大小,比如定义的常量(const型)。这些数据在程序运行期间不会改变,因此被放在ROM中以节省RAM空间。

使用特权

评论回复
9
bestwell| | 2024-4-12 10:10 | 只看该作者
RW-data 代表程序中已初始化的可读写数据,如全局变量。这部分数据在程序运行时会被修改,存储在RAM中。

使用特权

评论回复
10
youtome| | 2024-4-12 16:12 | 只看该作者
RW区域通常用于RAM(随机访问存储器),在程序运行时提供数据的读写操作。

使用特权

评论回复
11
chenci2013| | 2024-4-12 18:05 | 只看该作者
RW-data (Read Write data): 这是指已初始化的可读写变量的大小。这些数据在程序开始时已经赋予了初值,程序运行过程中可能会被修改,因此需要存储在RAM中以便于读写操作。

使用特权

评论回复
12
macpherson| | 2024-4-15 11:00 | 只看该作者
RO 只读数据段,存储程序中的只读数据,如字符串、常量等。这部分数据在程序运行过程中也是只读的,不能被修改。

使用特权

评论回复
13
mmbs| | 2024-4-16 12:35 | 只看该作者
ROM的大小为Code + RO-data + RW-data,而RAM的大小为RW-data + ZI-data。

使用特权

评论回复
14
sdlls| | 2024-4-16 20:46 | 只看该作者
RW 可读可写变量的大小。这部分包括了程序中定义的需要在运行时修改的变量,如全局变量和静态变量等。RW数据在程序运行时保存在RAM中,因此这部分数据的大小反映了程序运行时对RAM的需求。

使用特权

评论回复
15
lihuami| | 2024-4-20 13:58 | 只看该作者
在C语言中,使用const关键字定义的变量就是典型的RO数据。这些数据同样存储在ROM区,因此在程序运行时不能被修改。

使用特权

评论回复
16
kmzuaz| | 2024-4-20 15:39 | 只看该作者
ZI(Zero-Initialised):这部分数据在程序开始运行前被初始化为零或NULL。它们主要包括未初始化的static修饰的静态变量、全局变量以及堆栈所占的空间。在编译时,编译器会默认将这些空间清零。这些变量同样在程序运行时存储在RAM中。

使用特权

评论回复
17
i1mcu| | 2024-4-20 20:05 | 只看该作者
Code:这是程序的逻辑部分,包括执行各种功能和任务的指令。这些指令在编译后,被生成为机器指令,并存储在ROM区。

使用特权

评论回复
18
backlugin| | 2024-4-22 13:47 | 只看该作者
RO-data:代表程序中的只读数据,如常量、字符串常量等。这部分数据在程序运行时不会被修改,也存储在ROM中。

使用特权

评论回复
19
timfordlare| | 2024-4-22 13:52 | 只看该作者
ZI代表Zero-Initialized,即零初始化内存。
这部分内存用于存储程序启动时初始化为零的变量。
在某些微控制器上,ZI区域可能映射到RAM的一部分,通常用于存储全局初始化为零的变量。

使用特权

评论回复
20
eefas|  楼主 | 2024-4-22 13:56 | 只看该作者
已初始化的静态变量和全局变量就属于RW数据。这些变量在程序运行时被存储在RAM中,以便快速访问和修改。

使用特权

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

本版积分规则

50

主题

2589

帖子

2

粉丝