ãã®èšäºã§ã¯ãã»ããã©ã®ã¬ãã¥ãŒãç¶ããŠããŸãã
ãã«ããŒã»ããã©ãµãŒãã¹
Nucleus RTOSã«ã¯ãã»ããã©é¢é£ã®æ©èœãæäŸãã4ã€ã®APIã³ãŒã«ããããŸããã»ããã©ã®ãªã»ãããã»ããã©æ
å ±ã®ååŸãã¢ããªã±ãŒã·ã§ã³å
ã®ã»ããã©ã®æ°ã®ååŸãã¢ããªã±ãŒã·ã§ã³å
ã®ãã¹ãŠã®ã»ããã©ãžã®ãã€ã³ã¿ã®ååŸã§ãã ãããã®æåã®3ã€ã¯Nucleus SEã§å®è£
ãããŠããŸãã
ã·ãªãŒãºã®ä»¥åã®èšäºïŒ
èšäºïŒ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ïŒã¯ããã«ã
ã»ããã©ããªã»ãããã
ãã®APIåŒã³åºãã¯ãã»ããã©ãåæã®æªäœ¿çšç¶æ
ã«ãªã»ããããŸãã ãã®APIé¢æ°ã¯ããªã»ãããå®è¡ãããšããäºå®ã«ãããããããã«ãŠã³ã¿ãŒãåæå€ã«èšå®ããã ãã§ãªããæ°ããåæã«ãŠã³ã¿ãŒå€ãåŒã³åºãã§æž¡ããããããä»ã®ã«ãŒãã«ãªããžã§ã¯ãã®é¢æ°ãšæ¯èŒãããšç°åžžã§ãã ã»ããã©ã§äžæãããã¿ã¹ã¯ã¯ãã¹ãŠåéãããNucleus SEããã³Nucleus RTOSã®
NU_SEMAPHORE_RESETã§NUSE_SEMAPHORE_WAS_RESETã³ãŒããè¿ãããŸãã
Nucleus RTOSã§ã»ããã©ããªã»ããããããã®åŒã³åºããµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Reset_SemaphoreïŒNU_SEMAPHORE *ã»ããã©ãæªçœ²åinitial_countïŒ;ãã©ã¡ãŒã¿ïŒ
ã»ããã© -ãŠãŒã¶ãŒãæäŸããã»ããã©å¶åŸ¡ãããã¯ãžã®ãã€ã³ã¿ã
initial_count-ã»ããã©ãèšå®ãããå€ã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_INVALID_SEMAPHORE-ç¡å¹ãªã»ããã©ãã€ã³ã¿ãŒã
Nucleus SEã§ã»ããã©ããªã»ããããããã®åŒã³åºããã®APIã³ãŒã«ã¯ãNucleus RTOS APIã®ã³ã¢æ©èœããµããŒãããŠããŸãã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NUSE_Semaphore_ResetïŒNUSE_SEMAPHOREã»ããã©ãU8 initial_countïŒ;ãã©ã¡ãŒã¿ïŒ
semaphore-ãã³ããããã»ããã©ã®ã€ã³ããã¯ã¹ïŒIDïŒã
initial_count-ã»ããã©ãèšå®ãããå€ã
æ»ãå€ïŒ
NUSE_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NUSE_INVALID_SEMAPHORE-ç¡å¹ãªã»ããã©ã€ã³ããã¯ã¹ã
Nucleus SEã§ã»ããã©ãªã»ãããå®è£
ããNUSE_Semaphore_ResetïŒïŒ APIé¢æ°ã®äž»ãªã¿ã¹ã¯ã¯ã察å¿ãã
NUSE_Semaphore_Counter []èŠçŽ ãæå®ãããå€ã«èšå®ããããšã§ãïŒãã©ã¡ãŒã¿ãŒã確èªããåŸïŒã
ã¿ã¹ã¯ã®ããã¯ãæå¹ã«ãªã£ãŠããå Žåãã¿ã¹ã¯ã®ããã¯ã解é€ããã«ã¯æ¬¡ã®ã³ãŒããå¿
èŠã§ãã
while (NUSE_Semaphore_Blocking_Count[semaphore] != 0) { U8 index; /* check whether any tasks are blocked */ /* on this semaphore */ for (index=0; index<NUSE_TASK_NUMBER; index++) { if ((LONIB(NUSE_Task_Status[index]) == NUSE_SEMAPHORE_SUSPEND) && (HINIB(NUSE_Task_Status[index]) == semaphore)) { NUSE_Task_Blocking_Return[index] = NUSE_SEMAPHORE_WAS_RESET; NUSE_Task_Status[index] = NUSE_READY; break; } } NUSE_Semaphore_Blocking_Count[semaphore]--; } #if NUSE_SCHEDULER_TYPE == NUSE_PRIORITY_SCHEDULER NUSE_Reschedule(NUSE_NO_TASK); #endif
ã»ããã©ã§äžæãããåã¿ã¹ã¯ã¯ãçµäºããšããŒã¯ãããã¿ã¹ã¯äžæã³ãŒãã¯
NUSE_SEMAPHORE_WAS_RESETãè¿ããŸãã ãã®ããã»ã¹ãå®äºããåŸãPriorityã¹ã±ãžã¥ãŒã©ã䜿çšãããŠããå Žåãã³ãŒã«ã¯
NUSE_RescheduleïŒïŒãåæåããŸããåªå
床ã®é«ã1ã€ä»¥äžã®ã¿ã¹ã¯ãæºåå®äºç¶æ
ã«ãªããåéãåŸ
æ©ããå¯èœæ§ãããããã§ãã
ã»ããã©æ
å ±
ãã®ãŠãŒãã£ãªãã£åŒã³åºãã¯ã»ããã©æ
å ±ãè¿ããŸãã Nucleus SEã§ã®ãã®åŒã³åºãã®å®è£
ã¯ããªããžã§ã¯ãã®åœåãšäžæåæ¢é åºããµããŒããããŠããããã¿ã¹ã¯ã®äžæèªäœãç¡å¹ã«ã§ãããããè¿ãããæ
å ±ãå°ãªããšããç¹ã§Nucleus RTOSãšç°ãªããŸãã
Nucleus RTOSã§ã®ã»ããã©æ
å ±ã®åŒã³åºããµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Semaphore_InformationïŒNU_SEMAPHORE *ã»ããã©ãCHAR *ååãUNSIGNED * current_countãOPTION * suspend_typeãUNSIGNED * tasks_waitingãNU_TASK ** first_taskïŒ;ãã©ã¡ãŒã¿ïŒ
ã»ããã© -æ
å ±ãå¿
èŠãªã»ããã©å¶åŸ¡ãããã¯ãžã®ãã€ã³ã¿ã
name-ã»ããã©ã®8æåã®ååãžã®ãã€ã³ã¿ããã®é åã«ã¯ãã«çµäºãã€ããå«ãŸããŸãã
current_count-ã»ããã©ã«ãŠã³ã¿ã®çŸåšã®å€ãååŸããå€æ°ãžã®ãã€ã³ã¿ã
suspend_type-äžæã¿ã¹ã¯ã®ã¿ã€ããåãå
¥ããå€æ°ãžã®ãã€ã³ã¿ãŒãå€
NU_FIFOããã³
NU_PRIORITYãåãããšãã§ããŸãã
task_waiting-ã»ããã©å
ã®äžæãããã¿ã¹ã¯ã®æ°ãåãå€æ°ãžã®ãã€ã³ã¿ã
first_task -
NU_TASKåã®å€æ°ãžã®ãã€ã³ã¿ãŒãããã¯ãæåã«äžæãããã¿ã¹ã¯ã®å¶åŸ¡ãŠããããžã®ãã€ã³ã¿ãŒãåããŸãã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_INVALID_SEMAPHORE-ç¡å¹ãªã»ããã©ãã€ã³ã¿ãŒã
Nucleus SEã§ã®ã»ããã©æ
å ±ã®åŒã³åºããã®APIã³ãŒã«ã¯ãNucleus RTOS APIã®ã³ã¢æ©èœããµããŒãããŠããŸãã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NUSE_Semaphore_InformationïŒNUSE_SEMAPHOREã»ããã©ãU8 * current_countãU8 * tasks_waitingãNUSE_TASK * first_taskïŒ;ãã©ã¡ãŒã¿ïŒ
ã»ããã© -æ
å ±ãæäŸããããã«å¿
èŠãªã»ããã©ã®ã€ã³ããã¯ã¹ã
current_count-ã»ããã©ã«ãŠã³ã¿ã®çŸåšã®å€ãååŸããå€æ°ãžã®ãã€ã³ã¿ã
tasks_waiting-ãã®ã»ããã©ã§äžæãããã¿ã¹ã¯ã®æ°ãåãå
¥ããå€æ°ãžã®ãã€ã³ã¿ïŒã¿ã¹ã¯ã®äžæã®ãµããŒããç¡å¹ã«ãªã£ãŠããå Žåãäœãè¿ãããŸããïŒã
first_task -
NUSE_TASKåã®å€æ°ãžã®ãã€ã³ã¿ãŒãæåã®äžæåæ¢ã¿ã¹ã¯ã®ã€ã³ããã¯ã¹ãååŸããŸãïŒäžæåæ¢ã¿ã¹ã¯ã®ãµããŒããç¡å¹ã«ãªã£ãŠããå Žåã¯äœãè¿ãããŸããïŒã
æ»ãå€ïŒ
NUSE_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NUSE_INVALID_SEMAPHORE-ã»ããã©ã€ã³ããã¯ã¹ãç¡å¹ã§ãã
NUSE_INVALID_POINTER -1ã€ä»¥äžã®ãã€ã³ã¿ãŒãã©ã¡ãŒã¿ãŒãæ£ãããããŸããã
Nucleus SEã§ã®ã»ããã©æ
å ±ã®å®è£
ãã®APIåŒã³åºãã®å®è£
ã¯éåžžã«ç°¡åã§ãã
NUSE_CS_Enter(); *current_count = NUSE_Semaphore_Counter[semaphore]; #if NUSE_BLOCKING_ENABLE *tasks_waiting = NUSE_Semaphore_Blocking_Count[semaphore]; if (NUSE_Semaphore_Blocking_Count[semaphore] != 0) { U8 index; for (index=0; index<NUSE_TASK_NUMBER; index++) { if ((LONIB(NUSE_Task_Status[index]) == NUSE_SEMAPHORE_SUSPEND) && (HINIB(NUSE_Task_Status[index]) == semaphore)) { *first_task = index; break; } } } else { *first_task = 0; } #else *tasks_waiting = 0; *first_task = 0; #endif NUSE_CS_Exit(); return NUSE_SUCCESS;
é¢æ°ã¯ã»ããã©ã®ã¹ããŒã¿ã¹ãè¿ããŸãã 次ã«ãAPIã³ãŒã«ããããã³ã°æ©èœãã¢ã¯ãã£ãã«ãªã£ãŠããå Žåãä¿çäžã®ã¿ã¹ã¯ã®æ°ãšæåã®ã¿ã¹ã¯ã®ã€ã³ããã¯ã¹ãè¿ãããŸãïŒããã§ãªãå Žåããããã®ãã©ã¡ãŒã¿ãŒã¯0ã«èšå®ãããŸãïŒã
ã»ããã©ã®æ°ãååŸãã
ãã®ãŠãŒãã£ãªãã£åŒã³åºãã¯ãã¢ããªã±ãŒã·ã§ã³å
ã®ã»ããã©ã®æ°ãè¿ããŸãã Nucleus RTOSã§ã¯ããã®å€ã¯æéãšãšãã«å€åããæ»ãå€ã¯çŸåšã®ã»ããã©ã®æ°ã«å¯Ÿå¿ããŸããNucleusSEã§ã¯ãæ»ãå€ã¯ã¢ã»ã³ããªæ®µéã§èšå®ãããå€æŽãããŸããã
Nucleus RTOSã§ã»ããã©ã«ãŠã³ã¿ãŒãåŒã³åºããµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
UNSIGNED NU_Established_SemaphoresïŒVOIDïŒ;ãã©ã¡ãŒã¿ïŒ
æ¬ åžããŠããŸãã
æ»ãå€ïŒ
ã¢ããªã±ãŒã·ã§ã³ã§äœæãããã»ããã©ã®æ°ã
Nucleus SEã§ã»ããã©ã«ãŠã³ã¿ãŒãåŒã³åºããã®APIã³ãŒã«ã¯ãNucleus RTOS APIã®ã³ã¢æ©èœããµããŒãããŠããŸãã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
U8 NUSE_Semaphore_CountïŒvoidïŒ;ãã©ã¡ãŒã¿ïŒ
æ¬ åžããŠããŸãã
æ»ãå€ïŒ
ã¢ããªã±ãŒã·ã§ã³ã§æ§æãããŠããã»ããã©ã®æ°ã
Nucleus SEã§ã®ã»ããã©ã«ãŠã³ã¿ã®å®è£
ãã®APIåŒã³åºãã®å®è£
ã¯éåžžã«ç°¡åã§ãã
#define NUSE_SEMAPHORE_NUMBERã·ã³ãã«ã®å€ã
è¿ãããŸãã
ããŒã¿æ§é
ã»ããã©ã¯ã2ã€ãŸãã¯3ã€ã®ããŒã¿æ§é ã®é
åïŒRAMããã³ROMïŒã䜿çšããŸããããã¯ãä»ã®ãã¹ãŠã®Nucleus SEãªããžã§ã¯ããšåæ§ã«ããµã€ãºãã¢ããªã±ãŒã·ã§ã³ã®ã»ããã©ã®æ°ãšéžæãããã©ã¡ãŒã¿ã«äŸåããããŒãã«ã®ã»ããã§ãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãããã®ããŒã¿æ§é ãžã®çŽæ¥ã¢ã¯ã»ã¹ã䜿çšãããæäŸãããAPIé¢æ°ãä»ããŠããããåç
§ããããšã匷ããå§ãããŸãã ããã«ãããNucleus SEã®å°æ¥ã®ããŒãžã§ã³ãšã®éäºææ§ããã³äžèŠãªå¯äœçšãåé¿ããNucleus RTOSãžã®ã¢ããªã±ãŒã·ã§ã³ã®ç§»æ€ãç°¡çŽ åããŸãã ãµãŒãã¹åŒã³åºãã³ãŒãã®ä»çµã¿ãç解ãããããã°ããããã«ãããŒã¿æ§é ã®è©³çŽ°ãªæŠèŠã以äžã«ç€ºããŸãã
RAMããŒã¿
ãã®ããŒã¿ã®æ§é ã¯æ¬¡ã®ãšããã§ãã
NUSE_Semaphore_Counter [] -æ§æãããã»ããã©ããšã«1ã€ã®ãšã³ããªãæã€ã¿ã€ã
U8ã®é
åãã«ãŠã³ã¿ãŒã®å€ãæ ŒçŽããŸãã
NUSE_Semaphore_Blocking_Count []-U8åã®é
åã«ã¯ãåã»ããã©ã§ãããã¯ãããã¿ã¹ã¯ã®ã«ãŠã³ã¿ãŒãå«ãŸããŸãã ãã®é
åã¯ãAPIåŒã³åºãã®ãããã¯æ©èœãæå¹ã«ãªã£ãŠããå Žåã«ã®ã¿ååšããŸãã
NUSE_Semaphore_Counter []ã¯åæå€ã«åæåããïŒä»¥äžã®ãROMã®ããŒã¿ããåç
§ïŒã
NUSE_Semaphore_Blocking_Count []㯠Nucleus SEã®èµ·åæã«
NUSE_Init_SemaphoreïŒïŒã䜿çšããŠ
ãªã»ãããããŸãã 次ã®èšäºã®ããããã§ãNucleus SEã®èµ·åæé ã®å®å
šãªèª¬æãæäŸãããŸãã
以äžã¯ã
nuse_init.cãã¡ã€ã«ã®ãããã®ããŒã¿æ§é ã®å®çŸ©ã§ãã
RAM U8 NUSE_Semaphore_Counter[NUSE_SEMAPHORE_NUMBER]; #if NUSE_BLOCKING_ENABLE RAM U8 NUSE_Semaphore_Blocking_Count[NUSE_SEMAPHORE_NUMBER]; #endif
ROMããŒã¿
ããŒã¿æ§é ïŒ
NUSE_Semaphore_Initial_Value [] -åã»ããã©ã«1ã€ã®ã¬ã³ãŒããæã€
U8åã®é
åããããã¯ã»ããã©ã®åæå€ã§ãã
ãã®ããŒã¿æ§é ã¯ã
nuse_config.c㧠ïŒéçã«ïŒå®£èšããã³åæåãã
ãŸã ã
ROM U8 NUSE_Semaphore_Initial_Value[NUSE_SEMAPHORE_NUMBER] = { /* semaphore initial count values */ };
ã»ããã©ã®ã¡ã¢ãªé
ãã¹ãŠã®Nucleus SEã«ãŒãã«ãªããžã§ã¯ããšåæ§ã«ãã»ããã©ã«å¿
èŠãªããŒã¿ã®éã¯äºæž¬å¯èœã§ãã
ã¢ããªã±ãŒã·ã§ã³å
ã®ãã¹ãŠã®ã»ããã©ã®ROMã®ã¡ã¢ãªéïŒãã€ãåäœïŒã¯
NUSE_SEMAPHORE_NUMBERã§ãã
ããã¯APIã®åŒã³åºããã¢ã¯ãã£ãã«ãªã£ãŠããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã»ããã©ã®RAMã®ã¡ã¢ãªéïŒãã€ãåäœïŒã¯ã次ã®ããã«èšç®ã§ããŸãã
NUSE_SEMAPHORE_NUMBER * 2
ãã以å€ã®å Žåã¯ã
NUSE_SEMAPHORE_NUMBERã§ãã
æªå®çŸã®APIåŒã³åºã
Nucleus RTOSã«ååšããã»ããã©ã®3ã€ã®APIåŒã³åºãã¯ãNucleus SEã«ã¯å®è£
ãããŠããŸããã
ã»ããã©ã®äœæ
ãã®APIåŒã³åºãã¯ã»ããã©ãäœæããŸãã ã»ããã©ã¯éçã«äœæããããããNucleus SEã¯å¿
èŠãããŸããã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Create_SemaphoreïŒNU_SEMAPHORE *ã»ããã©ãCHAR *ååãUNSIGNED initial_countãOPTION suspend_typeïŒ;ãã©ã¡ãŒã¿ïŒ
ã»ããã© -ãŠãŒã¶ãŒãæäŸããã»ããã©å¶åŸ¡ãããã¯ãžã®ãã€ã³ã¿;ä»ã®APIåŒã³åºãã§ã»ããã©ãå¶åŸ¡ããããã«äœ¿çšãããŸãã
name -8æåã®ã»ããã©åãžã®ãã€ã³ã¿ãçµç«¯ã®ãã«ãã€ãããªã³ã«ãªã£ãŠããŸãã
initial_count-ã»ããã©ã®åæå€ã
suspend_type-ã»ããã©ã§ã¿ã¹ã¯ãäžæåæ¢ããåçã瀺ããŸãã FIFOã®ååïŒå
å
¥ãå
åºãïŒãšã¿ã¹ã¯ã®äžæåæ¢ã®åªå
é äœã«å¯Ÿå¿ããå€
NU_FIFOããã³
NU_PRIORITYãåãããšãã§ããŸãã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_INVALID_SEMAPHORE-ã»ããã©å¶åŸ¡ãããã¯ãžã®ãã€ã³ã¿ãŒã
NULLã§ãããããã§ã«äœ¿çšãããŠããããšã瀺ããŸãã
NU_INVALID_SUSPEND-ç¡å¹ãª
suspend_typeãã©ã¡ãŒã¿ãŒã
ã»ããã©ã®åé€
ãã®APIåŒã³åºãã¯ã以åã«äœæãããã»ããã©ãåé€ããŸãã ã»ããã©ã¯éçã«äœæãããåé€ã§ããªããããNucleus SEã¯å¿
èŠãããŸããã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
STATUS NU_Delete_SemaphoreïŒNU_SEMAPHORE *ã»ããã©ïŒ;ãã©ã¡ãŒã¿ïŒ
semaphore-ã»ããã©å¶åŸ¡ãããã¯ãžã®ãã€ã³ã¿ãŒã
æ»ãå€ïŒ
NU_SUCCESS-åŒã³åºãã¯æ£åžžã«å®äºããŸããã
NU_INVALID_SEMAPHORE-ç¡å¹ãªã»ããã©ãã€ã³ã¿ãŒã
ã»ããã©ãžã®ãã€ã³ã¿
ãã®APIåŒã³åºãã¯ãã·ã¹ãã å
ã®ãã¹ãŠã®ã»ããã©ãŒãžã®ãã€ã³ã¿ãŒã®é 次ãªã¹ãã圢æããŸãã ã»ããã©ã¯ãã€ã³ã¿ã§ã¯ãªãåçŽãªã€ã³ããã¯ã¹ã«ãã£ãŠèå¥ããããããNucleus SEã¯å¿
èŠãããŸããã
ãµãŒãã¹ã³ãŒã«ã®ãããã¿ã€ãïŒ
UNSIGNED NU_Semaphore_PointersïŒNU_SEMAPHORE ** pointer_listãUNSIGNED maximum_pointersïŒ;ãã©ã¡ãŒã¿ïŒ
pointer_list-ãã€ã³ã¿ã®é
å
NU_SEMAPHOREãžã®ãã€ã³ã¿ããã®é
åã«ã¯ã»ããã©ãžã®ãã€ã³ã¿ãæ ŒçŽãããŠããŸãã
maximum_pointers-é
åå
ã®ãã€ã³ã¿ãŒã®æ倧æ°ã
æ»ãå€ïŒ
é
åå
ã®
NU_SEMAPHOREãã€ã³ã¿ãŒã®æ°ã
Nucleus RTOSäºæ
ä»ã®ãã¹ãŠã®Nucleus SEãªããžã§ã¯ããšåæ§ã«ãç®æšã¯Nucleus RTOSãšã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®äºææ§ãæ倧åããããšã§ããã ã»ããã©ãäŸå€ã§ã¯ãªãããŠãŒã¶ãŒã®èŠ³ç¹ããã¯ãNucleus RTOSãšåãæ¹æ³ã§å®è£
ãããŸãã ãŸããç¹å®ã®éäºææ§ããããŸããããã¯ãæçµçãªã³ãŒããå¿
èŠãªã¡ã¢ãªéã®ç¹ã§ç解ãããããå¹ççã«ãªããšããäºå®ãèãããšã蚱容ã§ãããšèããŸããã ãã以å€ã®å ŽåãNucleus RTOS APIåŒã³åºãã¯ãNucleus SEåŒã³åºããšããŠã»ãŒçŽæ¥äœ¿çšã§ããŸãã
ãªããžã§ã¯ãèå¥å
Nucleus RTOSã§ã¯ããã¹ãŠã®ãªããžã§ã¯ãã¯ç¹å®ã®ã¿ã€ãã®ããŒã¿æ§é ïŒã³ã³ãããŒã«ãŠãããïŒã«ãã£ãŠèšè¿°ãããŸãã ãã®å¶åŸ¡ãŠããããžã®ãã€ã³ã¿ã¯ãã»ããã©ã®èå¥åãšããŠæ©èœããŸãã Nucleus SEã§ã¯ãã¡ã¢ãªãå¹ççã«äœ¿çšããããã«å¥ã®ã¢ãããŒããå¿
èŠã§ãããšå€æããŸããããã¹ãŠã®ã«ãŒãã«ãªããžã§ã¯ãã¯ãRAMããã³/ãŸãã¯ROMã®ããŒãã«ã®ã»ããã«ãã£ãŠèšè¿°ãããŸãã ãããã®ããŒãã«ã®ãµã€ãºã¯ãåã¿ã€ãã®èšå®æžã¿ãªããžã§ã¯ãã®æ°ã«ãã£ãŠæ±ºãŸããŸãã ç¹å®ã®ãªããžã§ã¯ãã®èå¥åã¯ããã®ããŒãã«ã®ã€ã³ããã¯ã¹ã§ãã ãããã£ãŠã
NUSE_SEMAPHOREã
U8ãšåçã®ãã®ãšããŠå®çŸ©ã
ãŸããããã®ã¿ã€ãã®å€æ°ïŒãã€ã³ã¿ãŒã§ã¯ãªãïŒã¯ã»ããã©ã®èå¥åãšããŠæ©èœããŸãã ã³ãŒããNucleus SEããNucleus RTOSã«ããŸãã¯ãã®éã«ç§»æ€ããå Žåããã®ããããªéäºææ§ã¯ç°¡åã«åŠçã§ããŸãã éåžžã移åãšä¿å以å€ã®ãªããžã§ã¯ãèå¥åã«å¯Ÿããæäœã¯å®è¡ãããŸããã
Nucleus RTOSã¯ãã»ããã©ã®åœåããµããŒãããŠããŸãã ãããã®ååã¯ããããã°ã«ã®ã¿äœ¿çšãããŸãã ã¡ã¢ãªãç¯çŽããããã«ãNucleus SEããããããé€å€ããŸããã
ã«ãŠã³ã¿ãŒãµã€ãº
Nucleus RTOSã§ã¯ãã»ããã©ã«ãŠã³ã¿ã¯
unsignedåã§ãéåžžã¯32ãããå€æ°ã§ãã Nucleus SEã«ã¯8ãããã®ã«ãŠã³ã¿ãŒããããŸãããããã¯ç°¡åã«å€æŽã§ããŸãã éåžžãNucleus RTOSã¯ã»ããã©ã®ãªãŒããŒãããŒããã§ãã¯ããŸããã Nucleus SE APIãåŒã³åºããŠããã«ãŠã³ã¿ãŒã«255ãè¶
ããå€ãå²ãåœãŠãããšã¯ã§ããŸããã
æªå®çŸã®APIåŒã³åºã
Nucleus RTOSã¯ãã»ããã©ãæäœããããã®8ã€ã®ãŠãŒãã£ãªãã£ã³ãŒã«ããµããŒãããŠããŸãã ãããã®ãã¡ã3ã€ã¯Nucleus SEã«ã¯å®è£
ãããŠããŸããã ãããã®èª²é¡ã®è©³çŽ°ãããã³ããããNucleus SEããé€å€ãã決å®ã«ã€ããŠã¯ãäžèšã§èª¬æããŠããŸãã
次ã®èšäºã§ã¯ãã¡ãŒã«ããã¯ã¹ã調ã¹ãŸãã
èè
ã«ã€ããŠïŒ Colin Wallsã¯é»åæ¥çã§30幎以äžåããŠãããã»ãšãã©ã®æéããã¡ãŒã ãŠã§ã¢ã«è²»ãããŠããŸãã çŸåšãMentor EmbeddedïŒMentor Graphicsã®äžéšéïŒã®ãã¡ãŒã ãŠã§ã¢ãšã³ãžãã¢ã§ãã Colin Wallsã¯ãã«ã³ãã¡ã¬ã³ã¹ãã»ãããŒãå€ãã®æè¡èšäºã®èè
ããã¡ãŒã ãŠã§ã¢ã«é¢ãã2åã®æ¬ã§ãã話ããŸãã è±åœã«äœãã§ããŸãã
Colinã®ãããã§ãã·ã§ãã«
ããã° ãé»åã¡ãŒã«ïŒcolin_walls@mentor.comã