SDCCのVersion毎に処理を変える

諸事情で8051系MCUなぞいじっている。かの有名なFX2LPなワケだが。
Keil C51 の 4KB無償評価の壁に早くもぶつかったので SDCC に切り替え。

しかし、サンプルの多い SDCC 2.x と SDCC 3.x で基本型の定義が違う

  • xdata (SDCC2)
    • __xdata (SDCC3)
  • code (SDCC2)
    • __code (SDCC3)
special sdcc keywords which are not preceded by a double underscore are obsoleted (removed) in version
3.2.0 and higher. See section 3.1 Standard-Compliance.

つうことで SDCC 3.2.0 以降は ANSII非標準はぜんぶ'__'を接頭句に変更したっぽい。

で、こうなった。

#if SDCC >= 320
extern BYTE EZUSB_WriteI2C_(BYTE addr, BYTE length, BYTE __xdata * dat);
extern BYTE EZUSB_ReadI2C_(BYTE addr, BYTE length, BYTE __xdata * dat);
extern BYTE EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE __xdata * dat);
extern BYTE EZUSB_ReadI2C(BYTE addr, BYTE length, BYTE __xdata * dat);
extern void EZUSB_WaitForEEPROMWrite(BYTE addr);
#else //#if SDCC >= 320
extern BYTE EZUSB_WriteI2C_(BYTE addr, BYTE length, BYTE xdata * dat);
extern BYTE EZUSB_ReadI2C_(BYTE addr, BYTE length, BYTE xdata * dat);
extern BYTE EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE xdata * dat);
extern BYTE EZUSB_ReadI2C(BYTE addr, BYTE length, BYTE xdata * dat);
extern void EZUSB_WaitForEEPROMWrite(BYTE addr);
#endif //#if SDCC >= 320

これで SDCC 2/3 共用となるハズ。