|
Cortex?-M3 将片内外设和SRAM都做了位映射。=====这么处理,单片机就无法直接支持4G字节内存。哈。$ _; U# n$ J9 S2 l6 y0 X+ r & z& R5 M9 I" J i, y6 i* g# i (08年,笔记本电脑正在4G内存热炒,也来凑个热闹) 0 J. |+ {1 @9 M4 r2 |8 [% d$ G SRAM空间2000... 映射到2200...$ S, W2 m0 k. D/ Y! g, Y, m 实际上,为片内SRAM仅保留了2000,0000 - 200f,ffff。 Cortex?-M3 仅保留1Mbyte空间,马马虎虎====要知道,受到07年的飞身直落,08年的DDR2仅相当于1M折合1元人民币!(不好意思,又来了。20080313Hy512M DDR2-667仅58元人民币--板上8颗芯片?每颗芯片64Mbyte不到8元?实际上DDR芯片非存储部分占用了相当大面积,近乎一半,不能简单除法。内存与逻辑生产工艺也不相同。片内SRAM相当占面积,更不要提主流CPU内的高速缓存RAM......) 9 R$ u5 b4 x" {2 P1 L, q s3 U& j( ~& H0 r. N. I, Y 闲话少说,言归正传:4 ?7 v, G$ d2 w5 l& z 0x2000 0000 bit0 对应 0x2200 00001 F* t: o$ m! F9 B+ I9 C, P( ] 0x2000 0000 bit1 对应 0x2200 0004 0x2000 0000 bit2 对应 0x2200 0008" y4 {0 T' o' O, S. p9 w; [ P! q ......- a6 X- q$ d* i 0x200f ffff bit15对应 0x23ff fffc 呵呵/ X4 Y! S- u( s; P6 \! t+ t 由于32位系统,一次处理4个字节比较直观;所以,总是把4个字节一起处理;于是,字节地址0123就被一3 K- P8 P, N4 t( D 次性处理掉了;总之,地址没有123那样连续,而是0,4,8,c,0这样蹦蹦跳跳。5 { b9 S, A5 M6 S& k+ a9 l =======为每一个bit分配一个 “32bit MCU 可以方便处理的地址”,需要占用32倍地址空间。 % ]& t/ Y- Z' U0 u; X! i- C' z r& g 因此,嗯,是这样的,地址的计算公式,稍微复杂了点: bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4) SRAM- l2 {2 I! b4 Y L, W* X# q 2200 0000 加上偏移 SRAM_BB_BASE6 b( w0 K8 H& m. K7 t; I( l# n& L ( Q4 [/ h. Z/ Z6 G void get_bit(u8 db8) {0 C* Q' T7 B* \% t5 q$ k- X vu32 VarAddr; VarAddr = (u32)&db8; VarAddr = (0x22000000 | ((VarAddr - 0x20000000) |
微信公众号
手机版