|
Cortex?-M3 将片内外设和SRAM都做了位映射。=====这么处理,单片机就无法直接支持4G字节内存。哈。# v* N6 m, y4 m. w) F9 d4 q* t2 S / ~* o; T8 {0 D: s& m (08年,笔记本电脑正在4G内存热炒,也来凑个热闹)- d7 I0 t! o, _ q% T& ~. K / L( K7 f0 U0 ` SRAM空间2000... 映射到2200... 实际上,为片内SRAM仅保留了2000,0000 - 200f,ffff。- e: U. i& [6 g. C7 ^0 g Cortex?-M3 仅保留1Mbyte空间,马马虎虎====要知道,受到07年的飞身直落,08年的DDR2仅相当于1M折合1元人民币!(不好意思,又来了。20080313Hy512M DDR2-667仅58元人民币--板上8颗芯片?每颗芯片64Mbyte不到8元?实际上DDR芯片非存储部分占用了相当大面积,近乎一半,不能简单除法。内存与逻辑生产工艺也不相同。片内SRAM相当占面积,更不要提主流CPU内的高速缓存RAM......): A( F5 D1 k6 R J) F* J+ T7 K 闲话少说,言归正传: 0x2000 0000 bit0 对应 0x2200 0000 0x2000 0000 bit1 对应 0x2200 00040 S7 l3 z7 W: U) c Y" v9 m 0x2000 0000 bit2 对应 0x2200 0008 ......% s/ e4 q% O4 V1 t! L, ?: ^8 R. d- ? 0x200f ffff bit15对应 0x23ff fffc 呵呵; j9 {2 p1 E& k1 I' d8 l3 h+ D 8 r" ~2 B. o5 x% j 由于32位系统,一次处理4个字节比较直观;所以,总是把4个字节一起处理;于是,字节地址0123就被一 次性处理掉了;总之,地址没有123那样连续,而是0,4,8,c,0这样蹦蹦跳跳。 =======为每一个bit分配一个 “32bit MCU 可以方便处理的地址”,需要占用32倍地址空间。 因此,嗯,是这样的,地址的计算公式,稍微复杂了点: bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)6 z4 `; [6 p' W$ u) }+ s 1 z M# Y4 X( U5 p, Q5 ^3 @ SRAM 2200 0000 加上偏移 SRAM_BB_BASE. m" _3 T: I; ^% A / j2 v9 `# ^& W9 V8 m5 t void get_bit(u8 db8)- g# ^. e# i' H2 S( E c { vu32 VarAddr;4 d* _5 H9 L ^8 i+ n VarAddr = (u32)&db8; VarAddr = (0x22000000 | ((VarAddr - 0x20000000) |
微信公众号
手机版