程序的组成、存储与运行
1、CODE、RO、 RW、 ZI Data 域及堆栈空间
相信大家使用keil做单片机开发的时候,编译成功之后,会出现program size,像我这里就是Program Size: Code=10294 RO-data=8178 RW-data=60 ZI-data=3676 那这些变量的含义都是一些什么呢,他们在程序运行的时候都起什么作用呢?这里我使用的是muc为STM32F407VET6。这里说明一点这些值的大小都是字节。以字节为单位。
1-1、Code:
这个工程所需要的代码域,把工程所有的.c文件.h文件所需要的文件才会编译。同时 这个还与编译的优化等级有关系,编译器选择不同编译器生成的机器指令,这些内容被存储到 ROM 区,ROM就是MCU的flash。掉电不会丢失。
当在option中的c/c++选项之中选择编译优化等级
选择 level-0 时候对应的Program Size如下
选择 level-1 时候对应的Program Size如下
可以看出来CODE变化比较明显,是因为编译器优化了很多工程所不需要的文件,甚至文件中没有调用的函数都可能会被优化,同时RO、RW、 ZI Data 都有相应的减少。 一般情况下我们选择的优化等级是level-1。
1-2、RO-data:
Read Only data,即只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM 区,因而程序不能修改其内容。C 语言中 const 关键字定义的变量就是典型的RO-data。只要是const修饰都纳入,不管是局部还是全局变量。
const uint8_t buf[1024] = {
1,1,1