
Cortex?-M3 将片内外设和SRAM都做了位映射。=====这么处理,单片机就无法直接支持4G字节内存。哈。 (08年,笔记本电脑正在4G内存热炒,也来凑个热闹)+ ]2 D% d: Q! Z. ]( C; s/ K 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......) 5 M$ F9 r$ W* x% z+ `. F9 q' |* X6 Q 1 _! T. D3 s' q9 Z, \ 闲话少说,言归正传:3 K8 v7 A+ j2 v3 u0 O 0x2000 0000 bit0 对应 0x2200 0000 0x2000 0000 bit1 对应 0x2200 00041 ]3 C5 Y% y( g6 F3 |, B 0x2000 0000 bit2 对应 0x2200 0008% K" y- o! e, u2 v5 }$ s2 f- `4 \ ......$ [# P s; t' v2 F% D; ?. T4 w4 e; o$ k 0x200f ffff bit15对应 0x23ff fffc 呵呵; C' s* L2 S3 @% c: V$ \ , ~. a$ l' U1 f2 o* M5 ? 由于32位系统,一次处理4个字节比较直观;所以,总是把4个字节一起处理;于是,字节地址0123就被一7 k4 m; n5 v% x4 L7 c2 Q 次性处理掉了;总之,地址没有123那样连续,而是0,4,8,c,0这样蹦蹦跳跳。0 y: B$ }3 X& r) f/ k6 N =======为每一个bit分配一个 “32bit MCU 可以方便处理的地址”,需要占用32倍地址空间。+ s3 B2 p: F4 E& d5 X& T$ e ( B: R) J- y# a% O% e: D 因此,嗯,是这样的,地址的计算公式,稍微复杂了点:6 ?7 C, P0 t" {" n4 M" M& N bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4). z5 y9 v0 U4 z SRAM B; }9 Z G* _+ {; }' s+ T3 a+ K5 m 2200 0000 加上偏移( g5 M5 U; o! O% C$ q3 g" [ SRAM_BB_BASE" P, ^7 Z# E! [ B: b5 w void get_bit(u8 db8); I- C( c" m& Z! c7 ] {2 g/ |! f& C. M vu32 VarAddr;& ?( T, d3 r: O+ n VarAddr = (u32)&db8; VarAddr = (0x22000000 | ((VarAddr - 0x20000000) |