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 共用となるハズ。