
ã€ãã³ããã©ã°ã®ã°ã«ãŒãã¯ã以åã®èšäºã®ããããã§æ¢ã«èšåãããŠããŸãïŒïŒ5ïŒã Nucleus SEã§ã¯ããããã¯ã·ã°ãã«ã«äŒŒãŠããŸãããããæè»ã§ãã ãããã¯ãã¿ã¹ã¯éã§ç°¡åãªã¡ãã»ãŒãžã転éããããã®äœã³ã¹ãã§æè»ãªæ¹æ³ãæäŸããŸãã
ã·ãªãŒãºã®ä»¥åã®èšäºïŒ
èšäºïŒ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ã§ããã€ãã³ããã©ã°ã°ã«ãŒããå®çŸ©ãããŠããªãå Žåãã€ãã³ããã©ã°ã°ã«ãŒãã®ããŒã¿æ§é ãšãµãŒãã¹ã³ãŒã«ã«é¢é£ããã³ãŒãã¯ã¢ããªã±ãŒã·ã§ã³ã«å«ãŸããŸããã
ã€ãã³ããã©ã°ã®ã°ã«ãŒãã¯8ããããã©ã°ã®ã»ããã§ãããè€æ°ã®ã¿ã¹ã¯ã1ã€ã®ãã©ã°ãå®å šã«äœ¿çšã§ããããã«ã¢ã¯ã»ã¹ãå¶éãããŠããŸãã 1ã€ã®ã¿ã¹ã¯ã§ãã€ãã³ããã©ã°ã®ä»»æã®çµã¿åãããèšå®ãŸãã¯ã¯ãªã¢ã§ããŸãã å¥ã®ã¿ã¹ã¯ã¯ããã€ã§ããã©ã°ã®ã°ã«ãŒããèªã¿åãããšã§ãããç¹å®ã®äžé£ã®ãã©ã°ãåŸ æ©ããããšãã§ããŸãïŒããŒãªã³ã°ãŸãã¯äžæåæ¢ã䜿çšïŒã
ã€ãã³ããã©ã°ã°ã«ãŒãã®æ§æ
ã€ãã³ããã©ã°ã°ã«ãŒãã®æ°
ã»ãšãã©ã®Nucleus SEãªããžã§ã¯ããšåæ§ã«ãã€ãã³ããã©ã°ã°ã«ãŒãã®èšå®ã¯nuse_config.hã® #defineãã£ã¬ã¯ãã£ãã§æå®ãããŸãã ã¡ã€ã³ãã©ã¡ãŒã¿ã¯NUSE_EVENT_GROUP_NUMBERã§ãã¢ããªã±ãŒã·ã§ã³ã§å®çŸ©ãããã€ãã³ããã©ã°ã®ã°ã«ãŒãæ°ã決å®ããŸãã ããã©ã«ãã§ã¯ããã®ãã©ã¡ãŒã¿ãŒã¯0ã«èšå®ããïŒã€ãŸããã€ãã³ããã©ã°ã°ã«ãŒãã¯äœ¿çšãããŸããïŒãæ倧16ãŸã§ã®å€ãèšå®ã§ããŸããäžæ£ãªå€ã¯ã³ã³ãã€ã«ãšã©ãŒã«ã€ãªãããŸãã ãã€ãŸãããã®ã¢ãžã¥ãŒã«ã§ã³ã³ãã€ã«ããããšãæå³ããŸãïŒããã®çµæã ïŒerrorãã£ã¬ã¯ãã£ããæ©èœããŸãã ãŒã以å€ã®å€ãéžæããããšã¯ãã€ãã³ããã©ã°ã°ã«ãŒãã®äž»ãªã¢ã¯ãã£ããŒã¿ãŒã§ãã ãã®ãã©ã¡ãŒã¿ãŒã¯ããŒã¿æ§é ãå®çŸ©ãããšãã«äœ¿çšããããã®ãµã€ãºã¯ãã®å€ã«äŸåããŸãïŒããã«ã€ããŠã¯ã以äžã®èšäºã§è©³ãã説æããŸãïŒã ããã«ããŒã以å€ã®å€ã¯APIèšå®ãã¢ã¯ãã£ãã«ããŸãã
APIåŒã³åºããã¢ã¯ãã£ãã«ãã
Nucleus SEã®åAPIé¢æ°ïŒãŠãŒãã£ãªãã£åŒã³åºãïŒã¯ã nuse_config.hã® #defineãã£ã¬ã¯ãã£ãã«ãã£ãŠã¢ã¯ãã£ãã«ãããŸã ã ã€ãã³ããã©ã°ã®ã°ã«ãŒãã®å Žåã次ã®ãã®ãå«ãŸããŸãã
NUSE_EVENT_GROUP_SET
NUSE_EVENT_GROUP_RETRIEVE
NUSE_EVENT_GROUP_INFORMATION
NUSE_EVENT_GROUP_COUNT
ããã©ã«ãã§ã¯ããããã¯FALSEã«èšå®ãããŠãããããåãµãŒãã¹åŒã³åºããç¡å¹ã«ããããããå®è£ ããã³ãŒãã®çµã¿èŸŒã¿ããããã¯ããŸãã ã€ãã³ããã©ã°ã®ã°ã«ãŒããæ§æããã«ã¯ãå¿ èŠãªAPIåŒã³åºããéžæãã察å¿ãããã£ã¬ã¯ãã£ããTRUEã«èšå®ããå¿ èŠããããŸãã
以äžã¯ãããã©ã«ãã®nuse_config.hãã¡ã€ã«ããã®æç²ã§ãã
#define NUSE_EVENT_GROUP_NUMBER 0 /* Number of event groups in the system - 0-16 */ #define NUSE_EVENT_GROUP_SET FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* Service call enabler */ #define NUSE_EVENT_GROUP_COUNT FALSE /* Service call enabler */
ã¢ããªã±ãŒã·ã§ã³ã«ã€ãã³ããã©ã°ã°ã«ãŒãããªãå Žåã«ã¢ã¯ãã£ãåãããAPIé¢æ°ã¯ãã³ã³ãã€ã«ãšã©ãŒã«ãªããŸãïŒåžžã«æå¹ã«ãªã£ãŠããNUSE_Event_Group_CountïŒïŒãé€ãïŒã ã¢ã¯ãã£ãåãããŠããªãAPIåŒã³åºããã³ãŒãã䜿çšããå Žåãå®è£ ã³ãŒããã¢ããªã±ãŒã·ã§ã³ã«å«ãŸããŠããªãã£ããããã¬ã€ã¢ãŠããšã©ãŒãçºçããŸãã
ã€ãã³ãåŒã³åºããŠãŒãã£ãªãã£åŒã³åºã
Nucleus RTOSã¯ã次ã®æ©èœãæäŸãã7ã€ã®ãŠãŒãã£ãªãã£ã³ãŒã«ããµããŒãããŠããŸãã
- ã€ãã³ããã©ã°ãèšå®ããŸãã Nucleus SEã¯NUSE_Event_Group_SetïŒïŒé¢æ°ã§å®è£ ãããŸãã
- ã€ãã³ããã©ã°ã®èªã¿åãã Nucleus SEã¯NUSE_Event_Group_RetrieveïŒïŒã§å®è£ ãããŠããŸãã
- ã€ãã³ããã©ã°ã®ç¹å®ã®ã°ã«ãŒãã«é¢ããæ å ±ãæäŸããŸãã Nucleus SEã§ã¯ã NUSE_Event_Group_InformationïŒïŒã§å®è£ ãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã§çŸåšæ§æãããŠããã€ãã³ããã©ã°ã°ã«ãŒãã®æ°ãè¿ããŸãã Nucleus SEã§ã¯ã NUSE_Event_Group_CountïŒïŒã§å®è£ ãããŠããŸãã
- ã€ãã³ããã©ã°ã®æ°ããã°ã«ãŒããã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããŸãã Nucleus SEã¯å®è£ ãããŠããŸããã
- ã€ãã³ããã©ã°ã®ã°ã«ãŒããã¢ããªã±ãŒã·ã§ã³ããåé€ããŸãã Nucleus SEã¯å®è£ ãããŠããŸããã
- ã¢ããªã±ãŒã·ã§ã³å ã®ã€ãã³ããã©ã°ã®ãã¹ãŠã®ã°ã«ãŒããžã®ãã€ã³ã¿ãŒãè¿ããŸãã Nucleus SEã¯å®è£ ãããŠããŸããã
ãããã®åãªãŒããŒãããã³ãŒã«ã®å®è£ ã«ã€ããŠã¯ã以äžã§è©³ãã説æããŸãã
Nucleus RTOSãŸãã¯Nucleus SEã«ã¯ãªã»ããæ©èœããªãããšã«æ³šæããŠãã ããã ããã¯æå³çã«è¡ãããŸãã ãªã»ããæ©èœã¯ããã©ã°ã®ç¹å¥ãªç¶æ ã®æ®åãæå³ããŸãã ã€ãã³ããã©ã°ã®ã°ã«ãŒãã®å Žåãå¯äžã®ãç¹å¥ãªãç¶æ ã¯ãã¹ãŠã®ãã©ã°ããªã»ããããããšã§ããããã¯NUSE_Event_Group_SetïŒïŒã䜿çšããŠå®è¡ã§ããŸãã
ã€ãã³ããã©ã°ã°ã«ãŒããèšå®ããã³èªã¿åãããã®ãµãŒãã¹åŒã³åºã
ã€ãã³ããã©ã°ã®ã°ã«ãŒãã«å¯ŸããŠå®è¡ã§ããåºæ¬çãªæäœã¯ã1ã€ä»¥äžã®ãã©ã°ã®å€ãèšå®ããããšãšããã©ã°ã®çŸåšã®å€ãèªã¿åãããšã§ãã Nucleus RTOSããã³Nucleus SEã¯ããããã®æäœã«å¯ŸããŠ4ã€ã®åºæ¬çãªAPIåŒã³åºããæäŸããŸãã
ã€ãã³ããã©ã°ã¯ãããã§ããããã2é²æ°ãšããŠèŠèŠåããã®ãæé©ã§ãã æŽå²çã«æšæºCã¯ãã€ããªå®æ°ïŒ8é²ããã³16 é²ã®ã¿ ïŒã®è¡šçŸããµããŒãããŠããªããããNucleus SEã«ã¯äŸ¿å©ãªããããŒãã¡ã€ã«nuse_binary.hããã ã256åã®8ãããå€ãã¹ãŠã«b01010101ã®ãããª#defineæåãå«ãŸããŠããŸãã
ã€ãã³ããã©ã°ãèšå®ãã
ãã©ã°èšå®çšã®Nucleus RTOS APIåŒã³åºãé¢æ°ã¯éåžžã«æè»ã§ããã ANDããã³ORæŒç®ã䜿çšããŠãã©ã°å€ãèšå®ããã³ã¯ãªã¢ã§ããŸãã Nucleus SEã¯åæ§ã®æ©èœãæäŸããŸãããã¿ã¹ã¯ã®äžæåæ¢ã¯ãªãã·ã§ã³ã§ãã
Nucleus RTOSã§ãã©ã°ãèšå®ããããã®åŒã³åºã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Set_EventsïŒNU_EVENT_GROUP * groupãUNSIGNED event_flagsãOPTIONæäœïŒ;
ãã©ã¡ãŒã¿ïŒ
group-ã€ãã³ããã©ã°ã®ã°ã«ãŒãã«å¯ŸããŠãŠãŒã¶ãŒãæäŸããå¶åŸ¡ãããã¯ãžã®ãã€ã³ã¿ãŒã
event_flags-ãã©ã°ã°ã«ãŒãã®ããããã¹ã¯ã®å€ã
operation-å®è¡ãããæäœ ã NU_OR ïŒãã©ã°ã®èšå®çšïŒãŸãã¯NU_AND ïŒãã©ã°ã®ã¯ãªã¢çšïŒã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_INVALID_GROUP-ã€ãã³ããã©ã°ã®ã°ã«ãŒããžã®ç¡å¹ãªãã€ã³ã¿ãŒã
NU_INVALID_OPERATION-æå®ãããæäœã¯NU_ORããã³NU_ANDãšã¯ç°ãªããŸãã
Nucleus SEã§ãã©ã°ãèšå®ããããã®åŒã³åºã
ãã®APIã³ãŒã«ã¯ãNucleus RTOS APIã®ã³ã¢æ©èœããµããŒãããŠããŸãã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NUSE_Event_Group_SetïŒNUSE_EVENT_GROUPã°ã«ãŒããU8 event_flagsãOPTIONæäœïŒ;
ãã©ã¡ãŒã¿ïŒ
group-ãã©ã°ãèšå®/ã¯ãªã¢ãããŠããã€ãã³ãã°ã«ãŒãã®ã€ã³ããã¯ã¹ïŒIDïŒã
event_flags-ãã©ã°ã°ã«ãŒãã®ãããããã·å€ã
operation-å®è¡ãããæäœ ã NUSE_OR ïŒãã©ã°ã®èšå®çšïŒãŸãã¯NUSE_AND ïŒãã©ã°ã®ã¯ãªã¢çšïŒã
æ»ãå€ïŒ
NUSE_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NUSE_INVALID_GROUP-ç¡å¹ãªã€ãã³ããã©ã°ã°ã«ãŒãã€ã³ããã¯ã¹ã
NUSE_INVALID_OPERATION-æå®ãããæäœã¯NUSE_ORããã³NUSE_ANDãšã¯ç°ãªããŸãã
Nucleus SEã§ã®ã€ãã³ããã©ã°ã®ã€ã³ã¹ããŒã«ã®å®è£
NUSE_Event_Group_SetïŒïŒ APIé¢æ°ã®åæã³ãŒãã¯äžè¬çã§ãïŒãã©ã¡ãŒã¿ãŒããã§ãã¯ããåŸïŒããããã¯ããAPIåŒã³åºãïŒã¿ã¹ã¯ã®äžæïŒã®ãµããŒããã¢ã¯ãã£ããã©ããã«é¢ä¿ãããŸããã ããžãã¯ã¯éåžžã«ç°¡åã§ãã
NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else /* NUSE_AND */ { NUSE_Event_Group_Data[group] &= event_flags; }
event_flagsããããã¹ã¯ã¯ ãéžæããã€ãã³ããã©ã°ã®ã°ã«ãŒãã®å€ã«ïŒ ANDãŸãã¯ORæŒç®ã䜿çšããŠïŒéããããŸãã
æ®ãã®ã³ãŒãã¯ãã¿ã¹ã¯ã®ããã¯ãæå¹ã«ãªã£ãŠããå Žåã«ã®ã¿æå¹ã«ãªããŸãã
#if NUSE_BLOCKING_ENABLE while (NUSE_Event_Group_Blocking_Count[group] != 0) { U8 index; /* check whether any tasks are blocked */ /* on this event group */ for (index=0; index<NUSE_TASK_NUMBER; index++) { if ((LONIB(NUSE_Task_Status[index]) == NUSE_EVENT_SUSPEND) && (HINIB(NUSE_Task_Status[index]) == group)) { NUSE_Task_Blocking_Return[index] = NUSE_SUCCESS; NUSE_Task_Status[index] = NUSE_READY; break; } } NUSE_Event_Group_Blocking_Count[group]--; } #if NUSE_SCHEDULER_TYPE == NUSE_PRIORITY_SCHEDULER NUSE_Reschedule(NUSE_NO_TASK); #endif #endif NUSE_CS_Exit(); return NUSE_SUCCESS;
ãã®ãã©ã°ã®ã°ã«ãŒãããã¿ã¹ã¯ãïŒèªã¿åãã®ããã«ïŒäžæåæ¢ãããŠããå ŽåãåéãããŸãã å®è¡ãç¶ç¶ããæ©äŒãäžãããããšïŒã¹ã±ãžã¥ãŒã©ã«äŸåïŒãåéã®æ¡ä»¶ãæºããããŠãããã©ãããå€æã§ããŸãïŒã€ãã³ããã©ã°ã®èªã¿åããåç §ïŒã
ã€ãã³ããã©ã°ã®èªã¿åã
Nucleus RTOS APIãŠãŒãã£ãªãã£ã®èªã¿åãåŒã³åºãã¯éåžžã«æè»ã§ãããæäœãããã«å®è¡ã§ããªãå ŽåïŒããšãã°ãçŸåšã®ç¶æ ãè¡šããªãã€ãã³ããã©ã°ã®ç¹å®ã®ã·ãŒã±ã³ã¹ãèªã¿åãããšããå ŽåïŒãã¿ã¹ã¯ãç¡æéã«ãŸãã¯ç¹å®ã®ã¿ã€ã ã¢ãŠãã§äžæåæ¢ã§ããŸãã Nucleus SEã¯åãæ©èœãæäŸããŸããã¿ã¹ã¯ã®äžæåæ¢ã®ã¿ããªãã·ã§ã³ã§ãããã¿ã€ã ã¢ãŠãã¯å®è£ ãããŠããŸããã
Nucleus RTOSã®ãã©ã°ãã£ã¬ã³ãž
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Retrieve_EventsïŒNU_EVENT_GROUP *ã°ã«ãŒããUNSIGNED requested_eventsãOPTIONæäœãUNSIGNED * retrieved_eventsãUNSIGNEDãµã¹ãã³ãïŒ;
ãã©ã¡ãŒã¿ïŒ
group-ã€ãã³ããã©ã°ã®ã°ã«ãŒãã«å¯ŸããŠãŠãŒã¶ãŒãæäŸããå¶åŸ¡ãããã¯ãžã®ãã€ã³ã¿ãŒã
requested_events-èªã¿åããã©ã°ãå®çŸ©ããããããã¹ã¯ã
æäœ -NU_AND ã NU_AND_CONSUME ã NU_ORããã³NU_OR_CONSUMEã® 4ã€ã®æäœã䜿çšå¯èœã§ãã NU_ANDããã³NU_AND_CONSUMEæäœã¯ãèŠæ±ããããã¹ãŠã®ãã©ã°ãå¿ èŠã§ããããšã瀺ããŸãã æäœNU_ORããã³NU_OR_CONSUMEã¯ãèŠæ±ããããã©ã°ã®1ã€ä»¥äžãååã§ããããšã瀺ããŸãã CONSUMEãã©ã¡ãŒã¿ãŒã¯ãèŠæ±ãæåããåŸã«æ¢åã®ãã©ã°ãèªåçã«ã¯ãªã¢ããŸãã
retrieve_events-èªã¿åãã€ãã³ããã©ã°ã®å€ã®ã¹ãã¢ãžã®ãã€ã³ã¿ã
suspend-ã¿ã¹ã¯ãäžæåæ¢ããããã®ä»æ§ã NU_NO_SUSPENDãŸãã¯NU_SUSPENDã®å€ããŸãã¯ã·ã¹ãã ã¿ã€ããŒã®ãã£ãã¯åäœã®ã¿ã€ã ã¢ãŠãå€ïŒ 1ã4,294,967,293ïŒãåãããšãã§ããŸãã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_NOT_PRESENT-æå®ãããæäœã¯ã€ãã³ããè¿ããŸããã§ããïŒNU_ORã®å Žåã¯åäžã®ã€ãã³ãã§ã¯ãªããNU_ANDã®å Žåã¯ãã¹ãŠã®ã€ãã³ãã§ã¯ãããŸããïŒã
NU_INVALID_GROUP-ã€ãã³ããã©ã°ã®ã°ã«ãŒããžã®ç¡å¹ãªãã€ã³ã¿ãŒã
NU_INVALID_OPERATION-æå®ãããæäœã¯æ£ãããããŸããã§ããã
NU_INVALID_POINTER-ã€ãã³ããã©ã°ã®ã¹ãã¢ãžã®NULLãã€ã³ã¿ãŒïŒNULLïŒã
NU_INVALID_SUSPEND-éã¿ã¹ã¯é¢é£ã¹ã¬ããããäžæåæ¢ãè©Šã¿ãŸãã
NU_TIMEOUT-ã€ãã³ããã©ã°ã®å¿ èŠãªçµã¿åããã¯ãæå®ãããã¿ã€ã ã¢ãŠãã®åŸã§ãèšå®ãããŸããã§ããã
NU_GROUP_DELETED-ã¿ã¹ã¯ã®äžæäžã«ã€ãã³ããã©ã°ã®ã°ã«ãŒããåé€ãããŸããã
Nucleus SEã®ãã©ã°ãã£ã¬ã³ãž
ãã®APIã³ãŒã«ã¯ãNucleus RTOS APIã®ã³ã¢æ©èœããµããŒãããŠããŸãã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NUSE_Event_Group_RetrieveïŒNUSE_EVENT_GROUPã°ã«ãŒããU8 requested_eventsãOPTIONæäœãU8 * retrieved_eventsãU8ãµã¹ãã³ãïŒ;
ãã©ã¡ãŒã¿ïŒ
group-ã€ãã³ããã©ã°ã®èªã¿åãã°ã«ãŒãã®ã€ã³ããã¯ã¹ïŒIDïŒã
requested_events-èªã¿åããã©ã°ãå®çŸ©ããããããã¹ã¯ã
operation-å¿ èŠãªãã©ã°ã®æ°ã瀺ãä»æ§ïŒ NUSE OR ïŒäžéšã®ãã©ã°ïŒãŸãã¯NUSE AND ïŒãã¹ãŠã®ãã©ã°ïŒ;
retrieve_events-èªã¿åãã€ãã³ããã©ã°ã®å®éã®å€ã®ã¹ãã¢ãžã®ãã€ã³ã¿ïŒ NUSE_ANDãªãã¬ãŒã·ã§ã³ã§ã¯ãããã¯requested_eventsãã©ã¡ãŒã¿ãŒã§æž¡ããããã®ãšåãã§ãïŒã
suspend-ã¿ã¹ã¯ãäžæåæ¢ããããã®æå®;å€ã¯NUSE_NO_SUSPENDãŸãã¯NUSE_SUSPENDãåãããšãã§ããŸãã
æ»ãå€ïŒ
NUSE_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NUSE_NOT_PRESENT-æå®ãããæäœã¯ã€ãã³ããè¿ããŸããã§ããïŒ NUSE_ORã®å Žåã¯åäžã®ã€ãã³ãã§ã¯ãªãã NUSE_ANDã®å Žåã¯ãã¹ãŠã®ã€ãã³ãã§ã¯ãããŸããïŒã
NUSE_INVALID_GROUP-ç¡å¹ãªã€ãã³ããã©ã°ã°ã«ãŒãã€ã³ããã¯ã¹ã
NUSE_INVALID_OPERATION-æå®ãããæäœã¯NUSE_ORãŸãã¯NUSE_ANDãšã¯ç°ãªããŸãã
NUSE_INVALID_POINTER-èªã¿åãã€ãã³ããã©ã°ã®ã¹ãã¢ãžã®NULLãã€ã³ã¿ãŒïŒ NULL ïŒã
NUSE_INVALID_SUSPEND-éã¿ã¹ã¯ãããŒããã®äžæåæ¢ã®è©Šè¡ããŸãã¯APIåŒã³åºãã®ãããã¯ã®ãµããŒããç¡å¹ã«ãªã£ãŠããå Žåã
Nucleus SEã§ã€ãã³ããã©ã°ã®èªã¿åããå®è£ ãã
APIé¢æ°ã³ãŒãNUSE_Event_Group_RetrieveïŒïŒ ïŒãã©ã¡ãŒã¿ãŒã®ãã§ãã¯åŸïŒã®ããŒãžã§ã³ã¯ããããã¯ïŒãµã¹ãã³ãïŒã¿ã¹ã¯ãžã®APIåŒã³åºãã®ãµããŒããã¢ã¯ãã£ããã©ããã«å¿ããŠãæ¡ä»¶ä»ãã³ã³ãã€ã«äžã«éžæãããŸãã ããã2ã€ã®ãªãã·ã§ã³ãå¥ã ã«èããŠã¿ãŸãããã
ããã¯ãç¡å¹ã«ãªã£ãŠããå Žåããã®APIåŒã³åºãã®å®å šãªã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
temp_events = NUSE_Event_Group_Data[group] & requested_events; if (operation == NUSE_OR) { if (temp_events != 0) { return_value = NUSE_SUCCESS; } else { return_value = NUSE_NOT_PRESENT; } } else /* operation == NUSE_AND */ { if (temp_events == requested_events) { return_value = NUSE_SUCCESS; } else { return_value = NUSE_NOT_PRESENT; } }
å¿ èŠãªã€ãã³ããã©ã°ã¯ãæå®ãããã€ãã³ããã©ã°ã®ã°ã«ãŒãããéžæãããŸãã å€ã¯ãèŠæ±ããããã©ã°ã®æ»ãå€ãšå³å€ãšãšãã«ã AND / ORæŒç®ãèæ ®ããŠãå¿ èŠãªã€ãã³ããšæ¯èŒãããŸãã
ã¿ã¹ã¯ã®ããã¯ãæå¹ã«ãªã£ãŠããå Žåãã³ãŒãã¯ããè€éã«ãªããŸãã
do { temp_events = NUSE_Event_Group_Data[group] & requested_events; if (operation == NUSE_OR) { if (temp_events != 0) { return_value = NUSE_SUCCESS; } else { return_value = NUSE_NOT_PRESENT; } } else /* operation == NUSE_AND */ { if (temp_events == requested_events) { return_value = NUSE_SUCCESS; } else { return_value = NUSE_NOT_PRESENT; } } if (return_value == NUSE_SUCCESS) { suspend = NUSE_NO_SUSPEND; } else { if (suspend == NUSE_SUSPEND) /* block task */ { NUSE_Event_Group_Blocking_Count[group]++; NUSE_Suspend_Task(NUSE_Task_Active, (group << 4) | NUSE_EVENT_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_NOT_PRESENTã«èšå®ãããŸã ã suspendãã©ã¡ãŒã¿ãŒãNUSE_SUSPENDã«èšå®ãããŠããå Žåãã¿ã¹ã¯ã¯äžæåæ¢ããŸãã æ»ããšãïŒã¿ã¹ã¯ãåéãããšãïŒãæ»ãå€ãNUSE_SUCCESSã®å Žåããã®ã°ã«ãŒãã®ã€ãã³ããã©ã°ãèšå®ãŸãã¯ã¯ãªã¢ãããããã«ã¿ã¹ã¯ãåéãããããšã瀺ãããµã€ã¯ã«ãæåããéå§ããããã©ã°ãèªã¿åãããŠãã§ãã¯ãããŸãã ã€ãã³ããã©ã°ã®ã°ã«ãŒãããªã»ããããAPIé¢æ°ããªãããããããã¿ã¹ã¯ãåéããå¯äžã®çç±ã§ããã NUSE_Task_Blocking_Return []ãã§ãã¯ããã»ã¹ã¯ãããã¯å¶åŸ¡ãšä»ã®ã¿ã€ãã®ãªããžã§ã¯ããšã®äºææ§ã®ããã«ã·ã¹ãã ã«æ®ãããŠããŸãã
次ã®èšäºã§ã¯ãã€ãã³ããã©ã°ã°ã«ãŒãã«é¢é£ä»ããããè¿œå ã®APIåŒã³åºããšãã®ããŒã¿æ§é ã«ã€ããŠèª¬æããŸãã
èè ã«ã€ããŠïŒ Colin Wallsã¯é»åæ¥çã§30幎以äžåããŠãããã»ãšãã©ã®æéããã¡ãŒã ãŠã§ã¢ã«è²»ãããŠããŸãã çŸåšãMentor EmbeddedïŒMentor Graphicsã®äžéšéïŒã®ãã¡ãŒã ãŠã§ã¢ãšã³ãžãã¢ã§ãã Colin Wallsã¯ãã«ã³ãã¡ã¬ã³ã¹ãã»ãããŒãå€ãã®æè¡èšäºã®èè ããã¡ãŒã ãŠã§ã¢ã«é¢ãã2åã®æ¬ã§ãã話ããŸãã è±åœã«äœãã§ããŸãã Colinã®ãããã§ãã·ã§ãã«ããã° ãé»åã¡ãŒã«ïŒcolin_walls@mentor.comã