æåã®èšäºã§ã¯ãããªããã»ããµã䜿çšããŠãC / C ++ã®ãœãŒã¹ã¬ãã«ã§ã¢ãžã¥ãŒã«æ§ãæŽçããããšã«ã€ããŠèª¬æããŸããã ã€ãŸãããã®ã¡ãœããã¯ããœãŒã¹å
ã«ç¹å®ã®ã¡ã¿ããŒã¿ãæžã蟌ãããšã«èŠçŽãããŸããããã¯ãå€éšããŒã«ã«ãã£ãŠåæãããã¢ãžã¥ãŒã«åãå®è£
ã§ããã°ã«ãŒãœãŒã¹ãçæããããã«äœ¿çšãããŸãã å®è£
ã®è©³çްã¯åè¿°ã®èšäºã«èšèŒãããŠãããããããã§ã¯ç¹°ãè¿ããŸããã ãã®èšäºã§ã¯ãããå°ãå
ã«é²ã¿ãã¡ã¿ããŒã¿ãŸãã¯æ³šéã䜿çšããŠãã¢ãžã¥ãŒã«æ§ã ãã§ãªãä»ã®äŸ¿å©ãªæ©èœãå®è£
ã§ããããšã瀺ããŸãã
Google GuiceãSpring for CïŒã¢ãžã¥ãŒã«æ§ãšã¢ã¹ãã¯ãã«é¢é£ããéšåïŒã®ãããªãã®ã§ãªããã°ãªããŸããã ãã®èšäºã¯æåã®èšäºãžã®è¿œå ãšæ¹åã§ãããšå¥ã«åŒ·èª¿ãããããããã§ã¯å®è£
ã®æè¡çãªè©³çްã«ã€ããŠã§ã¯ãªãããŠãŒã¶ãŒã«ã©ã®ããã«èŠãããã«ã€ããŠèª¬æããŸãã ãã®ãããã¯ã«èå³ãããå Žåã¯ãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã¢ããªã±ãŒã·ã§ã³èªäœãå
éšã«ã©ã®ããã«é
眮ãããŠãããã説æããç¶ããäœæããŸãã
ãŠãããŒãµã«ã¢ãããŒã·ã§ã³
以åã®ã¢ãããŒãã¯ããœãŒã¹å
ã«ã¡ã¿ããŒã¿ãæžãèŸŒãæ¹æ³ãšããŠ
#pragmaãã£ã¬ã¯ãã£ãã®äœ¿çšã«åºã¥ããŠããŸããã ãã®ã¡ã¿ããŒã¿ã®åœ¢åŒã¯ä»»æã«éžæãããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ïŒãœãŒã¹ãšé¢é£ä»ããããŠããæœè±¡ã¢ãžã¥ãŒã«ãšã®é¢ä¿ã®èª¬æïŒã«åãããŠèª¿æŽãããŠããŸãã å®éãæ³šéã®æŠå¿µã¯ããåºç¯ã§ãã ç¹ã«ãJavaãCïŒãªã©ã®èšèªãšé¡äŒŒç¹ãæãããšãã§ããŸããã¢ãããŒã·ã§ã³ã§ã¯ãã¢ãããŒã·ã§ã³ãå«ãŸããã³ãŒãã«é¢ããä»»æã®ã¹ããŒãã¡ã³ããèšè¿°ã§ãããããäœããã®æ±çšåœ¢åŒã䜿çšãããšäŸ¿å©ã§ãã
ãã®ã¢ãããŒãã®æ¢åã®å®è£
ã®äŸãšããŠããã¡ã€ã«å
ã®ããŸããŸãªå€æ°ãXMLãšããŠèšè¿°ã§ãã
Keilæ§æãŠã£ã¶ãŒã ïŒããšãã°ã宿°ãé
åã®ãµã€ãºãªã©ïŒãæããããšãã§ããŸãã æ¬¡ã«ããšãã£ã¿ãŒã§ãæ§æã¿ãã«ç§»åãããããã®ãªãã·ã§ã³ããã¡ã€ã«å
ã§æ€çŽ¢ããã®ã§ã¯ãªããã°ã©ãã£ã«ã«åœ¢åŒã§æ§æã§ããŸãã ããã«ããœãŒã¹ã³ãŒãã«ã¯ãã¢ãããŒã·ã§ã³ãšåŒã°ããå¯èœæ§ã®ããä»ã®æ
å ±ãå€ããããŸãïŒããšãã°ãGCCã®
__attribute__å
ã«èšè¿°ãããŠãããã®ãããããçš®é¡ã®
__declspecãªã©ïŒã
ããã€ãã®çç±ã«ãããã³ã¡ã³ãã«æ³šéãæžãããšãæåŠããããšã決å®ãããŸããããªããªããåŸè
ã¯ãç§ã®æ·±ã信念ã«ãããŠãåžžã«1ã€ã®æ©èœã®ã¿ãå®è¡ããå¿
èŠãããããã§ãã ãåç¥ã®ããã«ãããœãããŠã§ã¢ã®éåžžã«è€éãªããšã¯ã1ã€ã®ããšã§2ã€ã®ããšãããããšã§ãã äžæ¹ã
ïŒpragmaã®äœ¿çšã«ãåé¡
ããããŸããäžæãª
#pragmaã¯ããããžã§ã¯ãå
ã®å€æ°ã®ãã¡ã€ã«ã§ã¯ããŸãèŠæ ããè¯ããªããšããèŠåãåŒãèµ·ãããŸãïŒåãã¡ã€ã«ã«ããã€ãã®èŠåããããŸãïŒã ãããåé¿ããããã«ãã³ã³ãã€ã«æã«ç©ºã§è¡šç€ºããããã¯ãã§æ³šéãã©ããããããšã決å®ãããŸããã äžéšã®ã³ã³ãã€ã©ãçªç¶å
éšã®ããŒãºã«åãããŠãã®ãããªåœ¢åŒã®ãµããŒããéå§ãã
ïŒpragmaãå¿
èŠã«ãªã£ãå ŽåãC99æšæºã¯æçµçã«ãã¯ããä»ããŠ
#pragmaãå®çŸ©ããæ©èœãå°å
¥ããããããã®æå³ã§ã®ãã¯ãã¯ããæ®éçãªãœãªã¥ãŒã·ã§ã³ã§ãã
2çªç®ã®è³ªåã¯ããã¯ãå
ã«èšé²ãããæ³šéèªäœã®åœ¢åŒã«é¢é£ããŠããŸããã ãã ããè¿å¹Žã§ã¯ããããã®ã¿ã¹ã¯ã®ããã«XMLãããæ®åããŠããŸãã äžèšã®Keilã®äŸã«å ããŠãFreeRTOSãããžã§ã¯ãã§ã䜿çšãããŠããŸãïŒã³ã¡ã³ãã§ãïŒã XMLã¯ã審çŸçãªçç±ãããŸã ããŸãè¯ããªãããšãèšããªããã°ãªããŸãããXMLã¯ããªãåé·ã§ããããããã®åœ¢åŒã®æ
å ±ãæ±ãã®ã¯ããŸã䟿å©ã§ã¯ãããŸããã åæã«ã人éãèªã¿æžãã§ããããã«æ©æ¢°å¯èªãªããŒã¯ã¢ããèšèªããããCæ§æãšãäºææ§ããããŸã-ããã¯JSONã§ãã ãã ããåŒçšç¬Šã§ããŒãåŒçšããå¿
èŠããããããã³ãŒãå
ã®æ³šéã®å€èгãããŸãçŸãããªããããæ¡åŒµããŒãžã§ã³ã®YAMLã䜿çšãããŸããã YAMLã®ãã¹ãŠã®æ©èœã®ãã¡ãåŒçšç¬Šãªãã§ããŒãèšè¿°ããæ©èœã®ã¿ã䜿çšãããããšã«æ³šæããŠãã ããã æ³šéã¯ãããŒãµãŒã«æž¡ãããåã«åžžã«åäžã®è¡ã«å€æããããããè¡ã®æãè¿ãã«é¢é£ä»ããããYAMLæ©èœã¯äœ¿çšã§ããŸããã JSONã¯YAMLã®ãµãã»ããã§ããããããã¹ãŠãçŽç²ãªJSONã§èšè¿°ããããšãã§ããŸããããŒããåŒçšç¬Šãçç¥ããæ©èœã¯ãå°ããªçŽ æµãªããŒãã¹ãšèŠãªãããã¹ãã§ãã
ãããã£ãŠãäžçªäžã®è¡ã«ã¯æ¬¡ã®ãã®ããããŸããCãœãŒã¹ã«ã¯ãã¯ã
FX_METADATAïŒxïŒ ïŒ1ã€ã®åŒæ°ä»ã
ïŒãå«ããããšãã§ãããã®äžã«JSON圢åŒã§æ³šéãæžã蟌ãŸããŸãã æ³šéèªäœã®äžã«éãæ¬åŒ§ã䜿çšããå Žåã®ãšã©ãŒãé¿ããããã«ã泚éã¯æ¬åŒ§ã§å²ãŸããŠããŸãã æ
£äŸã«ãããæ³šéã¯åžžã«ããŒãšå€ã®ãã¢ã®ã³ã¬ã¯ã·ã§ã³ã§ããã€ãŸããJSONã®çšèªã§ã¯ããããã¯ããã·ã¥ã§ãã äŸïŒ
FX_METADATA(( { annotation: "hello world!" } ))
ãæ³åã®ãšãããæåã®èšäºã®ãã©ã°ãã¯æ°ãã圢åŒã«ã翻蚳ããããä»ã§ã¯æ¬¡ã®ããã«èšè¿°ãããŠããŸããã
#pragma fx interface MY_INTERFACE:MY_IMPLEMENTATION
ä»ã§ã¯æ¬¡ã®ããã«æžãããŠããŸãïŒ
FX_METADATA(( { interface: [MY_INTERFACE, MY_IMPLEMENTATION] } ))
ã¢ãžã¥ãŒã«æ§ã®å®è£
ã«é¢ããŠã¯ã倿Žã¯çŽç²ã«è¡šé¢çãªãã®ã§ãããå¶ç¶èšé²ãããŠãããã®ãã¹ãŠãå€ããå°ãªããæ®éçãªåœ¢åŒã§èšé²ããå§ããŸããã
#includeã«é¢ããŠã¯ããã¹ãŠãã»ãšãã©å€æŽãããŠããŸããïŒãã¯ãFX_INTERFACEã¯ãŸã åŒæ°ãšããŠäœ¿çšãããŠããŸãããçŸåšã¯åžžã«1ã€ã®åŒæ°ããããŸã-ããã¯åžžã«ãç¹å®ã®ã€ã³ã¿ãŒãã§ã€ã¹ãæå®ããæ©èœãªãã§ããã©ã«ãã€ã³ã¿ãŒãã§ã€ã¹ããªã³ã«ããããšãæå³ããŸãã
èŠçŽãããšããœãŒã¹ã«ã¯ããœãŒã¹ãä»»æã®ã¢ãžã¥ãŒã«ã«å±ããŠãããã©ããã説æããæ³šéãå«ãŸããŠããŸãã ã¢ãžã¥ãŒã«ã¯ã1ã€ã®ããããŒãã¡ã€ã«ïŒã€ã³ã¿ãŒãã§ã€ã¹ãèšè¿°ïŒãšä»»æã®æ°ã®ãœãŒã¹ãã¡ã€ã«ïŒ* .cã* .cppãªã©ïŒãå«ããœãŒã¹ã®ã»ããã§ãã ãã¡ã€ã«ã®ã¢ãžã¥ãŒã«ãžã®æå±ã«é¢ããæ
å ±ã¯ãã³ã³ãã€ã«ã®åã®æ®µéã§æœåºãããŸãã ãã®åŸãå€éšã¢ããªã±ãŒã·ã§ã³ã¯ããããŒãã¡ã€ã«ã®ååãã¢ãžã¥ãŒã«ã®ååã«ããããããã¡ã€ã«ãçæããŸããããã«ãããéåžžã®ããã«ããã¡ã€ã«åã ãã§ãªããã¢ãžã¥ãŒã«ã®èгç¹ãã
#includeãæ©èœããããã«ãªããŸãã ã©ã®ã¢ãžã¥ãŒã«ãã·ã¹ãã ã«å«ããããèŠã€ããæ¹æ³ããããåãœãŒã¹ã«ã¯ã¢ãžã¥ãŒã«ã«å±ããããšã«é¢ããæ
å ±ãå«ãŸããŠãããããã³ã³ãã€ã«ããå¿
èŠããããã¹ãŠã®ãã¡ã€ã«ãèªåçã«èŠã€ããããšãã§ããŸãã ã€ãŸããããã€ãã®ãœãŒã¹ã³ãŒã
#include FX_INTERFACEïŒMY_MODULEïŒãèšè¿°ãããšãMY_MODULEã€ã³ã¿ãŒãã§ã€ã¹ã«å±ããããšã«ã€ããŠã®ã©ãã«ãå«ããã¹ãŠã®ãœãŒã¹ãã·ã¹ãã ã«å«ãŸããããšã«ãªããŸãã
ã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒ
åœç¶ã
ã©ã³ã¿ã€ã ã管çèšèªã§è¡ãããšã¯ãããã®èª°ãã«ãã£ãŠãè¡ãããã¹ããªã®ã§ããããå®è£
ããã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠå°ãã話ããŸãã ã¢ãããŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã¯ãã¯ã©ã¹ã®ã»ããïŒDLLïŒãšããŠCïŒã§å®è£
ãããŸãã CïŒã§æžã䟡å€ããããã©ããã®åé¡ã¯ãä»ã®ãšããèå°è£ã«æ®ãããŠããŸãã ãã¬ãŒã ã¯ãŒã¯ã¯ãã¡ã¿ããŒã¿ã®äœ¿çšãã¢ã»ã³ããªã®ã¿ã«å¶éãããªãããã«äœæãããŸããã ãšããããã¡ã¿ããŒã¿ãªããžããªãžã®ã¢ã¯ã»ã¹ãå€éšããååŸã§ããããã«ãã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã ããã«ãããã¡ã¿ããŒã¿ã«åºã¥ããŠç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ãããµãŒãããŒãã£ã¢ãžã¥ãŒã«ãäœæã§ããå¯èœæ§ãåºãããŸãã å°æ¥çã«ã¯ããã¹ãŠã®ãã©ã°ã€ã³ã¯MEFãä»ããŠæ¥ç¶ããããããžã§ã¯ãæ§é ããåãé¢ãããäºå®ã§ãã
DLLã®ã»ããã«å ããŠãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã®æ©èœãå®è£
ãã2ã€ã®ã¢ããªã±ãŒã·ã§ã³ïŒã³ã³ãœãŒã«ãšã°ã©ãã£ã«ã«ïŒããããŸãã åŸè
ã¯éåžžã«ãããã¿ã€ãã®ç¶æ
ã§ãããä»ã¯æ€èšããŸããããã³ã³ãœãŒã«ã«ã€ããŠã¯ç°¡åã«æ€èšããŸãã
ã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã«ã¯7ã€ã®ã³ãã³ãã©ã€ã³ããŒãããããã®ãã¡3ã€ã®ã¿ãå¿
é ã§ãããœãŒã¹ãã©ã«ããŒãã¿ãŒã²ããã¢ãžã¥ãŒã«ïŒäŸåé¢ä¿ã®è§£æ±ºãéå§ããã¢ãžã¥ãŒã«ïŒãããã³åºåãã¡ã€ã«/ãã©ã«ããŒãžã®ãã¹ã®ãªã¹ãã§ãã ããšãã°ã泚éä»ããœãŒã¹ããã©ã«ããŒcïŒ\ src1ããã³dïŒ\ src2ã«ãããã¢ãžã¥ãŒã«MY_MODULEããã«ãããå¿
èŠãããå Žåãã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
fx_mgr -pc:\src1,d:\src2 -t MY_MODULE -o output_folder
ã³ãã³ããå®è¡ãããšããœãŒã¹ããã¡ã¿ããŒã¿ãæœåºãããMY_MODULEã¢ãžã¥ãŒã«ããå§ãŸãäŸåé¢ä¿ã解決ãããã³ã³ãã€ã«ããå¿
èŠããããã¹ãŠã®ãã¡ã€ã«ãå®çŸ©ãããŸãããã®åŸãã³ã³ãã€ã«çšã®ãã¡ã€ã«ã®åºåãçæãããŸãã
ãåºåãããæ¹æ³ã¯2ã€ãããŸãã
æåã®æ¹æ³
å°ããªãããžã§ã¯ãã«é©ããŠããããœãŒã¹ããã¹ãã®åœ¢åŒã§äœããé
ä¿¡ããã®ã«ã䟿å©ã§ãã æ¢åã®ãã©ã«ããŒãåŒæ°ãšããŠ
-oããŒã§æå®ãããå Žåããã®å Žåãå¿
èŠãªãã¹ãŠã®ãã¡ã€ã«ãæå®ããããã©ã«ããŒã«ã³ããŒãããããããŒãã¡ã€ã«ã¯ããããå®è£
ããã€ã³ã¿ãŒãã§ã€ã¹ã®ååã«åŸã£ãŠååã倿ŽãããŸãã ã·ã¹ãã ã«ã¯åã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã1ã€ããå«ããããšãã§ããªããããã³ã³ãã€ã«çšã®ãã¡ã€ã«ã1ã€ã®ãã©ã«ããŒã«ãã©ãã圢åŒã§é
眮ããŠãååã®ç«¶åã¯çºçããããã¯ã
FX_INTERFACE ïŒåŒæ°
#include ïŒã¯éåžžã«ç°¡åã«å®çŸ©ã§ããŸãïŒ
#define FX_INTERFACE(i) <ih>
远å ã®ãã¡ã€ã«ã¯å¿
èŠãããŸããã çµã¿èŸŒã¿ã§ã¯ãç¹å®ã®ã³ã³ãã€ã©ããŒã§ã³ã³ãã€ã«ããå¿
èŠãããããããœãŒã¹ã®åœ¢åŒã§æäŸãããã©ã€ãã©ãªã䜿çšããå¿
èŠãéåžžã«å€ããããŸãã ãã®ãã©ãããã¡ã€ã«ã¢ãããŒãã«ãããmakeã®äœ¿çšãIDEãªã©ãžã®ãã¡ã€ã«ã®è¿œå ãç°¡åã«ãªããŸãã
第äºã®æ¹æ³
ãã¡ãããæ¯åã¢ã»ã³ããªäžã«äœããã³ããŒããã®ã¯æªããªãã·ã§ã³ãªã®ã§ãå¥ã®æ¹æ³ããããŸãïŒ
-oããŒã§æå®ããããã®ããã©ã«ããŒã§ãªãå Žåãæå®ãããååã®æ°ãããã¡ã€ã«ãäœæããïŒãŸãã¯æ¢åã®ãã¡ã€ã«ãäžæžããããŸãïŒã³ã³ãã€ã«ããããã¡ã€ã«ãžã®çµ¶å¯Ÿãã¹ã®ãªã¹ããé
眮ãããŸãã ãã®åŸããã®ãã¡ã€ã«ããã«ãã·ã¹ãã ïŒmakeãŸãã¯MSBuildãå«ãïŒã§äœ¿çšããŠããã¡ã€ã«ãã³ã³ãã€ã«ã§ããŸãã ããã¯ããã¡ã€ã«ã«æ³šéãå«ãŸãã䜿çšã¢ãžã¥ãŒã«ãå«ãŸããŠããå ŽåãFX_INTERFACE / FX_METADATAãã¯ãã¯ã©ãããæ¥ãã®ããšããçåãæããŸãã æ¬åœã«ã©ãããã§ãã ããããååŸããã«ã¯ã
-hã¹ã€ããã䜿çšããŸãã æå®ãããŠããå Žåããããã å
±éããããŒãã¡ã€ã«ããã¡ã€ã«åããã¢ãžã¥ãŒã«åãžã®ãããã³ã°ãããã³FX_INTERFACEããã³FX_METADATAã®å®çŸ©ãå«ããã¡ã€ã«ã ãã®ã¿ã€ãã®ã¢ã»ã³ããªã䜿çšããå Žåããã¹ãŠã®ã³ã³ãã€ã«æžã¿ãã¡ã€ã«ã«ã³ã³ãã€ã©ãã£ã¬ã¯ãã£ãã«ãã£ãŠãã®ãã¡ã€ã«ã匷å¶çã«å«ããå¿
èŠããããŸãã
ãããã¯ãã¹ãŠã以åã«å®è£
ãããåºæ¬ã§ããããŠãããŒãµã«ã¢ãããŒã·ã§ã³ãªãã§
#pragmaã§å®å
šã«æ©èœããŸãããæ¬¡ã«ãäŸåé¢ä¿ã®å®è£
ã«ã€ããŠç°¡åã«èª¬æããæ§é åã¡ã¿ããŒã¿ãæ¢ã«å¿
èŠãšããåé¡ã«é²ã¿ãŸãã
äŸåæ§æ³šå
¥
åãã€ã³ã¿ãŒãã§ãŒã¹ã®è€æ°ã®å®è£
ããµããŒãããå¿
èŠæ§ã«ã€ããŠãããã€ãã®èšèãè¿°ã¹ã䟡å€ããããŸãã æåã¯ããã¬ãŒã ã¯ãŒã¯å
šäœãRTOSã®æ§æã·ã¹ãã ããçºå±ããŸãããRTOSã¯ãã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ã«çæ³çã«é©åããå¿
èŠããããŸãã å®ç§ã§ãããããåã€ã³ã¿ãŒãã§ãŒã¹ã®åäžã®å®è£
ã§ã¯ãã¯ãååã§ã¯ãããŸããã OSèªäœã¯åäžã®ãšã³ãã£ãã£ãšããŠååšãããå°ããªãããã¯ããæ§ç¯ãããŸããã ãã®å Žåãããã€ãã®ã¢ãžã¥ãŒã«ã®å®è£
ãè¡ããããããããç¹å®ã®èŠä»¶ã«å¯ŸããŠãã·ã£ãŒãåããããŸããã æ¬¡ã«ããã¹ãŠã®å®è£
ã®ã€ã³ã¿ãŒãã§ãŒã¹ãåãã§ãããããã¢ããªã±ãŒã·ã§ã³ã®åã€ã³ã¿ãŒãã§ãŒã¹ã«çæ³çãªå®è£
ãéžæããããšãã§ããŸããã ã€ãŸããããã¯ãœãŒã¹ã¬ãã«ã§ã®Cã®éçãªäŸåæ§æ³šå
¥ã§ãã ãããžã§ã¯ãããªãŒã®ãœãŒã¹ã«ã¯ãå®éã«äœ¿çšãããã¢ãžã¥ãŒã«ã«é¢ããæ
å ±ã¯å«ãŸããŠããŸãã;å®è£
ãæå®ããã«æœè±¡ã€ã³ã¿ãŒãã§ã€ã¹ãã€ã³ããŒãããŸãã å®éã®å®è£
ã¯ããã®æ
å ±ãèšè¿°ããããã¡ã€ã«ã®åœ¢åŒã§ãã·ã¹ãã ã¢ã»ã³ããªã®æ®µéã§ã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã«å€éšXMLã§ã®å€éšXMLèšèªã§ã®èšè¿°æ¹æ³ãšåæ§ã«ç€ºãããŸãïŒå¿
èŠã«å¿ããŠããã®ãããªXMLã®èšè¿°ã劚ãããã®ã¯ãããŸããïŒã æåŸã«ãåãã¡ã¿ããŒã¿ã䜿çšããŠãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã䜿çšããå®è£
ãæ±ºå®ã§ããè¿œå æ©èœã決å®ã§ããŸãã
ãœãŒã¹ã«åã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£
ã1ã€ããå«ãŸããŠããªãå Žåãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒèªèº«ãä»£æ¿ææ®µããªãããšãçè§£ãã誰ãããã®ã€ã³ã¿ãŒãã§ãŒã¹ãã€ã³ããŒãããå Žåãæå®ãããã€ã³ã¿ãŒãã§ãŒã¹ã§äœ¿çšå¯èœãªã¢ãžã¥ãŒã«ã®ã¿ãèªåçã«äœ¿çšããŸãã åã€ã³ã¿ãŒãã§ã€ã¹ã«å€ãã®å®è£
ãããå Žåãããã³ããã衚瀺ãããªãå Žåãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã¯è¡šç€ºãããæåã®å®è£
ãéžæããŸãïŒãããŠãã³ã³ãœãŒã«ã§äœãèµ·ãã£ããã«ã€ããŠã®èŠåã衚瀺ããŸãïŒã ã·ã¹ãã ã®ãã®æ§æã§ã¯ãéåžžã䜿çšããã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ãããã£ãŠãããããã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã«ãã³ããäžããããšãã§ããŸãã-
a <ãã¡ã€ã«å>ã¹ã€ããã䜿çšããŠäžããã
ãŸã ã æå®ããããã¡ã€ã«ã«ã¯ãINTERFACE = VERSIONãšãã圢åŒã®è¡ãå«ãŸããŠããŸããããã§ãINTERFACEã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®ååã§ãããVERSIONã¯äœ¿çšããå®è£
ã®ååã§ãã ããã¯æåã®éšåã§èª¬æãããã®ã«ãã¹ãŠè¿ã¥ããŠãããæ§æã¯ãããã«åçŽåãããŠããã ããªã®ã§ãæè¡çãªè©³çްã«ã€ããŠã¯ãœãŒã¹ãåç
§ããããšããå§ãããŸãã
ã¢ã¹ãã¯ã
ããããç§ãã¡ãæãè峿·±ãããšã«å°éããå Žæã§ãããã®ããã«ãã¹ãŠãå§ãŸããŸããã ããã°ã©ãã³ã°ã«ã¯ããŸããŸãªåŽé¢ã®å®çŸ©ããããŸãã®ã§ã1ã€ã®çãã¡ã¢ã§åºå€§ããåãå
¥ããããšã¯ããŸããã ã¢ã¹ãã¯ãã¯ããããžã§ã¯ãã«å«ãŸããã¢ãžã¥ãŒã«ã«å¿ããŠçµã¿ç«ãŠãå¿
èŠããããã®ã®äžéšã§ãã ããšãã°ãäžéšã®ãªããžã§ã¯ãã«è€æ°ã®ã¿ã€ããããå Žåããããã®ãã¹ãŠã®ã¿ã€ããå«ãåæåãå¿
èŠãªå Žåããããæ°ããã¿ã€ãïŒãããžã§ã¯ãã«ãã¡ã€ã«ãå«ããã ãïŒã远å ãããšããã®åæåãèªåçã«å±éãããŸãã ãã®ãããžã§ã¯ããªã©ã«å«ãŸããããã€ãã®ã¢ãžã¥ãŒã«ã®æ°ã調ã¹ãå¿
èŠããããããããŸããã
æããã«ãããªããã»ããµãšã³ãŒãã®ããªãã¯ã¯ãããéæã§ããŸããã ãã®ç¹å®ã®ãããžã§ã¯ãã®äžéšã§ããã¢ãžã¥ãŒã«ã«é¢ããæ
å ±ã¯ãã³ã³ãã€ã©ãŒã§ãå©çšã§ããŸããã ãããããèæ¯ããå§ããæ¹ãããã§ããããOSã®èŠä»¶ã®äžã«ã¯ãã·ã¹ãã ã³ãŒã«ããŒãã«ãOSã§å©çšå¯èœãªãµãŒãã¹ã®ã»ããã«èª¿æŽããèœåããããŸãããäžæ¹ãã¢ãžã¥ãŒã«ã«ã¢ã»ã³ããªãå«ãŸãããŠãŒã¶ãŒã¢ãŒãã«æ©èœããšã¯ã¹ããŒããããå Žåãã·ã¹ãã ã³ãŒã«ããŒãã«ã¯ãããèæ
®ã«å
¥ããããšã§ããã ããã¯ãã¥ãŒã¹ã§ã¯ãããŸãããäžéšã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒNuttXãªã©ïŒã§åæ§ã®æ¹æ³ã䜿çšãããŠããŸãããååãšããŠãããã¯ãã¹ãŠããªããã»ããµã§å®è¡ãããŸãã ã¢ãžã¥ãŒã«ãå«ãŸããŠããå Žåã
ïŒdefineãå®çŸ©ãããå®çŸ©ãããŠããå Žåã
ïŒ ifdefãæ©èœãããã®ã¢ãžã¥ãŒã«ã®æ©èœãããŒãã«å
ã«ãªã¹ããããŸãã ãããã£ãŠãããŒãã«èªäœã¯
#ifdefsã§æ§æãããŸãã å°é£ãªãµããŒãã«å ããŠããã®ã¢ãããŒãã«ã¯ãæ°ããã¢ãžã¥ãŒã«ã衚瀺ãããå Žåãããã«å¯Ÿå¿ããæ©èœããã®ããŒãã«ã«æåã§è¿œå ããå¿
èŠããããšããåé¡ããããããããŒãã«ã«ã¯ã·ã¹ãã ã«è¡šç€ºã§ãããã¹ãŠã®æ
å ±ãå«ãŸããŠããŸãã ã¢ã¹ãã¯ãã¯åé¡ã解決ããããã«èšèšãããŠããŸãããããžã§ã¯ãã«äœãã远å ããå ŽåãããŸããŸãªå Žæã§å€ãã®å°ããªç·šéãè¡ãå¿
èŠããããŸããåæåã®å±éããã«ãã·ã¹ãã ã®æ§æãžã®ãšã³ããªã®è¿œå ãªã©ã
ææ¡ãããã³ã³ãã£ã®ã¥ã¬ãŒã¿ã¯ãç°ãªãã¢ãããŒããå®è£
ããŠããŸãã ã¢ãžã¥ãŒã«ãããã®ã§ãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒèªäœã«ãã£ãŠçæãããã¢ãžã¥ãŒã«ã®äžéšãäœæããŠã¿ãŸãããïŒ çµå±ãäŸåé¢ä¿ã®å®è£
ãå®è¡ãããåŸã圌ã¯ã·ã¹ãã ã®æ§é ãšãã¹ãŠã®ã¢ãžã¥ãŒã«ã®ã¡ã¿ããŒã¿ã®ç¥èãæã£ãŠããŸãã
ãœãŒã¹ã«ã¯ã泚éã®ç¹å¥ãªããŒãšããŠããå€ã®ããŒé
åããšãã圢åŒã®ãã¢ã®ã»ãããå«ãŸããŠããŸãã ã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒããã¹ãŠã®äŸåé¢ä¿ã解決ãããšããã®æ§æã«å«ãŸããã¢ãžã¥ãŒã«ãèªèãããŸãã ããã«ãããããã¹ãŠã®ã¢ãžã¥ãŒã«ã¯ã¢ã¹ãã¯ãããŒã®ååšã«ã€ããŠæ€æ»ãããèŠã€ãã£ãå Žåã¯ãããŒã®ååã§#defineãäœæããããã¹ãŠã®å€ãïŒã·ã¹ãã å
ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ããïŒãªã¹ããããŸãã ã€ãŸããã¢ãžã¥ãŒã«ã®1ã€ã«ãããšãã°æ¬¡ã®ãããªãšã³ããªãå«ãŸããŠããå ŽåïŒ
FX_METADATA(({ aspects: [ { key: [ val1, val2, val3 ] } ] }))
ãããŠã次ã®ãããªå¥ã®ïŒ
FX_METADATA(({ aspects: [ { key: [ val4, val5, val6 ] } ] }))
ããã¯çæãããŸã#define of the form
#define key val1 val2 val3 val4 val5 val6
ãã¹ãŠã®å€ïŒããŒãšå€ã®äž¡æ¹ïŒã¯ããã¹ããšããŠæ±ããããããããšãã°æ¬¡ã®ããã«èšè¿°ã§ããŸãã
FX_METADATA(({ aspects: [ { key: [ "val1," , "val2," , "val3," ] } ] }))
ãããŠãïŒdefineå
ã®å€ã¯ã³ã³ãã§åºåãããŸãã ããŠãããªãã¯ã¢ã€ãã¢ãåŸãã
ãã®#defineã¯ã©ãã§çæãããŸããïŒ ããŒ-e <ãã¡ã€ã«å>ãšããŠã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã«ç€ºãããããããŒãã¡ã€ã«ã ãã®ããŒãæå®ãããŠããå Žåãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã¯çæãããã€ã³ã¿ãŒãã§ãŒã¹ãã¡ã¿ããŒã¿ã¹ãã¢ã«è¿œå ããŸãã ãã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯CFG_ASPECTSãšåŒã°ããïŒinclude FX_INTERFACEïŒCFG_ASPECTSïŒãšããŠå«ããããšãã§ãããã¹ãŠã®ã¢ãžã¥ãŒã«ã®ã¢ã¹ãã¯ããå«ãŸããŠããŸãã ãã®ãããªã€ã³ã¿ãŒãã§ã€ã¹ãæ¢ã«ååšããå ŽåïŒã€ãŸãããŠãŒã¶ãŒãæ¢ã«æåã§äœæããŠãããåæåŸã«ãœãŒã¹ããŒã«ã«å«ãŸããŠããå ŽåïŒãäœãçæããããæ¢åã®ã¢ãžã¥ãŒã«ã䜿çšãããããšã«æ³šæããããšãéèŠã§ãã
ãªãã·ã§ã³
ãªãã·ã§ã³ã¯ããã®ã¢ãžã¥ãŒã«ã®æ§æå®æ°ãå®çŸ©ããå€éš#defineã§ãã ãã¡ã€ã«ã®èгç¹ã ãã§ãªããã¢ãžã¥ãŒã«ã®èгç¹ã§ããKeilã®é¡æšãšé¡äŒŒããŠããŸãã ãã®äž»ãªç®çã¯ãGUIãä»ããŠãããã®ãã©ã¡ãŒã¿ãŒãèšå®ããããšã§ãããããã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã§ãªãã·ã§ã³ã䜿çšããããšã¯éåžžã«å°é£ã§ãã ã¢ã¹ãã¯ããšåæ§ã«ããªãã·ã§ã³ã¯çæãããCFG_OPTIONSã€ã³ã¿ãŒãã§ãŒã¹ã«ãã£ãŠè¡šãããŸããããã«ã¯ããœãŒã¹å
ã®å¯Ÿå¿ããæ³šéãšããŠèšè¿°ããããã®ã¢ãžã¥ãŒã«æ§æã®ãã¹ãŠã®ãªãã·ã§ã³ãå«ãŸããŸãã ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã¯ããªãã·ã§ã³ãããã©ã«ãå€ã«èšå®ãããã¡ã€ã«ãçæããŸãããã°ã©ãã£ã«ã«ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããèšå®ã§ããŸãã
ãªãã·ã§ã³ã䜿çšããã¢ãã«ã¯æ¬¡ã®ããã«æ³å®ãããŠããŸããïŒãŠãŒã¶ãŒã¯OSããœãŒã¹ã®ã»ãããšããŠåãåããã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒãèµ·åãããããã®ãœãŒã¹ãåæããŠäœ¿çšå¯èœãªãªãã·ã§ã³ã衚瀺ãããŠãŒã¶ãŒãããŒãºã«åãããŠãªãã·ã§ã³ãæ§æããã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒãåãCFG_OPTIONSãã¡ã€ã«ãçæããŸãã ãã®åŸããŠãŒã¶ãŒã¯å¿
èŠãªæ§ææžã¿ãœãŒã¹ã®å®å
šãªã»ãããååŸããŸãã ã€ãŸããéçºã®ã³ã³ããã¹ãã§ã¯ããããã¯äžè¬ã«ã»ãšãã©åœ¹ã«ç«ããªãã®ã§ããããçµäºãã䟡å€ããããšæããŸãã
å¶éäºé
çŸåšã®ããŒãžã§ã³ã§ã¯ãã¡ã¿ããŒã¿ãæœåºããããã®åçŽåãããã¢ãã«ã䜿çšãããŸã-ã³ã¡ã³ãïŒæ£èŠè¡šçŸã«ããïŒã¯ãã¡ã€ã«ããåã«é€å€ãããã€ã³ã¯ã«ãŒããšã¡ã¿ããŒã¿ïŒãŸãæ£èŠè¡šçŸã«ããïŒãæ€çŽ¢ããŸãã 98ïŒ
ã®ã±ãŒã¹ã§ã¯ããã®ã¢ãããŒãã¯åé¡ãªãæ©èœããŸããããã¯ããã€ã³ã¯ã«ãŒããã¡ã€ã«ã®ãªãŒããŒã©ã€ããªã©ãäžéšã®è€éãªã±ãŒã¹ã§ã¯æ©èœããŸããã ãã®å Žåãæ¬æ Œçãªã¡ã¿ããŒã¿ãããã€ããŒã䜿çšããå¿
èŠããããŸããããã¯ãåãã¡ã€ã«ãïŒã·ã¹ãã ããªããã»ããµãŒã«ãã£ãŠïŒååŠçããã¡ã¿ããŒã¿ãšå«ãŸããŠãããã¡ã€ã«ããããªããã»ããµãŒã§ã®ããªãã¯ã®å Žåã§ã100ïŒ
ä¿èšŒä»ãã§æœåºããŸãã ãããããã¡ããã倿°ã®ãã¡ã€ã«ã®å Žåãããã¯ããªãé
ããªããŸãïŒæ°çŸã®ãã¡ã€ã«ã®ãããžã§ã¯ãã®å Žåã¯æ°ç§ããããŸããããããã°ããã®ã¯ããªãéå±ã§ãïŒã
çŸåšã®å®è£
ã§ã¯ãã¡ã¿ããŒã¿ã®äžŠåæœåºããµããŒããããŠããŸãïŒãã®æäœã¯å®å
šã«äžŠååãããŠãããããã¡ã¿ããŒã¿ã®æœåºãšè§£æã¯ãã¹ã¬ããããŒã«ã«åºã¥ããŠåäœããParallel.ForEachã«ãŒãã䜿çšããŠè¡ãããŸãããããã£ãŠãè€æ°ã®ããã»ããµãããå Žåããã®æäœã¯å€§å¹
ã«å éãããŸãã
ãŸããIDEã®äœ¿çšã«ã¯è¥å¹²ã®å°é£ããããŸããå®éããã£ãã·ã¥ãããIDEã¯ãçŸåšã®ãããžã§ã¯ãã«ãããã¹ãŠã®ãã¡ã€ã«ãã³ã³ãã€ã«ããå¿
èŠããããšæ³å®ããŠããŸãã ææ¡ãããã¢ãããŒãã§ã¯ãã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã¯ãããžã§ã¯ãã®ãã©ã«ããŒãã¹ã®ãªã¹ãã«åºã¥ããŠãã©ã®ãã¡ã€ã«ãã³ã³ãã€ã«ããããæ±ºå®ããŸãããã®ãããIDEã§å
¥åãã¡ã€ã«ãäœããã®æ¹æ³ã§ãã£ã«ã¿ãŒåŠçã§ããªãå ŽåïŒãã«ãæã«èšãããšãã§ããäœããã®ãã©ã°ã€ã³ã䜿çšããŠå¿
èŠã§ãããäœãã³ã³ãã€ã«ããå¿
èŠããªããïŒããã®ãããªIDEã䜿çšããããšã¯ããåé¡ããããŸãã ç§ã¯IDEãèªåã§äœ¿çšãããSublime TextãŸãã¯Visual Studio Codeããšãã£ã¿ãŒãšããŠäœ¿çšããã¢ã»ã³ããªã¯ã³ãã³ãã©ã€ã³ããå®è¡ããããã«æ§æãããŠããŸãã ããã«ãRTOSã¯ç¹å®ã®æ§æã®ãœãŒã¹ãšããåœ¢ã§æäŸããããããåé¡ã¯ãããŸããããIDEãªãã§ã¯çããããªã人ã¯å€±æãããããããŸããã å®éãã³ã³ãã€ã«ã®åã«å®è¡ããã远å ã®ãã«ããã§ãŒãºãå°å
¥ãããŸããããã¯æ§æãã§ãŒãºã§ããããã¹ãŠã®IDEããã®ã¢ãããŒããšäºææ§ãããããã§ã¯ãããŸããã
ãããã«
ãã¬ãŒã³ããŒã·ã§ã³ã泚éãåŽé¢ãã¢ãžã¥ãŒã«æ§ã®æ··ä¹±ããaã³ç³ãäžããŸãããããã¯1ã€ã®æçš¿ã§åãå
¥ããå®å
šã«é瀺ããã®ãéåžžã«é£ããåå¥ã®ãããã¯ãªã®ã§ããã®æçš¿ãå®å
šãªãã®ã§ã¯ãªããè°è«ã®å§ãŸããšèããŸãã èšèŒãããŠããããšãè峿·±ããšæãããå Žåã¯ã次ã®ã¹ãããã«é²ã¿ã䜿çšäŸãšã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã®ãœãŒã¹ã確èªã§ããŸãã ãããã¯ãã¹ãŠ
githubã§å©çšã§ããŸãã ããã§ãã¹ãŠã§ãããæž
èŽããããšãããããŸããã