ZET6芯片# m* s( z! \" W) E* I7 \ }- k
4 z( c; y Y& [. n
0 Z+ R5 P d- F: e2 I/ e
3 @$ g- L: j5 J- ^$ F: A
( w9 q; ?9 k5 ]9 ^0 k, F该芯片内部自带了64k字节的SRAM,以及512K的内部FLASH/ M# q; s0 Y1 A% Z" P) Q" Y' _5 E3 m% u
U* P. b C" o1 B4 g# |# I5 r
1 \" s7 T( g- V9 e1 [" L
! g5 K1 Z6 s* e# ]IROM1=0x80000=512K 和IRAM1=0X10000=64k的大小6 D# r, _* o8 I- z( `
: c- x6 \4 g% `7 T: J6 F0 G* J+ u同时开发板外置了1M字节外部SRAM芯片(IS62WV51216): R/ Z7 o1 C: I9 n
1 M" [- b d3 d
0 y9 ?3 h) H; L6 ?& ]& j A0 b
* i- C( C/ h( N# ^9 e1M字节(即512K*16位)其中512K是由19根地址线决定,219=512K; 16位是由16根数据线决定的
0 N& o7 r. C8 i @5 L( i# c
) c _( Z% H8 V v! J t64k字节内部SRAM程序相关
6 m+ J9 Z* E- N! U- my_mem_init(SRAMIN); //初始化内部内存池' [; d; u3 s' ^4 ]1 B
- #define SRAMIN 0 //定义内部内存池2 r; E4 J) ~% P6 M% F* N
- //mem1内存参数设定.mem1完全处于内部sram& t# _7 k- D' ]
- #define MEM1_BLOCK_SIZE 32 //一个内存块大小为32字节) U- P% ?' M/ l( S! m- I
- #define MEM1_MAX_SIZE 40*1024 //最大管理内存40K字节,可以自己根据需要调整2 j, f) b9 H/ K
- #define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE //内存表的大小( H3 k. h# p( e0 S4 x k4 L
- //内存池(32字节对齐)
" r9 f$ ?# a! k+ M% n2 x6 Y6 b - __align(32) u8 mem1base[MEM1_MAX_SIZE]; //内部sram内存池,数组的起始地址由编译器自动分配
8 K0 u, }8 ]: z( u - //内存管理表
* T* ?2 A* j7 z0 b9 I - u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //内部sram内存池MAP
复制代码
4 u, ^3 p1 F% U: F- q1M字节外部SRAM程序相关- }/ S8 [2 N0 p5 S+ m
- my_mem_init(SRAMEX); //初始化外部内存池6 Q5 y# @! @. z! e) M# a- m
- #define SRAMEX 1 //定义外部内存池
+ d( N1 l/ t4 A, T" S1 Y; _( h% d - //mem2内存参数设定.mem2完全处于外部sram
8 L4 T- w7 H4 c% m! W, c9 C - #define MEM2_BLOCK_SIZE 32 //一个内存块大小为32字节
% _! E0 @, d) M6 T/ R' \6 ^ - #define MEM2_MAX_SIZE 960*1024 //最大管理内存960K字节,可以根据自己需要调整
+ D3 `2 N( ?8 Y0 a. v - #define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE //内存表的大小
$ U' R/ o- A3 H/ y - //内存池(32字节对齐)" z) p- Z! t8 M( ]* T) ~4 c
- __align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));//外部sram内存池,数组的起始地址为0X68000000
5 f3 c& L, b: I# r* z - //内存管理表$ N& q" n9 w. f$ m
- u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE)));//外部sram内存池MAP
复制代码
% B( w; C g% C1 Y$ u& X9 p8 o分块式内存管理* _! L6 n. \% A
2 v5 Q7 N4 ^/ r/ z3 ~
+ w" K" ^8 F. G3 I, G% G! Z0 z
! M, p5 a6 s' K7 P 分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为 n块,对应的内存管理表,大小也为 n,内存管理表的每一个项对应内存池的一块内存。- c: O7 Q6 [& d! w3 p
: M& w# H0 q% y* V+ K 内存管理表的项值代表的意义为:当该项值为 0 的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。比如某项值为 10,那么说明包括本项对应的内存块在内,总共分配了 10 个内存块给外部的某个指针。6 _" c$ e: a' K$ T
# T2 ]) j' l! s2 N7 w3 v h 内存分配方向是从顶->底的分配方向。即首先从最末端开始找空内存。当内存管理刚初始化的时候,内存表全部清零,表示没有任何内存块被占用0 Q @4 m- B( U5 a, S O ]. T- y# X# t5 o& s
8 t3 @/ C* W5 y, J& x' F注:
! `. u: X- G% W% ]* B, ]5 H- ^& y
当涉及到跑算法,GUI应用等内置的内存不够用时,就用外部的SRAM来扩充内存
, m- `: W/ B5 D) R" W: G7 C& E& }; V4 ^( l6 |
0 E! x+ K" P9 Y# L/ B9 a2 C% x程序数据的存储区域- y; ^- G$ r5 T4 R7 G# j
下载到flash的有:Code: 代码* ]" X* E8 I& b2 }/ E0 R8 h
RO-data:程序定义的常量
- ~: X: p. B7 y; s- j RW-data:已初始化的非0全局变量,当程序初始化时会拷贝到RAM中去% B4 c: y- ?1 ~/ ~0 U
0 Z3 a7 I( G7 J1 _7 d9 p0 ]
下载到RAM的有:RW-data:已初始化的全局变量. Z2 L% J# s; I; G6 a2 {. Z
ZI-data:未初始化的全局变量,以及初始化为0 的变量
6 B9 j& E/ S: n
7 {" j2 a6 t3 B8 YSTM32F103ZET6的flash资源详解
1 f1 T' j# s" J* D4 ? ZET6芯片内部内置了512K字节的flash,用于存放代码和数据常量,是主存储块,起始地址为0x08000000,这是程序执行的起始地址,此时的BOOT0和BOOT1都接GND.被划分为256页,每页2K字节; ?8 h g: c; i! D8 i
' P! R6 l! S' h) f5 t
; F' X- N" i( O% }
2 A- m+ @8 n- o
同时开发板外置了16M字节的外部flash芯片,即为W25Q1282 `- c; U6 F* ^6 {4 [$ g0 D
+ P) @# L1 [+ d; O$ u# N
7 U$ \) x" e. h1 ^3 q8 m3 x% H- X5 W. r" d N
采用spi通信传输,分成256个块(BLOCK),每块64k字节,每块又分成16个扇区(sector),每扇区4K字节
9 W. |/ q# w7 b- N8 l5 V& A# W
, O- o f6 E6 \6 j2 L: e) N4 d' o相当于stm32外接了一个硬盘,虽调用速度慢,但数据不分丢失,一般用于存放FATFS文件系统,字库,图像,日志等- #define FLASH_SECTOR_SIZE 512
. G. }7 H: e2 N: V4 _/ J' w) y - //对于W25Q128 F2 G: ^. s# m2 W$ U4 ^& C# v$ P
- //前12M字节给fatfs用,12字节后,用于存放字库,字库占用3.09M,剩余部分,用户自定义使用 4 [1 e6 ?; q# I# \
- u16 FLASH_SECTOR_COUNT=2048*12; //W25Q1218
- ^5 _3 S- S; Z4 H8 u* L - #define FLASH_BLOCK_SIZE 8 //每个BLOCK分配8个扇区: E6 f5 l2 x) ` Q" y" K* w+ l
- //字库占用的总扇区数$ D+ F/ D% C; n' e b
- #define FONTSECSIZE 791
5 W4 l. d8 ^, n4 p - //字库存放的起始地址7 w5 A! Z2 R: B- c7 J* M! m
- #define FONTINFOADDR 1024*1024*12
复制代码 3 z) z6 Z. o4 x0 l5 G
$ p; ^7 S& }9 V4 ?2 {; L3 }' r% W8 t" ^! N) `, k
————————————————4 t' k( B# c; R! S, x; _+ [" m
版权声明:Psyduck_ing! s) S9 R* L) n# A# [
如有侵权请联系删除- [+ I- G+ R; L; c3 m: U/ y* h
' s ?: X) w+ u+ Q3 {
1 ` O7 \' E4 }5 H, b5 n; |; _
! \: k8 q2 W2 M2 t- y S; @ |