LoginSignup
0
3

More than 5 years have passed since last update.

組込みC > enumと#defineの違い

Last updated at Posted at 2017-03-01
動作対象
MSP430
#define IDX_CMD (1)
#define IDX_UTC_TIME (2)
#define IDX_STS (3)
#define IDX_LAT (4)
#define IDX_NS (5) // North or South
#define IDX_LON (6)
#define IDX_EW (7) // East or West
#define IDX_VELOCITY (8)
#define IDX_DIRECITON (9) // or orientation
#define IDX_UTC_DATE (10)
enum {
  IDX_CMD = 1,
  IDX_UTC_TIME,
  IDX_STS,
  IDX_LAT,
  IDX_NS, // North or South
  IDX_LON,
  IDX_EW, // East or West
  IDX_VELOCITY,
  IDX_DIRECITON, // or orientation
  IDX_UTC_DATE,
  // etc
};

どちらがメモリ使用効率が良いか?という疑問を持った。

MSP430の開発環境でのメモリ使用結果は、ともに以下だった。
GPSの値をUARTで読み取って、AQM1602(I2C接続のキャラクタLCD)に表示する実装。

5 434 CODE
  239 DATA (+19 absolute)
   25 CONST

自分の理解では、#defineの場合はプリプロセッサでコードの該当箇所が数値に置き変わる。そのため、余分なメモリ消費がない。
一方で、enumの処理はどうなのかは不明。
上記のメモリ消費だけを見れば、enumの場合もプリプロセッサで置換が起きているとも考えられるが、未消化。

WIP (Work In Progress)。

以下は上記の疑問の回答にはなっていない。
http://stackoverflow.com/questions/10006700/does-defining-enum-type-has-a-heavy-memory-imprint
http://stackoverflow.com/questions/136946/difference-between-enum-and-define-statements

0
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3