
ã¡ãŒã«ããã¯ã¹ã¯ã以åã®èšäºïŒïŒ5ïŒã®ããããã§èšåãããŸããã Nucleus SEã§ãµããŒããããŠãã2çªç®ã«ç°¡åãªä¿¡å·å¯Ÿä¿¡å·ãã«ãã¿ã¹ã¯æ¹åŒã§ãããã¿ã¹ã¯éã§ç°¡åãªã¡ãã»ãŒãžã転éããããã®äœã³ã¹ãã§æè»ãªæ¹æ³ãæäŸããŸãã
ã·ãªãŒãºã®ä»¥åã®èšäºïŒ
èšäº20ã ã»ããã©ïŒè£å©ãµãŒãã¹ãšããŒã¿æ§é èšäºïŒ19ã ã»ããã©ïŒçŽ¹ä»ãšåºæ¬ãµãŒãã¹èšäºïŒ18ã ã€ãã³ããã©ã°ã°ã«ãŒãïŒãã«ããŒãµãŒãã¹ãšããŒã¿æ§é èšäºïŒ17ã ã€ãã³ããã©ã°ã°ã«ãŒãïŒçŽ¹ä»ãšåºæ¬ãµãŒãã¹èšäºïŒ16ã ä¿¡å·èšäºïŒ15ã ã¡ã¢ãªããŒãã£ã·ã§ã³ïŒãµãŒãã¹ãšããŒã¿æ§é èšäºïŒ14ã ã¡ã¢ãªã®ã»ã¯ã·ã§ã³ïŒçŽ¹ä»ãšåºæ¬ãµãŒãã¹èšäºïŒ13ã ã¿ã¹ã¯ããŒã¿æ§é ãšãµããŒããããŠããªãAPIåŒã³åºãèšäºïŒ12ã ã¿ã¹ã¯ãæäœããããã®ãµãŒãã¹èšäºïŒ11ã ã¿ã¹ã¯ïŒAPIã®æ§æãšçŽ¹ä»èšäºïŒ10ã ã¹ã±ãžã¥ãŒã©ïŒé«åºŠãªæ©èœãšã³ã³ããã¹ãã®ä¿åèšäºïŒ9ã ã¹ã±ãžã¥ãŒã©ïŒå®è£
èšäºïŒ8ã Nucleus SEïŒå
éšèšèšãšå±éèšäºïŒ7ã Nucleus SEïŒã¯ããã«èšäºïŒ6ã ãã®ä»ã®RTOSãµãŒãã¹èšäº5ã ã¿ã¹ã¯ã®çžäºäœçšãšåæèšäº4ã ã¿ã¹ã¯ãã³ã³ããã¹ãã®åãæ¿ããããã³å²ã蟌ã¿èšäºïŒ3ã ã¿ã¹ã¯ãšèšç»èšäºïŒ2ã RTOSïŒæ§é ãšãªã¢ã«ã¿ã€ã
èšäºïŒ1ã RTOSïŒã¯ããã«ã
ã¡ãŒã«ããã¯ã¹ã䜿çšãã
Nucleus SEã§ã¯ãã¡ãŒã«ããã¯ã¹ã¯ãã«ããã§ãŒãºäžã«å®çŸ©ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯æ倧16åã®ã¡ãŒã«ããã¯ã¹ãæã€ããšãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ã«ã¡ãŒã«ããã¯ã¹ããªãå Žåãã¡ãŒã«ããã¯ã¹ã«é¢é£ä»ãããããµãŒãã¹åŒã³åºãã³ãŒããšããŒã¿æ§é ã¯ã¢ããªã±ãŒã·ã§ã³ã«å«ãŸããŸããã
ã¡ãŒã«ããã¯ã¹ã¯ããŒã¿ãä¿åããå Žæã§ããããã®ãµã€ãºã¯
ADDRåã®å€æ°ãä¿åããã®ã«ååãªãµã€ãºã§ãããè€æ°ã®ã¿ã¹ã¯ã䜿çšã§ããããã«ã¢ã¯ã»ã¹ãå¶åŸ¡ããŸãã ã¿ã¹ã¯ã¯ããŒã¿ãã¡ãŒã«ããã¯ã¹ã«éä¿¡ã§ããŸãã ãã®çµæãã¡ãŒã«ããã¯ã¹ããã£ã±ãã«ãªããäžéšã®ã¿ã¹ã¯ãã¡ãŒã«ããã¯ã¹ã®èªã¿åãæäœãå®è¡ããããã¡ãŒã«ããã¯ã¹ã空ã«ãªããŸã§ãã¿ã¹ã¯ã¯ããŒã¿ãéä¿¡ã§ããªããªããŸãã å®å
šãªã¡ãŒã«ããã¯ã¹ã«ããŒã¿ãéä¿¡ããããšãããã空ã®ã¡ãŒã«ããã¯ã¹ãèªã¿åãããšãããšãéžæããAPIã³ãŒã«èšå®ãšNucleus SEã®æ§æã«å¿ããŠããšã©ãŒãŸãã¯ã¿ã¹ã¯ã®äžæãçºçããŸãã
ã¡ãŒã«ããã¯ã¹ãšãã¥ãŒ
OSã®äžéšã®å®è£
ã§ã¯ãã¡ãŒã«ããã¯ã¹ã¯å®è£
ãããŠããŸãããã代ããã«ãã¥ãŒã䜿çšããããšãææ¡ãããŠããŸãã ãã®ãããªãã¥ãŒã¯ã¡ãŒã«ããã¯ã¹ãšåãæ©èœãæäŸãããããããã¯è«ççã«èãããŸãã ãã ãããã¥ãŒã¯ããè€éãªããŒã¿æ§é ã§ãããããå€ãã®è£å©ããŒã¿ãã³ãŒããä¿æãããµãŒãã¹æéãé·ããªããŸãã
Nucleus RTOSãšåæ§ã«ãNucleus SEã§ã¯ããããã®ã¿ã€ãã®ãªããžã§ã¯ãã®ãããããéžæã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã«è€æ°ã®ãã¥ãŒãš1ã€ã®ã¡ãŒã«ããã¯ã¹ãããå Žåãã¡ãŒã«ããã¯ã¹ããã¥ãŒã«çœ®ãæããããšãæ€èšããã®ã¯çã«ããªã£ãŠããŸãã ããã«ããããªãŒããŒãããã®éã¯ãããã«å¢å ããŸãããã¡ãŒã«ããã¯ã¹ã«é¢é£ä»ããããŠãããã¹ãŠã®APIã³ãŒããåé€ãããŸãã ãŸãã¯ãäž¡æ¹ã®æ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³ãæ§æããããŒã¿éãšããã©ãŒãã³ã¹ãæ¯èŒã§ããŸãã
ãã¥ãŒã«ã€ããŠã¯ãä»åŸã®èšäºã§èª¬æããŸãã
ã¡ãŒã«ããã¯ã¹ãæ§æãã
ã¡ãŒã«ããã¯ã¹ã®æ°
ã»ãšãã©ã®Nucleus SEãªããžã§ã¯ããšåæ§ã«ãã¡ãŒã«ããã¯ã¹ã®æ§æã¯äž»ã«
nuse_config.hãã¡ã€ã«ã®
#defineãã£ã¬ã¯ãã£ãã«ãã£ãŠå®çŸ©ãããŸãã ã¡ã€ã³ãã©ã¡ãŒã¿ã¯
NUSE_MAILBOX_NUMBERã§ãã¢ããªã±ãŒã·ã§ã³å
ã®ã¡ãŒã«ããã¯ã¹ã®æ°ã決å®ããŸãã ããã©ã«ãå€ã¯ãŒãïŒã€ãŸããã¡ãŒã«ããã¯ã¹ããªãïŒã§ãæ倧16ã®å€ãåãããšãã§ããŸãã誀ã£ãå€ã¯ãã³ã³ãã€ã«äžã«ãšã©ãŒã«ãªããŸãããšã©ãŒã¯ã
nuse_config_check.hã§ãã§ãã¯ããŠçæãããŸãã ïŒã
ïŒerrorãã£ã¬ã¯ãã£ããããªã¬ãŒããŸãã
ãŒã以å€ã®å€ãéžæããããšããã¡ãŒã«ããã¯ã¹ã®äž»èŠãªã¢ã¯ãã£ããŒã¿ãŒã§ãã ãã®ãã©ã¡ãŒã¿ãŒã¯ãããŒã¿æ§é ãå®çŸ©ãããšãã«äœ¿çšããããã®ãµã€ãºã¯ãã®å€ã«äŸåããŸãïŒããã«ã€ããŠã¯æ¬¡ã®èšäºã§è©³ãã説æããŸãïŒã ããã«ããŒã以å€ã®å€ã¯APIèšå®ãã¢ã¯ãã£ãã«ããŸãã
APIåŒã³åºããã¢ã¯ãã£ãã«ãã
Nucleus SEã®åAPIé¢æ°ïŒãŠãŒãã£ãªãã£åŒã³åºãïŒã¯ã
nuse_config.hãã¡ã€ã«ã®
#defineãã£ã¬ã¯ãã£ãã«ãã£ãŠã¢ã¯ãã£ãã«ãããŸãã ã¡ãŒã«ããã¯ã¹ã®å Žåããããã®ãã£ã¬ã¯ãã£ãã¯æ¬¡ã®ãšããã§ãã
NUSE_MAILBOX_SEND NUSE_MAILBOX_RECEIVE NUSE_MAILBOX_RESET NUSE_MAILBOX_INFORMATION NUSE_MAILBOX_COUNT
ããã©ã«ãã§ã¯ããããã¯
FALSEã«èšå®ãããŠããããããã¹ãŠã®ãµãŒãã¹åŒã³åºããç¡å¹ã«ãªããããããå®è£
ããã³ãŒãã®çµã¿èŸŒã¿ããããã¯ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¡ãŒã«ããã¯ã¹ãæ§æããã«ã¯ãå¿
èŠãªAPIåŒã³åºããéžæããŠ
TRUEã«èšå®ããå¿
èŠããããŸãã
以äžã¯ã
nuse_config.hãã¡ã€ã«ã®ã³ãŒãã®
ã»ã¯ã·ã§ã³ã§ãã
/* Number of mailboxes in the system - 0-16 */ #define NUSE_MAILBOX_NUMBER 0 /* Service call enablers: */ #define NUSE_MAILBOX_SEND FALSE #define NUSE_MAILBOX_RECEIVE FALSE #define NUSE_MAILBOX_RESET FALSE #define NUSE_MAILBOX_INFORMATION FALSE #define NUSE_MAILBOX_COUNT FALSE
ã¡ãŒã«ããã¯ã¹APIæ©èœãã¢ã¯ãã£ãã§ãã¢ããªã±ãŒã·ã§ã³ã«ã¡ãŒã«ããã¯ã¹ããªãå ŽåïŒåžžã«æå¹ã«ãªã£ãŠãã
NUSE_Mailbox_CountïŒïŒãé€ãïŒãã³ã³ãã€ã«ãšã©ãŒãçºçããŸãã ã¢ã¯ãã£ãåãããŠããªãAPIåŒã³åºããã³ãŒãã§äœ¿çšãããšãã¢ããªã±ãŒã·ã§ã³ã«å®è£
ã³ãŒããå«ãŸããŠããªãã£ããããã¬ã€ã¢ãŠããšã©ãŒãçºçããŸãã
ã¡ãŒã«ããã¯ã¹ãµãŒãã¹ã®åŒã³åºã
Nucleus RTOSã¯ãã¡ãŒã«ããã¯ã¹ã«é¢é£ä»ãããã9ã€ã®ãµãŒãã¹ã³ãŒã«ããµããŒããã次ã®æ©èœãæäŸããŸãã
- ã¡ãŒã«ããã¯ã¹ã«ã¡ãã»ãŒãžãéä¿¡ããŸãã Nucleus SEã¯NUSE_Mailbox_SendïŒïŒé¢æ°ã«å®è£
ãããŠããŸãã
- ã¡ãŒã«ããã¯ã¹ããã¡ãã»ãŒãžãèªãã Nucleus SEã¯NUSE_Mailbox_ReceiveïŒïŒé¢æ°ãå®è£
ããŠããŸãã
- äžæããããã¹ãŠã®ã¿ã¹ã¯ã®ãªãªãŒã¹ã§ã¡ãŒã«ããã¯ã¹ãæªäœ¿çšç¶æ
ã«åŸ©å
ããïŒãªã»ããïŒã Nucleus SEã¯NUSE_Mailbox_ResetïŒïŒã«å®è£
ãããŠããŸãã
- ç¹å®ã®ã¡ãŒã«ããã¯ã¹ã«é¢ããæ
å ±ãæäŸããŸãã Nucleus SEã¯NUSE_Mailbox_InformationïŒïŒãå®è£
ããŠããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã§çŸåšæ§æãããŠããã¡ãŒã«ããã¯ã¹ã®æ°ãè¿ããŸãã Nucleus SEã§ã¯ã NUSE_Mailbox_CountïŒïŒã§å®è£
ãããŠããŸãã
- æ°ããã¡ãŒã«ããã¯ã¹ã®è¿œå ïŒäœæïŒã Nucleus SEã¯å®è£
ãããŠããŸããã
- ã¡ãŒã«ããã¯ã¹ãåé€ããŸãã Nucleus SEã¯å®è£
ãããŠããŸããã
- ã¢ããªã±ãŒã·ã§ã³å
ã®ãã¹ãŠã®ã¡ãŒã«ããã¯ã¹ãžã®ãã€ã³ã¿ãŒãè¿ããŸãã Nucleus SEã¯å®è£
ãããŠããŸããã
- ã¡ãŒã«ããã¯ã¹ã§äžæãããŠãããã¹ãŠã®ã¿ã¹ã¯ã«ã¡ãã»ãŒãžãéä¿¡ããïŒãããŒããã£ã¹ãïŒã Nucleus SEã¯å®è£
ãããŠããŸããã
åãµãŒãã¹åŒã³åºãã®å®è£
ã詳现ã«æ€èšããŠãã ããã
ã¡ãŒã«ããã¯ã¹ã®èªã¿åãããã³æžã蟌ã¿ãµãŒãã¹ã³ãŒã«
ã¡ãŒã«ããã¯ã¹ã§å®è¡ã§ããåºæ¬çãªæäœã¯ãããŒã¿ã®æžã蟌ã¿ãšèªã¿åãïŒéä¿¡ãšåä¿¡ïŒã§ãã Nucleus RTOSããã³Nucleus SEã¯ããããã®æäœã®ããã®2ã€ã®åºæ¬çãªAPIåŒã³åºããæäŸããŸããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
ã¡ãŒã«ããã¯ã¹ã«æžã蟌ã
Nucleus RTOS APIãåŒã³åºããŠã¡ãŒã«ããã¯ã¹ã«æžã蟌ãã®ã¯éåžžã«æè»ã§ããããã«ãããæäœãããã«å®äºã§ããªãå ŽåïŒããšãã°ãæºæ¯ã®ã¡ãŒã«ããã¯ã¹ã«æžã蟌ãå ŽåïŒã«æé»çã«ãŸãã¯ã¿ã€ã ã¢ãŠãã§ã¿ã¹ã¯ãäžæåæ¢ã§ããŸãã Nucleus SEã¯åæ§ã®ãµãŒãã¹ã³ãŒã«ãæäŸããŸããã¿ã¹ã¯ã®äžæåæ¢ã®ã¿ããªãã·ã§ã³ã§ãããã¿ã€ã ã¢ãŠãã¯å®è£
ãããŠããŸããã
Nucleus RTOSã¯ãããŒã¿ãã¡ãŒã«ããã¯ã¹ã«ãããŒããã£ã¹ãããããã®ãµãŒãã¹ã³ãŒã«ãæäŸããŸã;ãã®ã³ãŒã«ã¯Nucleus SEã§ã¯ãµããŒããããŠãããã次ã®èšäºã®ãUnrealized APIã³ãŒã«ãã»ã¯ã·ã§ã³ã§èª¬æããŸãã
Nucleus RTOSã®ã¡ãŒã«ããã¯ã¹ã«æžã蟌ãããã®åŒã³åºããµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Send_To_MailboxïŒNU_MAILBOX *ã¡ãŒã«ããã¯ã¹ãVOID *ã¡ãã»ãŒãžãUNSIGNEDãµã¹ãã³ãïŒ;ãã©ã¡ãŒã¿ïŒ
ã¡ãŒã«ããã¯ã¹ -
ã¡ãŒã«ããã¯ã¹ãžã®ãã€ã³ã¿ã
message-éä¿¡ãããã¡ãã»ãŒãžãžã®ãã€ã³ã¿ãŒ
ãunsignedåã®4ã€ã®èŠçŽ ã§æ§æã
ããŸãã
suspend-ã¿ã¹ã¯ã®äžæåæ¢ã®ä»æ§ãå€
NU_NO_SUSPEND ã
NU_SUSPENDãŸãã¯ã¿ã€ã ã¢ãŠãå€ãåãããšãã§ããŸãã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_INVALID_MAILBOX-ç¡å¹ãªã¡ãŒã«ããã¯ã¹ãã€ã³ã¿ãŒã
NU_INVALID_POINTER-ã¡ãã»ãŒãžãžã®NULLãã€ã³ã¿ãŒïŒ
NULL ïŒ;
NU_INVALID_SUSPEND-éã¿ã¹ã¯é¢é£ã¹ã¬ããããã®äžæã®è©Šè¡ã
NU_MAILBOX_FULL-ã¡ãŒã«ããã¯ã¹ã¯ãã£ã±ãã§ãããäžæåæ¢ã®ã¿ã€ãã¯æå®ãããŠããŸããã
NU_TIMEOUT-ã¡ãŒã«ããã¯ã¹ã¯ãæå®ãããæéã®äžæåæ¢åŸããŸã ãã£ã±ãã§ãã
NU_MAILBOX_DELETED-ã¿ã¹ã¯ãäžæãããŠããéã«ã¡ãŒã«ããã¯ã¹ãåé€ãããŸããã
NU_MAILBOX_WAS_RESET-ã¿ã¹ã¯ã®äžæäžã«ã¡ãŒã«ããã¯ã¹ããªã»ãããããŸããã
Nucleus SEã®ã¡ãŒã«ããã¯ã¹ã«æžã蟌ãããã®åŒã³åºããã®APIã³ãŒã«ã¯ãNucleus RTOS APIã®ã³ã¢æ©èœããµããŒãããŠããŸãã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NUSE_Mailbox_SendïŒNUSE_MAILBOXã¡ãŒã«ããã¯ã¹ãADDR *ã¡ãã»ãŒãžãU8ãµã¹ãã³ãïŒ;ãã©ã¡ãŒã¿ïŒ
ã¡ãŒã«ããã¯ã¹ -
ã¡ãŒã«ããã¯ã¹ã€ã³ããã¯ã¹ïŒIDïŒã
message-éä¿¡ãããã¡ãã»ãŒãžãžã®ãã€ã³ã¿ãŒ;ããã¯
ADDRã¿ã€ãã®1ã€ã®å€æ°ã§ãã
suspend-ã¿ã¹ã¯ã®äžæã®
æå® ãå€
NUSE_NO_SUSPENDãŸãã¯
NUSE_SUSPENDãåãããšãã§ããŸãã
æ»ãå€ïŒ
NUSE_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NUSE_INVALID_MAILBOX-ç¡å¹ãªã¡ãŒã«ããã¯ã¹ã€ã³ããã¯ã¹ã
NUSE_INVALID_POINTER-ã¡ãã»ãŒãžãžã®NULLãã€ã³ã¿ãŒïŒ
NULL ïŒ;
NUSE_INVALID_SUSPEND-é¢é£ã®ãªãã¹ã¬ããããã®äžæã®è©Šã¿ããŸãã¯APIåŒã³åºãã®ãããã¯æ©èœãç¡å¹ã«ãªã£ãŠããå Žåã
NUSE_MAILBOX_FULL-ã¡ãŒã«ããã¯ã¹ã¯ãã£ã±ãã§ãããäžæåæ¢ã®ã¿ã€ãã¯æå®ãããŠããŸããã
NUSE_MAILBOX_WAS_RESET-ã¿ã¹ã¯ã®äžæäžã«ã¡ãŒã«ããã¯ã¹ããªã»ãããããŸããã
Nucleus SEã§ã®ã¡ãŒã«ããã¯ã¹æžã蟌ã¿ã®å®è£
APIé¢æ°ã³ãŒã
NUSE_Mailbox_SendïŒïŒã®ããŒãžã§ã³ïŒãã©ã¡ãŒã¿ãŒã®ç¢ºèªåŸïŒã¯ãAPIåŒã³åºãã®ãµããŒãããããã¯ïŒã¿ã¹ã¯ã®äžæïŒã®ããã«ã¢ã¯ãã£ãã«ãªã£ãŠãããã©ããã«å¿ããŠãæ¡ä»¶ä»ãã³ã³ãã€ã«ã䜿çšããŠéžæãããŸãã äž¡æ¹ã®ãªãã·ã§ã³ãæ€èšããŠãã ããã
ã¿ã¹ã¯ã®ããã¯ãç¡å¹ã«ãªã£ãŠããå Žåããã®APIåŒã³åºãã®ããžãã¯ã¯éåžžã«åçŽã§ãã³ãŒãã®èª¬æã¯äžèŠã§ãã
if (NUSE_Mailbox_Status[mailbox]) /* mailbox full */ { return_value = NUSE_MAILBOX_FULL; } else /* mailbox empty */ { NUSE_Mailbox_Data[mailbox] = *message; NUSE_Mailbox_Status[mailbox] = TRUE; return_value = NUSE_SUCCESS; }
ã¡ãã»ãŒãžã¯å¯Ÿå¿ããèŠçŽ
NUSE_Mailbox_Data []ã«ä¿åãããã¡ãŒã«ããã¯ã¹ã¯äœ¿çšæžã¿ãšããŠããŒã¯ãããŸãã
ã¿ã¹ã¯ã®ããã¯ãæå¹ã«ãªã£ãŠããå Žåãã³ãŒãã¯ããè€éã«ãªããŸãã
do { if (!NUSE_Mailbox_Status[mailbox]) /* mailbox empty */ { NUSE_Mailbox_Data[mailbox] = *message; NUSE_Mailbox_Status[mailbox] = TRUE; if (NUSE_Mailbox_Blocking_Count[mailbox] != 0) { U8 index; /* check whether a task is blocked */ /* on this mailbox */ NUSE_Mailbox_Blocking_Count[mailbox]--; for (index=0; index<NUSE_TASK_NUMBER; index++) { if ((LONIB(NUSE_Task_Status[index]) == NUSE_MAILBOX_SUSPEND) && (HINIB(NUSE_Task_Status[index]) == mailbox)) { NUSE_Task_Blocking_Return[index] = NUSE_SUCCESS; NUSE_Wake_Task(index); break; } } } return_value = NUSE_SUCCESS; suspend = NUSE_NO_SUSPEND; } else /* mailbox full */ { if (suspend == NUSE_NO_SUSPEND) { return_value = NUSE_MAILBOX_FULL; } else { /* block task */ NUSE_Mailbox_Blocking_Count[mailbox]++; NUSE_Suspend_Task(NUSE_Task_Active, (mailbox << 4) | NUSE_MAILBOX_SUSPEND); return_value = NUSE_Task_Blocking_Return[NUSE_Task_Active]; if (return_value != NUSE_SUCCESS) { suspend = NUSE_NO_SUSPEND; } } } } while (suspend == NUSE_SUSPEND);
ããã€ãã®èª¬æã圹ç«ã€å ŽåããããŸãã
ã³ãŒãã¯
do ... whileã«ãŒãã§å²ãŸããŠ
ããŸãããã®
ã«ãŒãã¯ã
suspendãã©ã¡ãŒã¿ãŒã
NUSE_SUSPENDã®éã«å®è¡ãããŸãã
ã¡ãŒã«ããã¯ã¹ã空ã®å Žåãã¡ãã»ãŒãžãèšé²ãããã¡ãŒã«ããã¯ã¹ã®ã¹ããŒã¿ã¹ãå€åããŠãã¡ãŒã«ããã¯ã¹ããã£ã±ãã§ããããšã瀺ããŸãã ãã®ã¡ãŒã«ããã¯ã¹ã§äžæåæ¢äžã®ã¿ã¹ã¯ïŒèªã¿åãåŸ
ã¡ïŒããã§ãã¯ããŸãã ãã®ãããªã¿ã¹ã¯ãããå Žåãæåã®ã¿ã¹ã¯ãåéãããŸãã ãµã¹ãã³ãå€æ°ã¯
NUSE_NO_SUSPENDã«èšå®ãããAPIåŒã³åºãã¯çµäºããŠ
NUSE_SUCCESSãè¿ããŸãã
ã¡ãŒã«ããã¯ã¹ããã£ã±ãã§ãµã¹ãã³ãã
NUSE_NO_SUSPENDã®å ŽåãAPIåŒã³åºãã¯
NUSE_MAILBOX_FULLãè¿ã
ãŸã ã suspendã
NUSE_SUSPENDã®å Žåãã¿ã¹ã¯ã¯äžæåæ¢ããŸãã é¢æ°ãçµäºããåŸïŒã¿ã¹ã¯ã®åéæãªã©ïŒãæ»ãå€ã
NUSE_SUCCESS ïŒã¡ãŒã«ããã¯ã¹ããªã»ãããããã®ã§ã¯ãªããã¡ãã»ãŒãžãèªã¿åãããããã«ã¿ã¹ã¯ãåéãããããšã瀺ãïŒã®å Žåããµã€ã¯ã«ã¯æåããå§ãŸããŸãã
ã¡ãŒã«ããã¯ã¹ãèªã
ã¡ãŒã«ããã¯ã¹ãèªã¿åãããã®Nucleus RTOS APIãŠãŒãã£ãªãã£ã³ãŒã«ã¯éåžžã«æè»æ§ããããæäœãããã«å®äºã§ããªãå ŽåïŒç©ºã®ã¡ãŒã«ããã¯ã¹ããèªã¿åãå Žåãªã©ïŒã«æé»çã«ãŸãã¯ã¿ã€ã ã¢ãŠãã§ã¿ã¹ã¯ãäžæåæ¢ã§ããŸãã Nucleus SEã¯åæ§ã®ãµãŒãã¹ãæäŸããŸããã¿ã¹ã¯ã®äžæåæ¢ã®ã¿ããªãã·ã§ã³ã§ãããã¿ã€ã ã¢ãŠãã¯å®è£
ãããŠããŸããã
Nucleus RTOSã§ã¡ãŒã«ããã¯ã¹ãèªã¿åãããã®åŒã³åºããµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Receive_From_MailboxïŒNU_MAILBOX *ã¡ãŒã«ããã¯ã¹ãVOID *ã¡ãã»ãŒãžãUNSIGNEDãµã¹ãã³ãïŒ;ãã©ã¡ãŒã¿ïŒ
ã¡ãŒã«ããã¯ã¹ -ãŠãŒã¶ãŒãæäŸããã¡ãŒã«ããã¯ã¹ã³ã³ãããŒã«ãŠããããžã®ãã€ã³ã¿ã
message-åä¿¡ã¡ãã»ãŒãžã®ã¹ãã¬ãŒãžãžã®ãã€ã³ã¿ããµã€ãºã¯
unsignedåã®4ã€ã®å€æ°ã«çãããªããŸãã
suspend-ã¿ã¹ã¯ã®äžæåæ¢ã®ä»æ§ãå€
NUSE_NO_SUSPEND ã
NUSE_SUSPENDãŸãã¯ã¿ã€ã ã¢ãŠãå€ãåãããšãã§ããŸãã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_INVALID_MAILBOX-ç¡å¹ãªã¡ãŒã«ããã¯ã¹ãã€ã³ã¿ãŒã
NU_INVALID_POINTER-ã¡ãã»ãŒãžãžã®NULLãã€ã³ã¿ãŒïŒ
NULL ïŒ;
NU_INVALID_SUSPEND-ç¡å¹ãªã¹ããªãŒã ïŒã¹ããªãŒã ã®ã¿ã¹ã¯ã«é¢é£ä»ããããŠããªãïŒããã®äžæãè©Šã¿ãŸãã
NU_MAILBOX_EMPTY-ã¡ãŒã«ããã¯ã¹ã¯ç©ºã§ãããäžæåæ¢ã®ã¿ã€ãã¯æå®ãããŠããŸããã
NU_TIMEOUT-æå®ãããã¿ã€ã ã¢ãŠãå€ã§ã¿ã¹ã¯ãäžæåæ¢ãããåŸã§ããã¡ãŒã«ããã¯ã¹ã¯ç©ºã®ãŸãŸã§ãã
NU_MAILBOX_DELETED-ã¿ã¹ã¯ãäžæãããŠããéã«ã¡ãŒã«ããã¯ã¹ãåé€ãããŸããã
NU_MAILBOX_WAS_RESET-ã¿ã¹ã¯ã®äžæäžã«ã¡ãŒã«ããã¯ã¹ããªã»ãããããŸããã
Nucleus SEã§ã¡ãŒã«ããã¯ã¹ãèªã¿åãããã®åŒã³åºããã®APIã³ãŒã«ã¯ãNucleus RTOS APIã®ã³ã¢æ©èœããµããŒãããŠããŸãã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NUSE_Mailbox_ReceiveïŒNUSE_MAILBOXã¡ãŒã«ããã¯ã¹ãADDR *ã¡ãã»ãŒãžãU8ãµã¹ãã³ãïŒ;ãã©ã¡ãŒã¿ïŒ
ã¡ãŒã«ããã¯ã¹ -
ã¡ãŒã«ããã¯ã¹ã€ã³ããã¯ã¹ïŒIDïŒã
message-åä¿¡ããã¡ãã»ãŒãžã®ã¹ãã¬ãŒãžãžã®ãã€ã³ã¿ã¯ãã¿ã€ã
ADDRã® 1ã€ã®å€æ°ã§ãã
suspend-ã¿ã¹ã¯ã®äžæã®
æå® ãå€
NUSE_NO_SUSPENDãŸãã¯
NUSE_SUSPENDãåãããšãã§ããŸãã
æ»ãå€ïŒ
NUSE_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NUSE_INVALID_MAILBOX-ç¡å¹ãªã¡ãŒã«ããã¯ã¹ã€ã³ããã¯ã¹ã
NUSE_INDALID_POINTER-ã¡ãã»ãŒãžãžã®NULLãã€ã³ã¿ãŒïŒ
NULL ïŒ;
NUSE_INVALID_SUSPEND-äžæ£ãªã¹ããªãŒã ããã®äžæã®è©Šè¡ããŸãã¯ã¿ã¹ã¯ããããã¯ããããã«APIåŒã³åºããç¡å¹ã«ãªã£ãŠããå Žåã
NUSE_MAILBOX_EMPTY-ã¡ãŒã«ããã¯ã¹ã¯ç©ºã§ãã¿ã¹ã¯ã®äžæåæ¢ã®çš®é¡ã¯æå®ãããŠããŸããã
NUSE_MAILBOX_WAS_RESET-ã¿ã¹ã¯ã®äžæäžã«ã¡ãŒã«ããã¯ã¹ããªã»ãããããŸããã
Nucleus SEã§ã®ã¡ãŒã«ããã¯ã¹ãªãŒããŒã®å®è£
APIé¢æ°ã³ãŒã
NUSE_Mailbox_ReceiveïŒïŒ ïŒãã©ã¡ãŒã¿ãŒã®ãã§ãã¯åŸ
ïŒã®ããŒãžã§ã³ã¯ãAPIåŒã³åºãããããã¯ïŒã¿ã¹ã¯ã®äžæïŒã®ããã«ã¢ã¯ãã£ãã«ãªã£ãŠãããã©ããã«å¿ããŠãæ¡ä»¶ä»ãã³ã³ãã€ã«ã䜿çšããŠéžæãããŸãã äž¡æ¹ã®ãªãã·ã§ã³ãæ€èšããŸãã
ã¿ã¹ã¯ã®ããã¯ãç¡å¹ã«ãªã£ãŠããå Žåããã®APIåŒã³åºãã®ããžãã¯ã¯éåžžã«åçŽã§ãã³ãŒãã®èª¬æã¯äžèŠã§ãã
if (!NUSE_Mailbox_Status[mailbox]) /* mailbox empty */ { return_value = NUSE_MAILBOX_EMPTY; } else { /* mailbox full */ *message = NUSE_Mailbox_Data[mailbox]; NUSE_Mailbox_Status[mailbox] = FALSE; return_value = NUSE_SUCCESS; }
ã¡ãã»ãŒãžã¯å¯Ÿå¿ãã
NUSE_Mailbox_Data []èŠçŽ ããèªã¿åãããã¡ãŒã«ããã¯ã¹ã¯ç©ºãšããŠããŒã¯ãããŸãã
ã¿ã¹ã¯ã®ããã¯ãæå¹ã«ãªã£ãŠããå Žåãã³ãŒãã¯ããè€éã«ãªããŸãã
do { if (NUSE_Mailbox_Status[mailbox]) /* mailbox full */ { *message = NUSE_Mailbox_Data[mailbox]; NUSE_Mailbox_Status[mailbox] = FALSE; if (NUSE_Mailbox_Blocking_Count[mailbox] != 0) { U8 index; /* check whether a task is blocked */ /* on this mailbox */ NUSE_Mailbox_Blocking_Count[mailbox]--; for (index=0; index<NUSE_TASK_NUMBER; index++) { if ((LONIB(NUSE_Task_Status[index]) == NUSE_MAILBOX_SUSPEND) && (HINIB(NUSE_Task_Status[index]) == mailbox)) { NUSE_Task_Blocking_Return[index] = NUSE_SUCCESS; NUSE_Wake_Task(index); break; } } } return_value = NUSE_SUCCESS; suspend = NUSE_NO_SUSPEND; } else /* mailbox empty */ { if (suspend == NUSE_NO_SUSPEND) { return_value = NUSE_MAILBOX_EMPTY; } else { /* block task */ NUSE_Mailbox_Blocking_Count[mailbox]++; NUSE_Suspend_Task(NUSE_Task_Active, (mailbox << 4) | NUSE_MAILBOX_SUSPEND); return_value = NUSE_Task_Blocking_Return[NUSE_Task_Active]; if (return_value != NUSE_SUCCESS) { suspend = NUSE_NO_SUSPEND; } } } } while (suspend == NUSE_SUSPEND);
ããã€ãã®èª¬æã圹ç«ã€å ŽåããããŸãã
ã³ãŒãã¯
do ... whileã«ãŒãã§å²ãŸããŠ
ããŸãããã®
ã«ãŒãã¯ã
suspendãã©ã¡ãŒã¿ãŒã
NUSE_SUSPENDã®éã«å®è¡ãããŸãã
ã¡ãŒã«ããã¯ã¹ããã£ã±ãã®å Žåãä¿åãããã¡ãã»ãŒãžãè¿ãããã¡ãŒã«ããã¯ã¹ã®ç¶æ
ãå€åããŠç©ºã§ããããšã瀺ããŸãã ãã®ã¡ãŒã«ããã¯ã¹ã§äžæåæ¢ãããã¿ã¹ã¯ïŒèšé²ãåŸ
æ©ããŠããïŒã確èªããŸãã ãã®ãããªã¿ã¹ã¯ãããå Žåãæåã®ã¿ã¹ã¯ãåéãããŸãã ãµã¹ãã³ãå€æ°ã¯
NUSE_NO_SUSPENDã«èšå®ãããAPIåŒã³åºãã¯çµäºããŠ
NUSE_SUCCESSãè¿ããŸãã
ã¡ãŒã«ããã¯ã¹ã空ã§ã
ãµã¹ãã³ããã©ã¡ãŒã¿ã
NUSE_NO_SUSPENDã®å ŽåãAPIåŒã³åºãã¯
NUSE_MAILBOX_EMPTYãè¿ããŸãã suspendã
NUSE_SUSPENDã®å Žåãã¿ã¹ã¯ã¯äžæåæ¢ããŸãã åŒã³åºãã®çµããã«æ»ãå€ã
NUSE_SUCCESSã§ããå Žåãã¡ãã»ãŒãžãéä¿¡ãããããã«ã¿ã¹ã¯ãåéãããããšã瀺ããŸãïŒã¡ãŒã«ããã¯ã¹ããªã»ãããããããšã§ã¯ãããŸããïŒããµã€ã¯ã«ã¯æåããå§ãŸããŸãã
次ã®èšäºã§ã¯ãã¡ãŒã«ããã¯ã¹ã«é¢é£ä»ããããè¿œå ã®APIåŒã³åºããšã察å¿ããããŒã¿æ§é ã調ã¹ãŸãã
èè
ã«ã€ããŠïŒ Colin Wallsã¯é»åæ¥çã§30幎以äžåããŠãããã»ãšãã©ã®æéããã¡ãŒã ãŠã§ã¢ã«è²»ãããŠããŸãã çŸåšãMentor EmbeddedïŒMentor Graphicsã®äžéšéïŒã®ãã¡ãŒã ãŠã§ã¢ãšã³ãžãã¢ã§ãã Colin Wallsã¯ãã«ã³ãã¡ã¬ã³ã¹ãã»ãããŒãå€ãã®æè¡èšäºã®èè
ããã¡ãŒã ãŠã§ã¢ã«é¢ãã2åã®æ¬ã§ãã話ããŸãã è±åœã«äœãã§ããŸãã
Colinã®ãããã§ãã·ã§ãã«
ããã° ãé»åã¡ãŒã«ïŒcolin_walls@mentor.comã