メモリサイズの考え方

組み込み開発をやっているとリンカースクリプトだったりでメモリのサイズを規定したりすることがある。

i.MXRTのリンカースクリプトをリストに示すが、メモリーのサイズがhexで書かれており慣れていないとわかりにくいと思う

MEMORY
{
  /* Define each memory region */
  BOARD_FLASH (rx) : ORIGIN = 0x60000000, LENGTH = 0x800000 /* 8M bytes (alias Flash) */  
  BOARD_SDRAM (rwx) : ORIGIN = 0x80000000, LENGTH = 0x1e00000 /* 30M bytes (alias RAM) */  
  NCACHE_REGION (rwx) : ORIGIN = 0x81e00000, LENGTH = 0x200000 /* 2M bytes (alias RAM2) */  
  SRAM_DTC (rwx) : ORIGIN = 0x20000000, LENGTH = 0x10000 /* 64K bytes (alias RAM3) */  
  SRAM_ITC (rwx) : ORIGIN = 0x0, LENGTH = 0x10000 /* 64K bytes (alias RAM4) */  
  SRAM_OC (rwx) : ORIGIN = 0x20200000, LENGTH = 0x20000 /* 128K bytes (alias RAM5) */  
}

0x800000の例を計算してみる。

これを全部足してあげると8388608となりこれをMbyte(1024*1024)で割ると8MBとなる。

桁数でどのぐらいの大きさか知っておくとコードも読みやすくなると思う

hex byte
0x800000 8M
0x80000 512K
0x8000 32K
0x800 2K