Code Size
来源:互联网 发布:python做数据分析应用 编辑:程序博客网 时间:2024/06/05 15:26
RO,RW,ZI 和scatter file详解(转载)
http://blog.chinaunix.net/uid-24460251-id-2606775.html
http://blog.chinaunix.net/uid-9185047-id-445087.html
bss段(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小。
data(已手动初始化的数据)段则为数据分配空间,数据保存在目标文件中。
数据段包含经过初始化的全局变量以及它们的值。BSS段的大小从可执行文件中得到 ,然后链接器得到这个大小的内存块,紧跟在数据段后面。当这个内存区进入程序的地址空间后全部清零。包含数据段和BSS段的整个区段此时通常称为数据区。
.c -> .o 目标文件一般很大,.a文件是目标文件的ar集合
而elf, bin, axf可以只link用到的code
gcc---objsize .o
text data bss dec hexfilename
4576 9 2081 6666 1a0atest.o
RO, RW, ZI
RO是程序中的指令和常量,readonly
RW是程序中的已初始化变量,read/write
ZI是程序中的未初始化的变量(static or global),zero
stack/heap variable都是runtime在RAM中分配,不算code size
整体的ROM=Text+Data (+RODATA), RAM=Data+Bss
RODATA来自test.elf.map文件,其中
Flash EEPROM Memory
Nor Flash 上可以直接run Text部分code
Nand Flash
flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。
Nor Flash的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除 速度大大影响了它的性能。
通常读取NOR的速度比NAND稍快一些,而NAND的写入速度比NOR快很多。
Nand-flash内存是flash内存的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
TCM---紧耦合内存(TCM: Tightly Coupled Memories)
静态ram成本高,速度快,断电内容不消失,用作cpu的缓存即cache
动态ram成本低,速度慢,要不断充电,断电内容消失,用作内存
某些chip另外一块TCM, 96KB 其中有32KB 给到cache用了
看下mem.c 中, 在声明后面加上
__attribute__((section(".tcmBSS")))
NVRAM 非易失性随机访问存储器 (Non-Volatile Random Access Memory),是指断电后仍能保持数据的一种RAM。
Larkspur nvram set common AP 1
armar -sizes libsong.a
Code RO Data RW Data ZI Data Debug Object Name
292 96 2615 40 168 test.o
.rodata.p05.5281
0x100eff40 0xc /gcc-arm-none-eabi/4_8-2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7e-m/fpu/libg_s.a(lib_a-mprec.o)
0x100eff4c _text_end = .
0x100eff4c __etext = .
New Method:
根据elf.map文件来计算
Note:elf.bin中并不一定会真正call到lib.a中的所有public method/variable,所以不能count它们;
.data.字段既是RAM,也算在ROM中;
Common symbol size file
__
Discarded input sections
.text 0x1007c000 0x9a38c
0x1007c000 _text_start = .
*(.init)
.init
*(.fini)
*(.text*)
.text._cli_supp
*(.text)
*(.rodata*)
.rodata
.rodata.__FUNCTION__.7293
.data 0x20000000 0x2d60 load address 0x1011638c
0x20000000 __data_start__ = .
0x20000000 _data_start = .
*(.data)
*(.data*)
*(.bss*)
*(.tcmBSS)
ld文件
MEMORY
{
ROM_CODE (arx) : ORIGIN = 0x0, LENGTH = 0x00005000/* 20k */
TCMRAM (arw) : ORIGIN = 0x00100000,LENGTH = 0x00010000/* 64k */
XIP_CODE (arx) : ORIGIN = 0x1007C000, LENGTH = 0x000BF000/*
SYSRAM (arw) : ORIGIN = 0x20000000, LENGTH = 0x00040000/*
}
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
将RAM Data(一般是global variable)->TCM BSS上
__attribute__ ((__section__(".tcmBSS")))
将XIP (一般是method)->RAM上运行
ramTEXT
#define TEXT_IN_RAM __attribute__ ((__section__(".ramTEXT")))
static void TEXT_IN_RAM flash_reset(void)
Nand Flash,Nor Flash,CFI Flash,SPI Flash 之间的关系
.text
.rodata
.data
.ramTEXT
.tcmBSS
.bss
.heap
.stack_dummy
Others
40846
21911
2666
376
464
7157
2048
3072
.stack_dummy
—— MSP stack 空间 for ISR 和 system init阶段使用的stack 空间
msp应该是指_ASM void __set_MSP(uint32_t mainStackPointer
.heap——这个是for C-LIB reserve的一块空间,如果call到 c-lib 的malloc, 就用的这块空间, target user是C-LIB 自身的一些func, e.g. printf
app 用的heap 都是在FREERTOS 的heap区域, 应该是在ramTEXT里面
http://blog.chinaunix.net/uid-24460251-id-2606775.html
http://blog.chinaunix.net/uid-9185047-id-445087.html
bss段(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小。
data(已手动初始化的数据)段则为数据分配空间,数据保存在目标文件中。
数据段包含经过初始化的全局变量以及它们的值。BSS段的大小从可执行文件中得到 ,然后链接器得到这个大小的内存块,紧跟在数据段后面。当这个内存区进入程序的地址空间后全部清零。包含数据段和BSS段的整个区段此时通常称为数据区。
.c -> .o 目标文件一般很大,.a文件是目标文件的ar集合
而elf, bin, axf可以只link用到的code
gcc---objsize .o
text data bss dec hexfilename
4576 9 2081 6666 1a0atest.o
RO, RW, ZI
RO是程序中的指令和常量,readonly
RW是程序中的已初始化变量,read/write
ZI是程序中的未初始化的变量(static or global),zero
stack/heap variable都是runtime在RAM中分配,不算code size
整体的ROM=Text+Data (+RODATA), RAM=Data+Bss
RODATA来自test.elf.map文件,其中
Flash EEPROM Memory
Nor Flash 上可以直接run Text部分code
Nand Flash
flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。
Nor Flash的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除 速度大大影响了它的性能。
通常读取NOR的速度比NAND稍快一些,而NAND的写入速度比NOR快很多。
Nand-flash内存是flash内存的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
TCM---紧耦合内存(TCM: Tightly Coupled Memories)
静态ram成本高,速度快,断电内容不消失,用作cpu的缓存即cache
动态ram成本低,速度慢,要不断充电,断电内容消失,用作内存
某些chip另外一块TCM, 96KB 其中有32KB 给到cache用了
看下mem.c 中, 在声明后面加上
__attribute__((section(".tcmBSS")))
NVRAM 非易失性随机访问存储器 (Non-Volatile Random Access Memory),是指断电后仍能保持数据的一种RAM。
Larkspur nvram set common AP 1
armar -sizes libsong.a
Code RO Data RW Data ZI Data Debug Object Name
292 96 2615 40 168 test.o
.rodata.p05.5281
0x100eff40 0xc /gcc-arm-none-eabi/4_8-2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7e-m/fpu/libg_s.a(lib_a-mprec.o)
0x100eff4c _text_end = .
0x100eff4c __etext = .
New Method:
根据elf.map文件来计算
Note:elf.bin中并不一定会真正call到lib.a中的所有public method/variable,所以不能count它们;
.data.字段既是RAM,也算在ROM中;
Common symbol size file
__
Discarded input sections
.text 0x1007c000 0x9a38c
0x1007c000 _text_start = .
*(.init)
.init
*(.fini)
*(.text*)
.text._cli_supp
*(.text)
*(.rodata*)
.rodata
.rodata.__FUNCTION__.7293
.data 0x20000000 0x2d60 load address 0x1011638c
0x20000000 __data_start__ = .
0x20000000 _data_start = .
*(.data)
*(.data*)
*(.bss*)
*(.tcmBSS)
ld文件
MEMORY
{
ROM_CODE (arx) : ORIGIN = 0x0, LENGTH = 0x00005000/* 20k */
TCMRAM (arw) : ORIGIN = 0x00100000,LENGTH = 0x00010000/* 64k */
XIP_CODE (arx) : ORIGIN = 0x1007C000, LENGTH = 0x000BF000/*
SYSRAM (arw) : ORIGIN = 0x20000000, LENGTH = 0x00040000/*
}
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
将RAM Data(一般是global variable)->TCM BSS上
__attribute__ ((__section__(".tcmBSS")))
将XIP (一般是method)->RAM上运行
ramTEXT
#define TEXT_IN_RAM __attribute__ ((__section__(".ramTEXT")))
static void TEXT_IN_RAM flash_reset(void)
Nand Flash,Nor Flash,CFI Flash,SPI Flash 之间的关系
http://blog.chinaunix.net/uid-28458801-id-4421734.html
http://bbs.ednchina.com/BLOG_ARTICLE_3027768.HTM
.text
.rodata
.data
.ramTEXT
.tcmBSS
.bss
.heap
.stack_dummy
Others
40846
21911
2666
376
464
7157
2048
3072
.stack_dummy
—— MSP stack 空间 for ISR 和 system init阶段使用的stack 空间
msp应该是指_ASM void __set_MSP(uint32_t mainStackPointer
.heap——这个是for C-LIB reserve的一块空间,如果call到 c-lib 的malloc, 就用的这块空间, target user是C-LIB 自身的一些func, e.g. printf
app 用的heap 都是在FREERTOS 的heap区域, 应该是在ramTEXT里面
阅读全文
0 0
- Code Size
- PMD规则之Code Size Rules
- Maximum size of arbitrary code allowed
- Keil中Memory Model和Code Rom Size说明
- leetcode 日经贴,Cpp code -Minimum Size Subarray Sum
- 【Leet Code】209. Minimum Size Subarray Sum---Medium
- *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
- *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
- text, data and bss: Code and Data Size Explained
- *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
- size
- size
- size
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil C51大端模式与版本选择导致的仿真器Code size limit:2k
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil中 Program Size: Code RO-data RW-data ZI-data解析
- C语言_标准库
- [leetcode]140. Word Break II(Java)
- 深入理解JVM--class类文件结构
- 浅谈前端移动端页面开发(布局篇)
- JavaScript学习笔记(基本数据类型)
- Code Size
- 小程序访问本地服务器注意点
- nvalid bound statement (not found)解决方法
- 大数据相关
- C语言指针
- (Swift) iOS Apps with REST APIs(五) -- 整合REST API和表格视图
- Java类的设计模式综述
- 漫步最优化十四——凸函数与凹函数
- 浅谈对spring的理解