æ°æ¥åãç§ã¯ARMã¢ãŒããã¯ãã£çšã«OSãäœæããããšã«ã€ããŠæžãèšç»ã«ã€ããŠã®èšäºãå ¬éããçªç¶ãã©ãããäœæããŸããã ããã¯ãHabréãšG +ã®äž¡æ¹ã§å€ãã®èå³æ·±ãã¬ãã¥ãŒãåãåã£ãããã§ãã
ä»æ¥ã¯ãå察åŽãããã®åé¡ã«ã¢ãããŒãããããšããŸããç¬èªã®OSãäœæãããŸã§ããŸãã¯éå±ãããŸã§ãè€éããå¢ãäŸã䜿çšããŠARMãã€ã¯ãã³ã³ãããŒã©ãŒãããã°ã©ã ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãããã¯ãContikiãTinyOSãChibiOSããŸãã¯FreeRTOSã§ã®ãããã³ã°ãé£ã³è¶ããŠãããŸããŸãªé¢çœããã®ãããããããããšãç¥ã£ãŠããŸãïŒTinyOSã«ã¯ç¬èªã®ããã°ã©ãã³ã°èšèªããããŸãïŒïŒã
ãªãARMãªã®ãïŒ 8ããããã€ã¯ãã³ã³ãããŒã©ãŒããããã®ã¯ãé¢çœããšã¯ãããããã«è¿·æã«ãªããŸãã ããã«ãARMã®éçºããŒã«ã¯ãé·å¹Žã®çµéšã«åºã¥ããŠå®è¡ãããäœæ¥ããã£ãšå¿«é©ã«ãªããŸãã åæã«ãããçš®ã®ãè©äŸ¡ããŒããã®LEDãç¹æ» ããå§ããã®ã¯ãArduinoã®å Žåãšåããããç°¡åã§ãã
ã¢ãŒããã¯ãã£ãžã®å°ããªäœè«
ARMã¯ã©ã€ã»ã³ã¹ã«æåããçŽ æŽãããã¢ãŒããã¯ãã£ãæšé²ããŠããŸãããã©ã®ããã€ã¹ã«ãã®äŒç€Ÿã®è£œåãååšããªãããæ³åããã®ã¯æ¬åœã«é£ããã§ãã ã¹ããŒããã©ã³ã«ã¯ãARMã¢ãŒããã¯ãã£ã«åºã¥ããè€æ°ã®ã³ã¢ãããããšãä¿èšŒãããŠããŸãã æè¿ã®ã©ãããããïŒããã³CPUã§ãªããäžéšã®åšèŸºæ©åšã®ä»å±ã³ã³ãããŒã©ãŒã§ããããŸãïŒã«ã¯ãããã«2ã3ããããŸãã ãŸããä»ã®å®¶åºçšåã«ããããŸãïŒé»åã¬ã³ãžãšãã¬ãã
ãã®æè»æ§ã¯ãæãåºæ¬çãªããŒãžã§ã³ã§ã¯ARMã³ã¢ãéåžžã«ã·ã³ãã«ã§ãããšããäºå®ã«ãã£ãŠå®çŸãããŠããŸãã çŸåšããã®ã¢ãŒããã¯ãã£ã«ã¯3ã€ã®çš®é¡ããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ããæ±çšãããã€ã¹ã§äœ¿çšãããŸã-ã¹ããŒããã©ã³ãŸãã¯ãããããã¯ã®ã¡ã€ã³ããã»ããµãšããŠã ãã®ãããã¡ã€ã«ã¯æãæ©èœãè±å¯ã§ãããæ¬æ ŒçãªMMUïŒã¡ã¢ãªç®¡çã¢ãžã¥ãŒã«ïŒãããŒããŠã§ã¢ã§Javaãã€ãã³ãŒãåœä»€ãå®è¡ããæ©èœãããã³DRMã¹ããŒã ã®ãµããŒãããããŸãã ãã€ã¯ãã³ã³ãããŒã©ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãããã¡ã€ã«ã®æ£å察ã§ãããïŒçªç¶ïŒïŒãã€ã¯ãã³ã³ãããŒã©ãŒã§äœ¿çšãããŸãã ããã§ã¯ãæå°æ¶è²»é»åãšç¢ºå®çãªåäœãé¢ä¿ããŠããŸãã ãããŠæåŸã«ã ãªã¢ã«ã¿ã€ã ã¯ãä¿èšŒãããå¿çæéãæã€ããšãéèŠãªã¿ã¹ã¯ã®ãã€ã¯ãã³ã³ãããŒã©ãŒãããã¡ã€ã«ã®é²åãšããŠäœ¿çšãããŸãã ãããã®ãããã¡ã€ã«ã¯ãã¹ãŠã1ã€ãŸãã¯è€æ°ã®Cortexã³ã¢ã«å®è£ ãããŸãããããšãã°ãCortex-A9ã¯ã¢ããªã±ãŒã·ã§ã³ãããã¡ã€ã«ã«åºã¥ããŠãããiPhone 4Sã®ããã»ããµã®äžéšã§ãããCortex-M0ã¯ãã€ã¯ãã³ã³ãããŒã©ãŒãããã¡ã€ã«ã«åºã¥ããŠããŸãã
éçïŒ
ã¿ãŒã²ãããã©ãããã©ãŒã ãšããŠãCortex-Mã䜿çšããããšãæ€èšããŸãããããããæãåçŽã§ãããããããå°ãªã質åãæãäžããå¿ èŠããããŸãã ãã¹ãããã€ã¹ãšããŠãNXP補ã®LPC1114 MCUãæäŸããŸãããã®åè·¯ã¯æåéãèã®äžã«çµã¿ç«ãŠãããšãã§ããŸãïŒãã ããMCUèªäœã3.3 V FTDIã±ãŒãã«ãè€æ°ã®LEDããã³æµæåšã®ã¿ãå¿ èŠã§ãïŒã LPC1114ã¯Cortex-M0ã«åºã¥ããŠãããããããã¯ãã©ãããã©ãŒã ã®æãç°¡ç¥åãããããŒãžã§ã³ã«ãªããŸãã
å¥ã®æ¹æ³ãšããŠã mbedãã©ãããã©ãŒã ãå ·äœçã«ã¯LPC1768ã«åºã¥ãã¢ãã«ïŒã€ãŸããå éšã«ããå°ãæŽç·ŽãããCortex-M3ãããããšïŒã䜿çšããŸãã ãã®ãªãã·ã§ã³ã¯ãã§ã«ããã»ã©äºç®ãããããŸãããããã€ããªããããã«ã¢ããããŒãããŠãããã°ããããã»ã¹ã¯å¯èœãªéãç°¡çŽ åãããŠããŸãã ã¯ããmbedãã©ãããã©ãŒã èªäœããããããšãã§ããŸãïŒèŠããã«ãããã¯ãªã³ã©ã€ã³IDEã§ãããarduinoã¬ãã«ã§ããã°ã©ãã³ã°ã§ããã©ã€ãã©ãªã§ãïŒã
ããå§ããŸããã
ææ°ã®ARMã®èå³æ·±ãæ©èœã¯ãã¢ã»ã³ãã©ã®æ¿å ¥ã䜿çšããã«å®å šã«Cã§å®å šã«ããã°ã©ã ã§ããããšã§ãïŒã¢ã»ã³ãã©ã¯ããã»ã©è€éã§ã¯ãããŸããããCortex-M0ã«ã¯56åã®ã³ãã³ããããããŸããïŒã äžéšã®ã³ãã³ãã¯ååãšããŠCãã䜿çšã§ããŸããããCMSIS-Cortex Microcontroller Software Interface Standardã¯ãã®åé¡ã解決ããŸãã ããã¯ãããã管çãããã¹ãŠã®åºæ¬çãªã¿ã¹ã¯ã解決ããããã»ããµãŒã®ãã©ã€ããŒã§ãã
ããã»ããµãŒã¯ã©ã®ããã«ããŒãããŸããïŒ å žåçãªç¶æ³ã¯ãã¢ãã¬ã¹0x00000000ããã³ãã³ãã®å®è¡ãéå§ããã ãã§ãã ç§ãã¡ã®å Žåãããã»ããµã¯ããã€ã³ããªãžã§ã³ãã§ãã¡ã¢ãªã®å é ã§ç¹å¥ã«å®çŸ©ãããããŒã¿åœ¢åŒãã€ãŸãå²ã蟌ã¿ãã¯ãã«ã®ããŒãã«ã«äŸåããŠããŸãã
ããã°ã©ã ã¯æ¬¡ã®ããã«éå§ããŸããããã»ããµã¯0x00000000ã®å€ãèªã¿åããSPã«æžã蟌ã¿ãŸãïŒ SPã¯ã¹ã¿ãã¯ã®æäžéšãæãã¬ãžã¹ã¿ã§ãïŒããã®åŸã0x00000004ã®å€ãèªã¿åããPCã«æžã蟌ã¿ãŸãïŒ PCã¯çŸåšã®åœä»€+ 4ãã€ãïŒã ãããã£ãŠãäžéšã®ãŠãŒã¶ãŒã³ãŒãã®å®è¡ãéå§ãããŸãããæ¢ã«ã¡ã¢ãªã®ã©ãããæãã¹ã¿ãã¯ïŒã€ãŸããCããã°ã©ã ãå®è¡ããããã®ãã¹ãŠã®æ¡ä»¶ïŒããããŸãã
ãã¹ãæŒç¿ãšããŠãLEDãç¹æ» ãããŸãã mbedã«ã¯4ã€ãããLPC1114ïŒä»¥äžãããŒãããšåŒã³ãŸãïŒã䜿çšããåè·¯ã§ã¯ãLEDãæåã§åãä»ããŸãã
ã³ãŒããçŽæ¥èšè¿°ããåã«ããã1ã€ãã€ãŸããã¡ã¢ãªã®ã©ãã«äœãé 眮ããå¿ èŠãããããèŠã€ããå¿ èŠããããŸãã ããçš®ã®ãæšæºãOSã䜿çšããŠããªããããã³ã³ãã€ã©ïŒãŸãã¯ããªã³ã«ïŒã¯ãã¹ã¿ãã¯ãå¿ èŠãªå Žæãã³ãŒãèªäœãããã³å Žæ-æãèŠã€ããããšãã§ããŸããã 幞ããªããšã«ãã³ã¢ã®Cortexãã¡ããªã«ã¯æšæºåãããã¡ã¢ãªã«ãŒããããããã®ã¢ãŒããã¯ãã£ã®ç°ãªãããã»ããµéã§ã¢ããªã±ãŒã·ã§ã³ãæ¯èŒçç°¡åã«ç§»æ€ã§ããŸãã ãã¡ãããåšèŸºæ©åšãšã®é£æºã¯ããã»ããµã«äŸåãããŸãŸã§ãã
Cortex-M0ã®ã¡ã¢ãªã«ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
ïŒ Cortexâ¢-M0ããã€ã¹ã®äžè¬ãŠãŒã¶ãŒã¬ã€ãããã®ç»åïŒ
Cortex-M3ã§ã¯ãåºæ¬çã«åãã§ãããå€å°è©³çŽ°ã«ãªããŸãã ããã§ã®åé¡ã¯ãNXPããã®åé¡ã«ã€ããŠç¬èªã®åå¥ã®èŠæ¹ãããŠãããããããã»ããµã®ããã¥ã¡ã³ãã§ã¡ã¢ãªã«ãŒãã確èªããããšã§ãã
ïŒ LPC111x / LPC11CxxãŠãŒã¶ãŒããã¥ã¢ã«ããã®ç»åïŒ
å®éãSRAMã¯0x10000000ããå§ãŸããŸãïŒ ãã®ãããããã€ãã®æšæºãä»ã®æšæºã¯ãããŸãããããã¥ã¡ã³ãããªã¥ãŒã ãã¹ã¯ããŒã«ããå¿ èŠããããŸãã
ãã®ç¥èãæŠåšã«ãã³ãŒããäœæããŸãã ãŸããå²ã蟌ã¿ããŒãã«ïŒ
.cpu cortex-m0 /* */ .thumb .word _stack_base /* , */ .word main /* Reset: */ .word hang /* NMI */ .word hang /* HardFault */ .word hang /* MemManage */ .word hang /* BusFault */ .word hang /* UsageFault */ .word _boot_checksum /* */ .word hang /* RESERVED */ .word hang /* RESERVED*/ .word hang /* RESERVED */ .word hang /* SVCall */ .word hang /* Debug Monitor */ .word hang /* RESERVED */ .word hang /* PendSV */ .word hang /* SysTick */ .word hang /* 0 */ /* ... */ /* 32 LPC1114 35 LPC1768, , */ .thumb_func hang: b . /* : */ .global hang
ãã®ããŒãã«ã
boot.s
ä¿åããŸãã ããã§ãå®éã«ã¯ãã¢ã»ã³ãã©ãŒæ¿å ¥ã¯1ã€ãããããŸãã-ãã³ã°é¢æ°ã¯ãããã»ããµãŒã®ç¡éã«ãŒããé 眮ããŸãã ãªã»ãããé€ããã¹ãŠã®å²ã蟌ã¿ã¯ãããæããŠãããããäžæž¬ã®äºæ ãçºçããå Žåãããã»ããµã¯åã«ãã³ã°ããç解ã§ããªãã³ãŒããå®è¡ããããšã¯ãããŸããã
ããŒãã«èªäœã¯ãã£ãšé·ãããå¿ èŠããããŸãããå®éã«ã¯Resetãã¯ã¿ãŒã®åŸã§ãçµäºã§ããŸããããã®äŸã§ã¯æ®ãã¯æ©èœããŸããã ãã ãã念ã®ãããããŒãã«ãã»ãŒå®å šã«åããŸããïŒãŠãŒã¶ãŒã®å²ã蟌ã¿ãé€ãïŒã
次ã«ãã¡ã€ã³é¢æ°ã®å®è£ ãèšè¿°ããŸãã
#if defined(__ARM_ARCH_6M__) /* Cortex-M0 ARMv6-M, LPC1114 */ #define GPIO_DIR_REG 0x50018000 /* GPIO1DIR GPIO 1 */ #define GPIO_REG_VAL 0x50013FFC /* GPIO1DATA GPIO 1 */ #define GPIO_PIN_NO (1<<8) /* 8- 8- */ #elif defined(__ARM_ARCH_7M__) /* LPC1768 */ #define GPIO_DIR_REG 0x2009C020 /* FIO1DIR GPIO 1 */ #define GPIO_REG_VAL 0x2009C034 /* FIO1PIN GPIO 1 */ #define GPIO_PIN_NO (1<<18) /* 18- 18- */ #else #error Unknown architecture #endif void wait() { volatile int i=0x20000; while(i>0) { --i; } } void main() { *((volatile unsigned int *)GPIO_DIR_REG) = GPIO_PIN_NO; while(1) { *((volatile unsigned int *)GPIO_REG_VAL) = GPIO_PIN_NO; wait(); *((volatile unsigned int *)GPIO_REG_VAL) = 0; wait(); } /* main() ** ! */ }
mbedã§ã¯ãæåã®LEDã¯GPIO 1.18ããŒãã«æ¥ç¶ãããããŒãäžã§LEDãGPIO 1.8ã«æ¥ç¶ããŸããã åããã³ã¯ç°ãªãæ©èœãå®è¡ã§ããŸãããããã¯ããã©ã«ãã§GPIOïŒæ±çšI / O-æ±çšI / Oã©ã€ã³ïŒãšåæ§ã«æ©èœããŸãã
LPC-shy Userããã¥ã¢ã«ïŒ 1æç®ãš2æç® ïŒãæå ã«çœ®ããŠããã°ãã³ãŒãã¯æ¯èŒçç°¡åã§ãã ãŸããGPIO_DIR_REGã¬ãžã¹ã¿ãä»ããŠGPIOã®åäœã¢ãŒãã瀺ããŸãïŒããã»ããµã§ã¯ç°ãªãå Žæã«ãããå®éãLPC1768ã¯GPIOã§ããå¹ççã«åäœã§ããŸãïŒã1ã¯åºåã0ã¯å ¥åã§ãã 次ã«ãå€0ãš1ïŒãããã0 Vãš3.3 VïŒã亀äºã«ããŒãã«æžã蟌ãç¡éãµã€ã¯ã«ãéå§ããŸãã
ãäžæåæ¢ãæ©èœã¯ãæ¯èŒçé·ããµã€ã¯ã«ãã¹ã¯ããŒã«ããã ãã§ã©ã³ãã ã«æ©èœããŸãïŒ
volatile int
ã¯ãã³ã³ãã€ã©ããã®ãµã€ã¯ã«å šäœãæé©åããã®ãé²ããŸãïŒã
æåŸã«ãããããã¹ãŠãæ£ãããŸãšããå¿ èŠããããŸãã
_stack_base = 0x10002000; _boot_checksum = 0 - (_stack_base + main + 1 + (hang + 1) * 5); MEMORY { rom(RX) : ORIGIN = 0x00000000, LENGTH = 0x8000 ram(WAIL) : ORIGIN = 0x10000000, LENGTH = 0x2000 } SECTIONS { .text : { *(.text*) } > rom .bss : { *(.bss*) } > ram }
ãªã³ã«ã¹ã¯ãªããã¯ããã©ãã·ã¥ã®å ŽæãRAMã®å Žæããããã®ãµã€ãºã説æããŠããŸãïŒLPC1768ã®ãµã€ãºãæãå€ãããã幞ããªããšã«ãã·ããã¯åäžã§ãïŒã ã¡ã¢ãªã«ãŒãã決å®ããåŸãã³ããŒããã»ã°ã¡ã³ãã.textïŒããã°ã©ã ã³ãŒãïŒããã©ãã·ã¥ã«å ¥ãã.bssïŒãŸã ãªãéçå€æ°ïŒ-ã¡ã¢ãªã«ããã»ã°ã¡ã³ãã瀺ããŸãã ããã«ãboot.sã§äœ¿çšããã2ã€ã®æåãæå®ããŸãã_stack_base-ã¹ã¿ãã¯ã®ãããã瀺ãã_boot_checksumïŒèª¬æã®ããZuyã«æè¬ããŸãïŒïŒ-ããŒãããŒããŒcxumãæžã蟌ã¿ãŸãã ãã§ãã¯ãµã ã¯ã次ã®åŒã§èšç®ãããŸãïŒäžèšã®ãã£ãŒã«ãã®åèšïŒã€ãŸããã¹ã¿ãã¯ã®ã¢ãã¬ã¹ãããã³ãã§ãã¯ãµã èªäœãžã®ãã¹ãŠã®å²ã蟌ã¿ïŒããã®è¿œå ã³ãŒãïŒ2ã®è£æ°ïŒã ãã¡ãŒã ãŠã§ã¢ã®ãŠãŒãã£ãªãã£ïŒä»¥äžãåç §ïŒèªäœããã§ãã¯ããã¯ã¹ãæ£ãããã®ã«ä¿®æ£ããŸãããã¢ããªã±ãŒã·ã§ã³èªäœããã³ãŒãããã©ãã·ã¥ããå Žåãå床ããŒãããããšã¯ã§ããŸããã
ããã§ãboot.sãmain.cãmem.ldã®3ã€ã®ãã¡ã€ã«ãã§ããŸããããã¹ãŠãã³ã³ãã€ã«ããŠãæåŸã«å®è¡ããŸãã GCCãããŒã«ãã§ãŒã³ãšããŠäœ¿çšããŸããããããããLLVMã§ãåãããšãè¡ãæ¹æ³ã瀺ããŸãã OS XãŠãŒã¶ãŒã®å Žåã LinaroããããŒã«ãã§ãŒã³ãååŸããããšããå§ãããŸã-ãªã¹ãã®æåŸã«ãããã¢ã¡ã¿ã« GCC ARM Embeddedã ä»ã®OSã®ãŠãŒã¶ãŒã®å Žåã¯ãããŒã«ãã§ãŒã³ã䜿çšããããšããå§ãããŸã:-)ïŒgentushnikãcrossdevãä¿åããŠGCCãã³ã³ãã€ã«ããæ¹ãç°¡åã§ãªãéãïŒã
arm-none-eabi-as boot.s -o boot.o arm-none-eabi-gcc -O2 -nostdlib -nostartfiles -ffreestanding -Wall -mthumb -mcpu=cortex-m0 -c main.c -o main-c0.o arm-none-eabi-gcc -O2 -nostdlib -nostartfiles -ffreestanding -Wall -mthumb -mcpu=cortex-m3 -c main.c -o main-c3.o arm-none-eabi-ld -o blink-c0.elf -T mem.ld boot.o main-c0.o arm-none-eabi-ld -o blink-c3.elf -T mem.ld boot.o main-c3.o arm-none-eabi-objdump -D blink-c0.elf > blink-c0.lst arm-none-eabi-objdump -D blink-c3.elf > blink-c3.lst arm-none-eabi-objcopy blink-c0.elf blink-c0.bin -O binary arm-none-eabi-objcopy blink-c3.elf blink-c3.bin -O binary
ããã§èå³æ·±ãç¹ã¯ãGCCã®ãã¹ãŠã®æšæºã©ã€ãã©ãªã®äœ¿çšãç¡å¹ã«ããããšã§ãã 確ãã«ãæçµçãªãã€ããªã«å°éãããã¹ãŠã®ã³ãŒãã¯ãç§ãã¡èªèº«ãæžããã³ãŒãã§ãã
質åïŒå²ã蟌ã¿ããŒãã«ãé 眮ããå Žæããªã³ã«ãŒã¯ã©ã®ããã«ç¥ãã®ã§ããïŒ ãããŠåœŒã¯ç¥ããªããããã¯ããã«æžãããŠããªã:-)ã ãŒãã¢ãã¬ã¹ããå§ãŸãè¡ã«ãªã³ã¯ããŠããã ããªã®ã§ããã¡ã€ã«ã®é åºïŒboot.oã次ã«main-c0.oïŒã¯éåžžã«éèŠã§ãïŒ å¥ã®æ¹æ³ã§ãªã³ã¯ããããboot.oã2åãªã³ã¯ããŠãlstãã¡ã€ã«ã®åºåãæ¯èŒããŠãã ããã
æçµãªã¹ãïŒlstãã¡ã€ã«ïŒã確èªãããããã€ããªãéã¢ã»ã³ãã©ãŒã«ããããããããšããå§ãããŸãã ARM UALã話ããªããŠããå°ãªããšãå²ã蟌ã¿ããŒãã«ãèšå®ãããŠããããšãèŠèŠçã«ç¢ºèªã§ããŸãã
ãŸããé¢çœãç¬éã«æ³šæãæãããšãã§ããŸã-Cortex-M3ã§ã³ã³ãã€ã«ãããšããGCCã¯Cortex-M0ã§ã®ããŒãžã§ã³ãããwaitïŒïŒé¢æ°ãçæããŸãã 確ãã«ãæé©åãæå¹ã«ãããšãé è³ãæŽããŸãã
ç¹æ» ïŒ
ããšã¯ããã¹ããã©ãããã©ãŒã ã«ãã€ããªãã¢ããããŒãããã ãã§ãã mbedã䜿çšãããšããã¹ãŠãå¯èœãªéãç°¡åã«ãªããŸã
blink-c3.bin
ãä»®æ³ãã©ãã·ã¥ãã©ã€ãã«ã³ããŒãããªã»ãããæŒããŸãïŒmbedã§ïŒã ããŒãã§ã¯ããã¹ãŠãå°ãè€éã§ãã ãŸããããŒãããŒããŒã«å ¥ãããã«ãGNDãšGPIO 0.1ã®éã«æµæãå¿ èŠã§ãã 第äºã«ãçŽæ¥ãã¡ãŒã ãŠã§ã¢çšã®ããã°ã©ã ãå¿ èŠã§ãã Flash Magic ïŒWinãOS XïŒã䜿çšã§ããã³ã³ãœãŒã«ãŠãŒãã£ãªãã£-lpc21ispã䜿çšã§ããŸãã
lpc21isp.out -verify -bin /path/to/blink-c0.bin /dev/ftdi/tty/device 115200 12000
ãã¡ãŒã ãŠã§ã¢ããã»ã¹ã¯æ¬¡ã®ãšããã§ãã
- j5ãšj7ã®éã«æµæãé 眮ããŸãïŒ10 kOhmã§ãå¯èœã§ãïŒã
- ãªã»ãããæŒããŸãã
- lpc21ispãéå§ããŸãã
- æµæåšãåãå€ããŸãã
- ãªã»ãããããäžåºŠæŒããŸã-ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
ç°ãªãããã€ã¹ã§ãµã³ãã«ãå®è¡ããæ©äŒãããå Žåããããã®ç¹æ» é床ã¯åãã§ã¯ãªãããšã«æ°ä»ãã§ãããã ããã¯ãããã€ã¹ããšã«ã³ã¢åšæ³¢æ°ãç°ãªããããç°ãªãæéã«
wait()
ãå®è¡ããããã§ãã 次ã®ããŒãã§ã¯ãæ¯åã®åé¡ããã詳现ã«ç 究ããæ確ãªã«ãŠã³ãããŠã³ãè¡ããŸãã
PSããã¹ãå ã®ãšã©ãŒãä¿®æ£ããããã«æéãå²ããŠãã ãã£ãpfactum habrayuzerã«æè¬ããŸã:-)ã
ARMããŒã¹ã®ãã¹ããã©ãããã©ãŒã ããæã¡ã®æ¹ãžã®PPSãªã¯ãšã¹ã-ã³ã¡ã³ãã«èšå ¥ããŠãã ãã-ã©ã®1ã€ã ãããªãèšäºã«ã€ããŠã¯ãããŒããŠã§ã¢ããŒã¹ã確èªã§ããŸãã