Cortex?-M3 将片内外设和SRAM都做了位映射。=====这么处理,单片机就无法直接支持4G字节内存。哈。" G/ y" z% P( |7 @: I& z (08年,笔记本电脑正在4G内存热炒,也来凑个热闹) SRAM空间2000... 映射到2200...6 \8 j9 h" t: _; Y 实际上,为片内SRAM仅保留了2000,0000 - 200f,ffff。 Cortex?-M3 仅保留1Mbyte空间,马马虎虎====要知道,受到07年的飞身直落,08年的DDR2仅相当于1M折合1元人民币!(不好意思,又来了。20080313Hy512M DDR2-667仅58元人民币--板上8颗芯片?每颗芯片64Mbyte不到8元?实际上DDR芯片非存储部分占用了相当大面积,近乎一半,不能简单除法。内存与逻辑生产工艺也不相同。片内SRAM相当占面积,更不要提主流CPU内的高速缓存RAM......)3 ~1 c" |5 s! w + ]7 j7 }& C+ Q5 R9 G" K5 r * D# q% a3 R7 S! z 闲话少说,言归正传: 0x2000 0000 bit0 对应 0x2200 0000 0x2000 0000 bit1 对应 0x2200 0004# e7 s7 V0 E! K2 q& ?2 @ 0x2000 0000 bit2 对应 0x2200 0008) l" ~/ u( x) j1 T5 |' o/ [ ......2 D+ U. D' y6 K6 ]' ^4 B D 0x200f ffff bit15对应 0x23ff fffc 呵呵 + \* t7 `2 C1 q+ J0 C/ i , C. R# f% ~# O- ~. Q$ v 由于32位系统,一次处理4个字节比较直观;所以,总是把4个字节一起处理;于是,字节地址0123就被一 次性处理掉了;总之,地址没有123那样连续,而是0,4,8,c,0这样蹦蹦跳跳。) X8 [/ q5 K/ g/ s5 s8 X =======为每一个bit分配一个 “32bit MCU 可以方便处理的地址”,需要占用32倍地址空间。' z/ N$ U6 O9 M. r+ A+ v+ D, c : q& f! S) m1 E! j 因此,嗯,是这样的,地址的计算公式,稍微复杂了点: bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)! g8 x& a6 n' I( E2 C- n0 | 5 H& X% V, R. a" p4 X$ \: x SRAM 2200 0000 加上偏移 SRAM_BB_BASE Z/ n' Z2 a4 N void get_bit(u8 db8) { vu32 VarAddr;& y' L2 d/ {5 F" m: ~3 H9 d: R- p VarAddr = (u32)&db8;! H! t) `' x& R# ` a VarAddr = (0x22000000 | ((VarAddr - 0x20000000) |