STM32内存跟FLASH问题
RO: 常量
ZI: 未初始化的全局变量
RW: 初始化的全局变量
Code: 程序本身
Code, RO-data,RW-data ..............flash
RW-data, ZIdata...................RAM
初始化时, RW会从flash被拷贝到RAM
Program Size: Code=1564 RO-data=336 RW-data=32 ZI-data=1832
Code就是flash. 证明: 我现在注释掉一行:
//delay_ms(300);
Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832
再注释一行:
//LED1=0;
Program Size: Code=1548 RO-data=336 RW-data=32 ZI-data=1832
再注释一行:
//LED0=1;
Program Size: Code=1544 RO-data=336 RW-data=32 ZI-data=1832
其他都没变, 只有Code变化了.
以这个为基础:
Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832
接下来, 加一个static的变量.
static u8 i;
Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832
发现没有任何变化, 就是静态变量, 你不赋值, 就不占任何空间, 编译器好聪明.
接着, 声明后马上赋值:
static u8 i=2;
编译结果:
Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832
竟然没有任何变化, 也就是说, 只是赋初始值, 也是没有使用的静态变量也不占任何空间.
加一行代码:
i=3;
Program Size: Code=1568 RO-data=336 RW-data=36 ZI-data=1836
可以看到Code有变化, RW-data也增加了4个字节, 因为32位的系统的关系吧. 然后ZI也是增加了4个字节
如果不赋初始值, 直接后面才给i一个3:
Program Size: Code=1568 RO-data=336 RW-data=36 ZI-data=1836
没变化, 即, static的变量, 申明时就赋值了.
如果把static去掉, 在函数内申明一个普通变量i, 则:
Program Size: Code=1560 RO-data=336 RW-data=32 ZI-data=1832
跟基础相比:
Program Size: Code=1556 RO-data=336 RW-data=32 ZI-data=1832
除了Code没变化.
增加define
#define iah 0x0f
Program Size: Code=1560 RO-data=336 RW-data=32 ZI-data=1832
没有任何变化
即编译期间, 所有define都会被自动替换.
可见:
1. Code就是编译后的机器码
2. RO就是Read Only, 即常量
3. static的变量, 在初始化的时候, 会从flash放进内存
4. 普通变量只会在栈和堆中存在, 并存活于函数作用域, 初始化的时候并不占用内存.
5. 只有const修饰符才会增加RO.
参考链接:
http://blog.csdn.net/winmenaruto/article/details/6256770
STM32内存跟FLASH问题的更多相关文章
- STM32片上Flash内存映射、页面大小、寄存器映射
STM32片上Flash内存映射.页面大小.寄存器映射 STM32有4种Flash module organization,分别是:low-density devices(32KB,1KB/page) ...
- STM32 对内部FLASH读写接口函数(转)
源:STM32 对内部FLASH读写接口函数 因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. ...
- 舵机&数据处理&stm32内存之堆栈溢出(遇到的问题)
产品名称:TOWER PRO(辉盛)大扭力舵机MG996R (MG995升级产品)6v/11Kg厂家编号:MG996R产品净重: 55g产品尺寸: 40.7*19.7*42.9mm产品拉力: 9.4k ...
- STM32内存结构介绍和FreeRTOS内存分配技巧
这是我第一次使用FreeRTOS构建STM32的项目,踩了好些坑,又发现了我缺乏对于操作系统的内存及其空间的分配的知识,故写下文档记录学习成果. 文章最后要解决的问题是,如何恰当地分配FreeRTOS ...
- STM32内存知识
在了解STM32内存之前需要了解 MCU 的型号和MDK 中的.map 文件,很多刚学习 stm32 时都不会过多的去了解 MCU 的选型,是在太枯燥了.这里在从新了解一下,久了就熟悉了. 一.STM ...
- STM32内存映射
一.概述 STM32内存映射是STM32的架构的重要组成部分,不可或缺. 二.STM32内存映射图 1.内存映射图--摘自<CM3权威指南> 2.内存映射图--摘自<STM32F10 ...
- 【转】STM32擦除内部FLASH时间过长导致IWDG复位分析
@20119-01-29 [小记] STM32擦除内部FLASH时间过长导致IWDG复位分析
- 转载-STM32片上FLASH内存映射、页面大小、寄存器映射
原文地址:http://blog.chinaunix.net/uid-20617446-id-3847242.html 本文以STM32F103RBT6为例介绍了片上Flash(Embedded Fl ...
- STM32 对内部FLASH读写接口函数
因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. 原理:先要把整页FLASH的内容搬到RAM中 ...
随机推荐
- LeetCode Count Complete Tree Nodes
原题链接在这里:https://leetcode.com/problems/count-complete-tree-nodes/ Given a complete binary tree, count ...
- SET Statements (Transact-SQL)
The Transact-SQL programming language provides several SET statements that change the current sessio ...
- HTML5列表、块和布局
一.列表 <ul> <ol> <li> unorder order list ol: type="1 A a I i" start=" ...
- JavaScript : DOM文档解析详解
JavaScript DOM 文档解析 1.节点(node):来源于网络理论,代表网络中的一个连接点.网络是由节点构成的集合 <p title=“a gentle reminder”> ...
- Linux就这个范儿 第19章 团结就是力量 LSB是Linux标准化基地(Linux Standards Base)的简称
Linux就这个范儿 第19章 团结就是力量 LSB是Linux标准化基地(Linux Standards Base)的简称 这个图片好可爱,它是LSB组织的图标.你肯定会问:“图标这么设计一定有说 ...
- 面向对象编程思想(OOP)
本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...
- SpringJUnit4ClassRunner拉起来的单元测试怎么装配Container实例
由于历史代码的原因,产品中部分spring装配的实例需要通过Container的实现类(自定义的)去获取.那么当在单元测试中怎么实例化这个Container实现呢? 实例化Container实现需要A ...
- Excel操作增强包
一.前期准备1) pywin32安装包(根据系统要求选择32位装包还是64位安装包)2) xlwings安装包二.安装过程1) pywin32安装包为exe文件,直接进行安装即可2) xlwi ...
- 20145207 《Java程序设计》第4周学习总结
前言 又到了大家最喜欢的前言时间,哈哈哈.我这个人啊,就是比较爱闲聊.正式在学校呆的第一天时间就在这里敲代码,自己都觉得自己伟大.不过好无聊呀....这周的内容说实话讲我还是挺感兴趣的,因为书上的例子 ...
- xla_events
LOOKUP_TYPE LANGUAGE LOOKUP_CODE MEANING DESCRIPTION XLA_EVENT_PROCESS_STATUS US D Draft Draft XLA_E ...