ZET6芯片
! F3 z) F) O& N' p1 v, z: I7 o. d9 g r
7 Z: p$ \( m7 G2 I5 n6 q* B0 F, V6 K" X0 e& L: N+ B8 m/ @
* N6 ], V# F' J0 y9 R: p q
该芯片内部自带了64k字节的SRAM,以及512K的内部FLASH/ j5 r0 v7 g( W( m2 u- o3 b
6 ~: ]" ^ f* U7 h: e! @
1 b+ z( [. }; D8 V0 s0 p
# x+ U: ?% f E2 _* x1 s; x; `, mIROM1=0x80000=512K 和IRAM1=0X10000=64k的大小6 T7 K9 N6 B' q# Y/ r- k; }
) O# S% r/ v! A- ~4 v: Y同时开发板外置了1M字节外部SRAM芯片(IS62WV51216)% d1 C% j9 S) T3 x
5 P1 r) |, G# g+ k# _* D5 |
1 ^/ w) X+ e( s( b) H; N. k& o$ ?, x8 e$ K
1M字节(即512K*16位)其中512K是由19根地址线决定,219=512K; 16位是由16根数据线决定的
- Y1 l( s- S. ^* Q2 X2 j8 y! h4 l' Z6 {& {2 z% M8 K r: @5 B* A
64k字节内部SRAM程序相关
2 _; Q; j( T: v- my_mem_init(SRAMIN); //初始化内部内存池
6 w5 M- F9 s2 j, M% v( _ - #define SRAMIN 0 //定义内部内存池4 {/ {: `) X! P! m* o
- //mem1内存参数设定.mem1完全处于内部sram2 L' Z N9 n6 v( |
- #define MEM1_BLOCK_SIZE 32 //一个内存块大小为32字节% J, z+ e3 g1 B- o# N( e" p- C$ ]
- #define MEM1_MAX_SIZE 40*1024 //最大管理内存40K字节,可以自己根据需要调整) z% ?$ U/ K% P! Q+ p2 j- H2 z
- #define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE //内存表的大小
& B" D9 I, D A$ \7 U$ X- s% g5 H) K - //内存池(32字节对齐)$ T# D9 I _7 w( u" G
- __align(32) u8 mem1base[MEM1_MAX_SIZE]; //内部sram内存池,数组的起始地址由编译器自动分配/ d) u8 y( x9 C( q/ d# q
- //内存管理表9 \4 N) f! c$ w/ C. L% Y- Y
- u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //内部sram内存池MAP
复制代码
8 U P# D! \0 ]1M字节外部SRAM程序相关& c) m4 C" M. z2 {8 `" g
- my_mem_init(SRAMEX); //初始化外部内存池. g; Q- {* N1 e# I/ ~2 K7 B
- #define SRAMEX 1 //定义外部内存池
' y+ }. G0 ~ Q$ z: j8 U; z( c - //mem2内存参数设定.mem2完全处于外部sram
1 m+ l U% C/ `9 U% t6 y - #define MEM2_BLOCK_SIZE 32 //一个内存块大小为32字节7 {+ M! ]; V" O4 v
- #define MEM2_MAX_SIZE 960*1024 //最大管理内存960K字节,可以根据自己需要调整
- h- ~- j' a$ w, v, M6 T - #define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE //内存表的大小
T1 Z/ B" R9 ]) [0 @7 u3 M# s- s - //内存池(32字节对齐)+ D- R( m" p7 V
- __align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));//外部sram内存池,数组的起始地址为0X68000000
7 K5 Q( ?& G$ X/ i. s8 _ - //内存管理表
7 g+ ]5 q9 n) t$ m/ w5 b& { - u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE)));//外部sram内存池MAP
复制代码
6 g( H" p) l" X. N% N p& |' D分块式内存管理
" J' O; N/ J0 r( Z$ M4 d8 i. s* g7 @# o/ v
Q, i6 ]" L4 C
8 ~4 y8 @% w7 ~% J( A 分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为 n块,对应的内存管理表,大小也为 n,内存管理表的每一个项对应内存池的一块内存。
: M& Y$ [; e6 X d/ u+ j N. q* E# t( j; `
内存管理表的项值代表的意义为:当该项值为 0 的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。比如某项值为 10,那么说明包括本项对应的内存块在内,总共分配了 10 个内存块给外部的某个指针。0 R. M" q5 |( x7 d
% E2 R6 G5 y6 j/ r8 W9 U 内存分配方向是从顶->底的分配方向。即首先从最末端开始找空内存。当内存管理刚初始化的时候,内存表全部清零,表示没有任何内存块被占用' D& b3 `8 G9 g8 V4 S, x: c3 g
% Q( Y* [4 _ o ?注:
: L1 y0 N' c; X3 r* f' k
9 \; m% w# E% J R+ w当涉及到跑算法,GUI应用等内置的内存不够用时,就用外部的SRAM来扩充内存8 O' U4 J' ]% I2 M4 p
' `8 U1 J. b1 w" F2 M- g A6 Z+ }$ G- V5 F8 H
程序数据的存储区域
" B% @8 b6 I$ D$ Q下载到flash的有:Code: 代码
& N3 S6 D0 i- ^1 E4 G) A0 V( K" R9 V9 o RO-data:程序定义的常量6 \2 m& e1 D2 z, r
RW-data:已初始化的非0全局变量,当程序初始化时会拷贝到RAM中去
1 }/ i H4 i; z! [- ^; r# @2 q% ?7 \1 O+ u# i
下载到RAM的有:RW-data:已初始化的全局变量
9 S; }1 R0 c7 n2 I* p: T. Z- W ZI-data:未初始化的全局变量,以及初始化为0 的变量 W0 Q) `7 }$ g
, v7 b( C. U9 c1 |
STM32F103ZET6的flash资源详解7 S7 V; N4 |, a9 _
ZET6芯片内部内置了512K字节的flash,用于存放代码和数据常量,是主存储块,起始地址为0x08000000,这是程序执行的起始地址,此时的BOOT0和BOOT1都接GND.被划分为256页,每页2K字节: o: \$ O, m1 Y4 J% l: @5 P
+ X* }) t; [7 C8 x
8 l, Q5 }6 g& E. y* X: G7 O% ?5 h6 [) l+ w0 X4 O
同时开发板外置了16M字节的外部flash芯片,即为W25Q128' Z, c: p s e, r6 o5 P
+ S7 [: Y7 O7 T; a2 s, c' l) V6 |( o
+ S" q0 D: y% G6 P9 b$ n+ y3 ~/ q+ s: m, G6 _, K. c- Q
采用spi通信传输,分成256个块(BLOCK),每块64k字节,每块又分成16个扇区(sector),每扇区4K字节) F% p. X- _& }9 [ {9 t
3 D n$ z$ d; W, G相当于stm32外接了一个硬盘,虽调用速度慢,但数据不分丢失,一般用于存放FATFS文件系统,字库,图像,日志等- #define FLASH_SECTOR_SIZE 512
! f; o% [/ l' C3 s0 G3 P - //对于W25Q128
q- ` [9 L# l% a7 E2 d3 M - //前12M字节给fatfs用,12字节后,用于存放字库,字库占用3.09M,剩余部分,用户自定义使用
( {2 V, h* T; _+ \ w4 j9 i - u16 FLASH_SECTOR_COUNT=2048*12; //W25Q1218, I4 k/ {1 [8 M
- #define FLASH_BLOCK_SIZE 8 //每个BLOCK分配8个扇区
' i0 Q9 P0 D* G. m# y7 ?& ?: | - //字库占用的总扇区数
E3 e2 A* e5 Q) {0 v - #define FONTSECSIZE 791! f6 {: m- F2 j! X1 N1 F, R- a
- //字库存放的起始地址
6 f- [3 v$ s& o X ^9 x5 O - #define FONTINFOADDR 1024*1024*12
复制代码
. M% V K' f {
! m+ R) L1 a: @- i
) j: K6 J' ?) k+ X ~- s4 L————————————————
3 _2 F8 Q( d2 W版权声明:Psyduck_ing# ^0 q1 w) {; r/ Y) v& g3 P
如有侵权请联系删除
% Y8 ?) X: [5 Z6 e3 K+ ^. W" r3 G
0 p1 h& S, X$ `% K* T4 s6 b
7 a: T7 P' h$ p" Z0 d& V% H3 R |