Cortex?-M3 将片内外设和SRAM都做了位映射。=====这么处理,单片机就无法直接支持4G字节内存。哈。2 v0 x: @+ |. v, J* g (08年,笔记本电脑正在4G内存热炒,也来凑个热闹)6 ^; ~/ y; o! W( h9 ]. a' k * N7 S7 z0 N* u# l, c- |; o$ s. _ M SRAM空间2000... 映射到2200... 实际上,为片内SRAM仅保留了2000,0000 - 200f,ffff。 Cortex?-M3 仅保留1Mbyte空间,马马虎虎====要知道,受到07年的飞身直落,08年的DDR2仅相当于1M折合1元人民币!(不好意思,又来了。20080313Hy512M DDR2-667仅58元人民币--板上8颗芯片?每颗芯片64Mbyte不到8元?实际上DDR芯片非存储部分占用了相当大面积,近乎一半,不能简单除法。内存与逻辑生产工艺也不相同。片内SRAM相当占面积,更不要提主流CPU内的高速缓存RAM......)0 h. P4 c6 b# J1 F1 Z9 H- z % u( I3 l( Z9 I. ] 闲话少说,言归正传: 0x2000 0000 bit0 对应 0x2200 00007 t( {! P2 X* M: M 0x2000 0000 bit1 对应 0x2200 0004 0x2000 0000 bit2 对应 0x2200 00084 V8 s# t9 d6 d: P ......" `6 I/ f, T$ }- Y3 |7 N 0x200f ffff bit15对应 0x23ff fffc 呵呵# m' a3 N/ d/ [3 {; Y! H 7 z& @7 W, E" J. K8 L( W $ y7 c$ q4 Q$ r; X# e! p; H1 A+ ~, X 由于32位系统,一次处理4个字节比较直观;所以,总是把4个字节一起处理;于是,字节地址0123就被一 M- q F- K* i6 q 次性处理掉了;总之,地址没有123那样连续,而是0,4,8,c,0这样蹦蹦跳跳。 =======为每一个bit分配一个 “32bit MCU 可以方便处理的地址”,需要占用32倍地址空间。- c/ t# ?- J! t% y% J* o 因此,嗯,是这样的,地址的计算公式,稍微复杂了点:7 Z8 d3 W, I: K. K, x2 c/ e bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4) SRAM1 r1 [2 k$ g' j1 z& t 2200 0000 加上偏移& a6 b( N$ t/ ]) t SRAM_BB_BASE& o" C- g* U7 z) k " Y& }, d, D! }% X# N void get_bit(u8 db8) { vu32 VarAddr; VarAddr = (u32)&db8;1 S8 I6 |7 j* ~/ c. ]1 T+ z! V VarAddr = (0x22000000 | ((VarAddr - 0x20000000) |