stm32c语言全局变量清0,STM32全局变量占用程序存储空间吗?

嗯,楼上说的都对,我验证过了,最终生成的目标代码大小=Code+RO Data+RW Data。实验如下:

建立一个最简单的工程,如下图:

main.c源码如下:

unsigned char var[1024]={

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

"ffffffffffffffff"

};

int _main(void)

{

unsigned char i;

while(1)

{

i = var[0];

i++;

}

}

工程中只有1个main.c文件,该文件也很简单,就1个全局变量unsigned char var[1024],和一个_main函数。这里用_main而不用main是因为main函数会让链接器自动添加C库函数启动代码,而C库函数启动代码又会对全局数据进行压缩处理,这样就会是我们最终得到的BIN文件缩水,所以我这里使用_main函数就不会自动链接C库函数启动代码了。对工程的设置如下:

分散加载文件使用自己编写的sct文件:

别忘了设置程序入口点,这里设置_mian为程序入口点,防止编译产生警告。

bin文件格式转换设置:

工程设置完毕后,编译、链接,最终结果如下图:

可以看到Code代码段占用16字节,只读数据段RO Data为0字节,读写数据段RW Data为1024字节。这是我们找到生成的test.bin文件查看其大小刚好为1040字节=Code(16) + RO Data(0) + RW Data(1024),如下图:

本来我以为数组中的字符串“ffffffffffffffff”.....都是常量,照理说应该将它们划分到RO Data段的,可是MDK刚好跟我想的相反,把他们的大小规划到RW Data段了,而RO Data段则不包括它们的大小。

如果将原来的全局变量改成const类型,那么很容易想到,RO Data就变为1024字节,而RW Data就变为0字节,如下图:

所以最终得出结论,最终占用FLASH空间大小的因素是由Code、RO Data、RW Data这三个空间决定的,一般情况下,是小于等于Code+RO Data+RW Data,因为C库函数启动代码会对数据进行压缩处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值