
Cortex?-M3 将片内外设和SRAM都做了位映射。=====这么处理,单片机就无法直接支持4G字节内存。哈。1 R- K; A$ Y" b* {8 U (08年,笔记本电脑正在4G内存热炒,也来凑个热闹) SRAM空间2000... 映射到2200... 实际上,为片内SRAM仅保留了2000,0000 - 200f,ffff。8 Y3 f: a9 }0 q5 R Cortex?-M3 仅保留1Mbyte空间,马马虎虎====要知道,受到07年的飞身直落,08年的DDR2仅相当于1M折合1元人民币!(不好意思,又来了。20080313Hy512M DDR2-667仅58元人民币--板上8颗芯片?每颗芯片64Mbyte不到8元?实际上DDR芯片非存储部分占用了相当大面积,近乎一半,不能简单除法。内存与逻辑生产工艺也不相同。片内SRAM相当占面积,更不要提主流CPU内的高速缓存RAM......) 闲话少说,言归正传:4 _; x ~6 s/ V7 Q5 `, X+ M 0x2000 0000 bit0 对应 0x2200 0000 0x2000 0000 bit1 对应 0x2200 0004: F# F' {4 A0 W, }5 Q) S 0x2000 0000 bit2 对应 0x2200 0008 ......5 F# U2 w8 l8 [1 J: O, E! |4 f- H 0x200f ffff bit15对应 0x23ff fffc 呵呵' m1 Z) t i2 T. O ) B2 [: u0 T7 I P; o! F 由于32位系统,一次处理4个字节比较直观;所以,总是把4个字节一起处理;于是,字节地址0123就被一 + H1 o" E/ x' U8 M0 M5 r; { 次性处理掉了;总之,地址没有123那样连续,而是0,4,8,c,0这样蹦蹦跳跳。 =======为每一个bit分配一个 “32bit MCU 可以方便处理的地址”,需要占用32倍地址空间。) v# o4 O2 I; G$ Z! o: m- c. P 因此,嗯,是这样的,地址的计算公式,稍微复杂了点:! r2 q3 a4 U6 m- Q; H7 V& L7 U$ E h bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)* Z: U/ \5 }+ Y7 r+ C8 x" x( k 3 [4 W) i4 _: q/ K( H7 K SRAM, T, ^ E! W7 Z 2200 0000 加上偏移* E9 m% m4 G0 B% j a+ V' y4 t9 \ A ]! V SRAM_BB_BASE , t5 b8 ~7 S0 v8 d9 O/ ` f4 c void get_bit(u8 db8) {/ ^: l; Q6 }% ~2 x vu32 VarAddr; VarAddr = (u32)&db8;' R$ h3 V: `$ x5 ?( [ VarAddr = (0x22000000 | ((VarAddr - 0x20000000) |