
Cortex?-M3 将片内外设和SRAM都做了位映射。=====这么处理,单片机就无法直接支持4G字节内存。哈。 (08年,笔记本电脑正在4G内存热炒,也来凑个热闹) ' x- W1 e5 Z9 J: V' W/ i& X9 O SRAM空间2000... 映射到2200...* J$ j c- X$ s- a 实际上,为片内SRAM仅保留了2000,0000 - 200f,ffff。" ]0 q d1 F# t8 [ p# a2 M3 Y) O Cortex?-M3 仅保留1Mbyte空间,马马虎虎====要知道,受到07年的飞身直落,08年的DDR2仅相当于1M折合1元人民币!(不好意思,又来了。20080313Hy512M DDR2-667仅58元人民币--板上8颗芯片?每颗芯片64Mbyte不到8元?实际上DDR芯片非存储部分占用了相当大面积,近乎一半,不能简单除法。内存与逻辑生产工艺也不相同。片内SRAM相当占面积,更不要提主流CPU内的高速缓存RAM......) # j$ ?5 u: w& o, S! k# R' F' X 闲话少说,言归正传:9 d# a+ A0 i* h% Y3 U" q/ U& p# D2 E 0x2000 0000 bit0 对应 0x2200 0000! n* l" S, R7 N. E+ D 0x2000 0000 bit1 对应 0x2200 0004- |# o: u2 H3 ~1 {$ V 0x2000 0000 bit2 对应 0x2200 0008 ...... 0x200f ffff bit15对应 0x23ff fffc 呵呵 由于32位系统,一次处理4个字节比较直观;所以,总是把4个字节一起处理;于是,字节地址0123就被一; \; s% x3 K" i3 s" Z . G6 V! L# L: f ^9 v 次性处理掉了;总之,地址没有123那样连续,而是0,4,8,c,0这样蹦蹦跳跳。 =======为每一个bit分配一个 “32bit MCU 可以方便处理的地址”,需要占用32倍地址空间。 9 R( L b) d. A+ [" { 因此,嗯,是这样的,地址的计算公式,稍微复杂了点: bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4) $ J. ?/ x- \( B* | f; p; e. M; r SRAM5 J+ b3 ~$ J2 S/ L 2200 0000 加上偏移$ y2 l6 O% u1 w" w0 Z0 Y SRAM_BB_BASE9 `* W# e. o% N7 L1 R* k( D" o 1 f0 G$ O+ }' M* e0 f void get_bit(u8 db8) { vu32 VarAddr;: @1 m" A, ^6 W ` VarAddr = (u32)&db8;( g+ H0 R3 Z5 t6 _) n VarAddr = (0x22000000 | ((VarAddr - 0x20000000) |