ZET6芯片
. O6 X, ~6 n$ }& Z, B$ P& t
* F4 q0 Y+ v4 b' f! p- Q
; \9 a# ]% L# l
9 h& g$ w) @+ m, M) H3 q; C/ }9 y* K; I5 o0 O' r* P
该芯片内部自带了64k字节的SRAM,以及512K的内部FLASH
' {+ w: h# r. B4 d" r+ i2 ?
, Z( \' X3 i9 }" s! g5 b" p
6 x* ?) T0 l5 }7 F4 ~* q
G, F( [% p4 \. @' Q- zIROM1=0x80000=512K 和IRAM1=0X10000=64k的大小
6 T1 w+ r$ w$ c, C4 S) q0 |3 P- [ p: C% W6 k, y' r
同时开发板外置了1M字节外部SRAM芯片(IS62WV51216)$ V6 M! _1 [; Y5 A' d& _
- }( k7 I" P" S3 v0 z6 [0 e
$ r+ @1 o6 T4 o+ F! v" o: q9 k
0 f% {/ T' x9 r# F1M字节(即512K*16位)其中512K是由19根地址线决定,219=512K; 16位是由16根数据线决定的' m7 K# D: p1 M; X! n
* \/ P8 E* o# W( [64k字节内部SRAM程序相关
6 M- r; a0 t- F1 R/ h+ u3 E- my_mem_init(SRAMIN); //初始化内部内存池
7 z5 v4 J% `7 |6 r; {0 l0 H - #define SRAMIN 0 //定义内部内存池- N3 X5 O: D( _( k* N5 s
- //mem1内存参数设定.mem1完全处于内部sram
) ?# w2 u: N1 q" D/ W" D: q - #define MEM1_BLOCK_SIZE 32 //一个内存块大小为32字节
6 H) C' ?/ M8 w" V$ `$ K, }. r( f - #define MEM1_MAX_SIZE 40*1024 //最大管理内存40K字节,可以自己根据需要调整
I' v7 X1 W$ I" v - #define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE //内存表的大小
' @( T4 r5 r; q+ }3 d8 W - //内存池(32字节对齐)
) D* R) ]. j5 W! n6 \3 Z - __align(32) u8 mem1base[MEM1_MAX_SIZE]; //内部sram内存池,数组的起始地址由编译器自动分配
: e* ~# H3 S. k1 u8 b - //内存管理表: U: _3 Q; I# B3 O$ G0 K
- u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //内部sram内存池MAP
复制代码
- ]% M2 r! h+ N6 [1M字节外部SRAM程序相关
! d. n: I. L i9 G# n: E- Q$ U- my_mem_init(SRAMEX); //初始化外部内存池1 Y9 D- y3 W% E W
- #define SRAMEX 1 //定义外部内存池
9 ` A; h- i8 c, x! T - //mem2内存参数设定.mem2完全处于外部sram! U, Z& a1 m3 {
- #define MEM2_BLOCK_SIZE 32 //一个内存块大小为32字节6 \! r$ q) M$ C3 {2 m6 d0 w
- #define MEM2_MAX_SIZE 960*1024 //最大管理内存960K字节,可以根据自己需要调整* M1 Y6 K! \# B2 F
- #define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE //内存表的大小
+ v5 _0 h0 t9 O$ p1 y - //内存池(32字节对齐)
4 O% W! ?2 j2 @ - __align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));//外部sram内存池,数组的起始地址为0X68000000
) L# |8 Z* s5 L, L - //内存管理表
* E2 |$ i& u0 v% F - u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE)));//外部sram内存池MAP
复制代码 " c+ [( d5 k3 @: l3 }
分块式内存管理- h& T; t& W- E+ @ V+ ]
9 ^8 M8 A4 r, M
% z# P, K0 x! {7 L7 W: \2 m a1 h
0 ?$ F# A4 r4 H% C5 q
分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为 n块,对应的内存管理表,大小也为 n,内存管理表的每一个项对应内存池的一块内存。
1 x" h# ~9 _. [* r9 A, h2 l7 S0 c! m2 K; `' W
内存管理表的项值代表的意义为:当该项值为 0 的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。比如某项值为 10,那么说明包括本项对应的内存块在内,总共分配了 10 个内存块给外部的某个指针。
5 h0 Q6 C7 v* p d
8 D4 b$ w" Y8 O, W 内存分配方向是从顶->底的分配方向。即首先从最末端开始找空内存。当内存管理刚初始化的时候,内存表全部清零,表示没有任何内存块被占用
0 V6 u) V, g9 H5 ?7 D: B ?( m u1 |. ? h3 Y
注:* Q2 s% {; T; J# U- _* z# i/ k4 K' L0 |
4 ^3 c, A8 i/ r3 ^5 y6 s+ _1 s- a当涉及到跑算法,GUI应用等内置的内存不够用时,就用外部的SRAM来扩充内存; H, N2 S4 j/ J/ i }
, U% ~9 V1 w& \7 n& K( @' m. \5 F7 ~* g
程序数据的存储区域( j9 k/ Y6 A1 H/ O9 @
下载到flash的有:Code: 代码0 Q$ K& R- B: \$ j) l3 b
RO-data:程序定义的常量
. N. v+ m Z: j RW-data:已初始化的非0全局变量,当程序初始化时会拷贝到RAM中去- Q& w' \4 P6 s: g h
% A: p1 H+ @! o2 @9 i% g下载到RAM的有:RW-data:已初始化的全局变量
! W! `* v. K% I7 k4 v8 q0 | ZI-data:未初始化的全局变量,以及初始化为0 的变量
) [9 o6 H! i; T+ o$ B/ q' b7 s/ o
STM32F103ZET6的flash资源详解! u/ z6 T# H. C. N
ZET6芯片内部内置了512K字节的flash,用于存放代码和数据常量,是主存储块,起始地址为0x08000000,这是程序执行的起始地址,此时的BOOT0和BOOT1都接GND.被划分为256页,每页2K字节2 u% I' t3 |5 }* A2 b1 M2 M
4 {& z* P8 g' h; T" P; {
; l! g7 [, j# Y6 s/ K% P9 G2 {+ p
6 R% z" Q: v: n: Z2 H+ i4 @# Z/ j
同时开发板外置了16M字节的外部flash芯片,即为W25Q128
7 _% a" A; y7 F& n& t) F: S) P% V$ @8 u `
" y, b# K# q. i; x0 c, ?: A8 H
* D( T- W9 e# H采用spi通信传输,分成256个块(BLOCK),每块64k字节,每块又分成16个扇区(sector),每扇区4K字节
8 X u/ C# T5 |& ]$ y* R: `% b: ^5 e+ y0 }# w$ _
相当于stm32外接了一个硬盘,虽调用速度慢,但数据不分丢失,一般用于存放FATFS文件系统,字库,图像,日志等- #define FLASH_SECTOR_SIZE 512
& d& h) C: W: I' e) R; T$ F - //对于W25Q128$ `6 s: ?+ \$ S( V* C) F
- //前12M字节给fatfs用,12字节后,用于存放字库,字库占用3.09M,剩余部分,用户自定义使用
; N7 L* K7 a4 B( F - u16 FLASH_SECTOR_COUNT=2048*12; //W25Q1218% b* ]5 W% W/ P5 W6 U. i a
- #define FLASH_BLOCK_SIZE 8 //每个BLOCK分配8个扇区/ C5 g& d6 a- S* c5 ]
- //字库占用的总扇区数1 ]6 q) l; U9 L& [/ |5 W- q: M
- #define FONTSECSIZE 791 w. l1 s; k$ l8 m% O3 v. T; n
- //字库存放的起始地址
1 E" R: D6 b5 E/ O' ^. n - #define FONTINFOADDR 1024*1024*12
复制代码 * y5 V+ C: ]1 ^' o5 \& v8 ~, J, L* q
5 Z/ h2 M% Y6 M" M
! \* N5 ^) Z/ m# U- C2 |) `3 f/ J, l
————————————————: K* F- x5 h. _! h
版权声明:Psyduck_ing
" R1 _4 e# y+ [如有侵权请联系删除
0 X! k$ a1 K% w( p
: D, c, X! \4 S3 y+ M7 c* g$ S* a2 t6 h! R) e: _
C% }/ u0 g/ a4 b
|