ããã«ã¡ã¯/倿¹/å€/æïŒ ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«é¢ããå®éšã³ãŒã¹ã1ã€ãããŸãã 圌ã¯ã¹ã¿ã³ãã©ãŒã倧åŠã«ããŸãã ãã ããäžéšã®è³æã¯èª°ã§ãå©çšã§ããŸãã ã¹ã©ã€ãã«å ããŠãå®è·µçãªæŒç¿ã®å®å
šãªèª¬æãå©çšå¯èœã§ãã
ãã®ã³ãŒã¹ã¯ä»ã®ã³ãŒã¹ãšã©ãéããŸããïŒ ã»ãšãã©ã®ã³ãŒãã¯ç¬ç«ããŠèšè¿°ãããéåžžã«çŸå®çãªææ°ã®ããŒããŠã§ã¢ã§å®è¡ãããŸãã Raspberry Pi 3ã¢ãã«Bãã¿ãŒã²ãããã©ãããã©ãŒã ãšããŠéžæãããŸããã ã€ãŸã ããªãææ°ã®ã¢ãŒããã¯ãã£AArch64ã ARMv8 Cortex-A53ã4ã³ã¢ã64ããããããã ãã§ãã Rustã¯äž»èŠãªããã°ã©ãã³ã°èšèªãšããŠéžæãããŠããŸãã GCã䜿çšããªããªã©ãå®å
šã§é«éã§ãã Rustã¯ã³ãŒã¹äžã«åŠç¿ããããšã«ãªã£ãŠããŸãã
ãã£ã¹ã¯ããã¡ã€ã«ã·ã¹ãã ãI / Oãã¹ã¬ãã/ããã»ã¹ãã¹ã±ãžã¥ãŒãªã³ã°ãä»®æ³ã¡ã¢ãªãä¿è·ãšã»ãã¥ãªãã£ãå²ã蟌ã¿ãåæå®è¡æ§ãšåæã«ã€ããŠã§ãã ä»ã®èªå°å¿ã®ããã³ãŒã¹ã®ããã«ã çŽ æã®é¢é£æ§ãšç·Žç¿ã®éã®éãã Codditã¯ããããããã§ãããã
翻蚳è
ã®ã¡ã¢
æåéãã®ç¿»èš³ãèŠãããªããããã§ã¯ãªãã§ãããã 代ããã«ãããã¹ããæçšã§çè§£ãããããã®ã«ããããšããŸãã ããšãã°ãã¹ã¿ã³ãã©ãŒã倧åŠã®åŠçã«ã®ã¿é¢é£ããå Žæã§ã¯ãä»ã®äººã«åœ¹ç«ã€æ
å ±ãæçš¿ããŸãã å°ãã¹ã©ã³ã°ããããå
ã®ã€ã©ã¹ããšã¯å°ãç¡é¢ä¿ã§ãå°æ°ã®è¿œå ã³ã¡ã³ãããããããããŸããã èªã¿ãããããããã«ãæç€ºçãªTranslatorâ¢Notesã¯ãããŸããã ããã¹ãã¯ãèžè¡çãªç¿»èš³ãŸãã¯åæ©ã«åºã¥ãèšäºãšèŠãªãããšãã§ããŸãã ç§ã¯æº¶æ¥æ©ã§ã¯ãããŸãã-æ°åã害ããããšã¯ãããŸããã
ãã®ã³ãŒã¹ã«ã€ããŠã©ããã£ãŠç¥ããŸãããïŒ èª°ããHacker Newsãžã®ãªã³ã¯ãæçš¿ããŸããã ç§ã¯èª€ã£ãŠèŠããšæã¿èŸŒãã ã ã³ãŒã¹ææãèªåã§çªããŠãæçµçã«ãã®åé¡ã翻蚳ããããšã«ããŸããã
埩ç¿
ãã®ããŒãã§ã¯ãã©ãºããªãŒãšå¿
èŠãªããŒã«ãã»ããã¢ããããŸãã ãã®çµæãã©ãºããªãŒã®ç¹æ»
LEDãã§ããŸãã 4ã€ã®äž»èŠãªæ®µéããããŸãã ãŸããPiãšã³ã³ãã¥ãŒã¿ãŒã®æ¥ç¶ãããèªäœã§æ©èœããããšã確èªããå¿
èŠããããŸãã äºåã«æºåãããããã°ã©ã ãå®è¡ããŸãã 第2段éã§ã¯ãLEDã®æ¥ç¶æ¹æ³ãçè§£ããŸãã ãã¬ããããŒããšé
ç·ã«ã€ããŠã ç¬¬äžæ®µéã§åéããŸã ããã㪠ã³ãŒããäœæããPiã§å®è¡ããŸãã aarch64-none-elf
ã¯ãã¹ã³ã³ãã€ã©ãã€ã³ã¹ããŒã«ããŠè©ŠããŠãã ããã ãããŠã第4段éã§ããã®ãã¹ãŠãRustã§æžãæããŸãã
ããã€ãã®äŸ¿å©ãªãªã³ã¯ïŒ
ãã§ãŒãº0ïŒã¯ããã«
ã³ãŒã¹ãå®äºããåã«ãUnixã®ãããªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãçŽæ¥äœ¿çšããå¿
èŠããããŸãã git
ã wget
ã tar
ã screen
ãããã³make
ã€ã³ã¹ããŒã«ãããLinuxãBSDããŸãã¯macOSã«ããããšãã§ããŸãã çè«çã«ã¯ãLinuxãµãã·ã¹ãã ãåããWindows 10ã§åäœããŸããã誰ã確èªããŠããŸããã å°ãªããšããã®æ§æã¯ãµããŒããããŠããŸããã ã€ãŸã ã¯ã€ã³ããŒçšã®æ¢è£œã®ã¬ã·ãã¯ãããŸãããUbuntuLSTãŸãã¯Fedoraãã€ã³ã¹ããŒã«ããããšããå§ãããŸãã
éããå¿
èŠãªãã®ïŒ
- Raspberry Pi 3ã¢ãã«BïŒBCM2837ã«å¿
èŠïŒ
- ãã¬ããããŒãããããã¿ã€ãã³ã°ããŒãã§ããããŸã
- microSDã«ãŒãïŒãã©ã¹ã¢ããã¿ãŒ/ã¢ããã¿ãŒïŒ
- USB-UARTã¢ããã¿ãŒïŒCP2102 USB TTLïŒ
- 10åã®ãã«ãã«ã©ãŒLED
- 100ãªãŒã ãš1 kOhmã®æµæããããã4
- é
ç·
redditã«é¢ããè°è«ã§ã¯ãAmazonã«å¿
èŠãªãªã³ã¯ããããŸã ã ãã ãããããã¯ãã¹ãŠä»ã®åºèã§è³Œå
¥ã§ããŸãã ãªãã©ã€ã³ãå«ãã ããã«å ããŠã奜ã¿ã«åãããŠã³ã³ããŒãã³ãã远å 賌å
¥ã§ããŸãã
泚æ ïŒã©ãºããªãŒã¯é黿°ã«ææã§ãã çŽ æã§ã³ã³ã¿ã¯ãã«è§Šããªãããã«ããŠãã ããã ããªãã¯æé»ã§æ®ºãããããšã¯ãªããå·ã€ããããããšãããããŸããããã©ãºããªãŒèªäœã¯å
šãç¡ååããããšãã§ããŸãã èªåãæ¥å°ããŸãã
ããããã¹ãŠå©çšå¯èœã«ãªã£ãããã¿ã¹ã¯ã³ãŒããå®è¡ã§ããŸãã
git clone https://web.stanford.edu/class/cs140e/assignments/0-blinky/skeleton.git 0-blinky cd assignment0 make fetch
å
容ãèªåã§èªç±ã«æ¢çŽ¢ããŠãã ããã
ãã§ãŒãº1ïŒã©ãºããªãŒã®èª¿ç

æåã«è¡ãå¿
èŠãããã®ã¯ãCP2102ã¢ããã¿ãŒã®æ§æã§ãã ã³ã³ãã¥ãŒã¿ãŒãšPiã®éã®éä¿¡ã«å¿
èŠã§ãã ããã«å ããŠãã©ãºããªãŒã¯ãããéããŠéèŠãª5ãã«ããåãåããŸãã USBã®çåŽãä»ã®5ã€ã®éšåãã·ã§ãŒã«ã®äžå€®ã
ãã©ã€ããŒã®ã»ããã¢ãã
Linuxã§ã¯ããã¹ãŠãããã«åäœããã¯ãã§ãã ãããŒã§ã¯ããã©ã€ããŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ãã®ã¢ãŒã«ã€ããããŠã³ããŒãããŠè§£åããŸãã SiLabsUSBDriverDisk.dmg
ãèµ·åããã©ã€ã»ã³ã¹ã«åºã¥ãéã®è²©å£²ãã€ã³ãã«åæããŸãã ãã®åŸãããŠã³ããããããªã¥ãŒã ã§ã Silicon Labs VPC Driver.pkg
å®è¡ããŸãã ã€ã³ã¹ããŒã«ããŠåèµ·åããŸãã
CP2102ã空ãUSBã¹ãããã«æ¥ç¶ããŠã¿ãŠãã ããã ãã¹ãŠãæ©èœããå Žåãé©åãªãã¡ã€ã«ã/dev
衚瀺ãããŸãã ãããŒ/dev/tty.SLAB_USBtoUART
å Žåã Linuxã®å Žåã /dev/ttyUSB0
ãããªãã®ã ãããæžãçããŠãã ãã-䟿å©ã«ãªããŸãã ã¢ããã¿ãåãåºããŸãã
ã©ãºããªãŒãã€ãªã
次ã«ãRaspberry PiãCP2102ã«æ¥ç¶ããŸãã ã³ãã¯ã¿ã®äžèŽè¡šã¯æ¬¡ã®ãšããã§ãã
CP2102ã³ãã¯ã¿ | Raspberry Piã³ãã¯ã¿ |
---|
+ 5v | 4 |
GND | 6 |
Rxd | 8 |
Txd | 10 |
ã©ãºããªãŒã®ãã³ã®çªå·ä»ãïŒãŸã ã€ã³ã¿ã©ã¯ãã£ããªããŒãžã§ã³ããããŸãïŒïŒ

äžç·ã«ãã¹ãŠããã®ããã«ãªããŸãïŒã¯ã€ã€ã®è²ã¯ä»»æã«éžæã§ããŸãïŒïŒ


éèŠ ïŒããããã¹ãŠã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããåã«ãæ¥ç¶ã確èªããŠå確èªããŠãã ããã çŠãããžã£ã ã§ã¯ãªããæ°é®®ãªã©ãºããªãŒãå¿
èŠã§ãã
ã©ãºããªãŒãšã¢ããã¿ãŒã®æ£ãããã¢ãªã³ã°ã«èªä¿¡ãããå Žåã¯ãCP2102ãã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ã§ããŸãã
æã¡äžã
Raspberry Piã¯ã黿ºæå
¥æã«microSDã«ãŒãããããã°ã©ã ãããŒãããŸãã ä»ãç§ãã¡ã¯ããã調çããæ¹æ³ãèŠã€ããŸãã
ãŸããã¯ããŒã³ãªããžããªããmicroSD-shkuã«ãã¡ã€ã«ãããããããå¿
èŠããããŸãã ã€ãŸãã files/firmware
ãã©ã«ãã«ãããã®ã ã€ãŸã bootcode.bin
ã config.txt
ããã³start.elf
ãããããã©ãã·ã¥ã«ãŒãã®ã«ãŒãã«ã³ããŒããŸãã ã¯ããŒã³ãªããžããªã«ãããã®ãã¡ã€ã«ãçªç¶ãªãå Žåã¯ã make fetch
ãå¿ããŠããŸããã
ãªãbootcode.bin
ã config.txt
ãããã³start.elf
ãå¿
èŠãªã®ã§ããïŒ
ããããã¹ãŠã®ã©ãºããªãŒããŒãããŒããŒã§ãã bootcode.bin
ã¯æåã®ããŒãããŒããŒã§ãã ãã®ã¿ã¹ã¯ã¯start.elf
ãããŒãããããšstart.elf
ã config.txt
ãã¡ã€ã«ã®å
容ã«åŸã£ãŠããã»ããµãæ§æããŸãã ãã®åŸã kernel8.img
ãããŒãããå¶åŸ¡ã転éããŸãã ãšããã§ã圌ã¯ã©ãã«ããã®ïŒ
files/activity-led-blink.bin
ããªããžããªãããã©ãã·ã¥ã«ãŒãã®ã«ãŒãã«ã³ããŒãããã®ãã¡ã€ã«ã«kernel8.img
ãšããååãkernel8.img
ãŸãã ã«ãŒããã¢ã³ããŠã³ãããŠåŒãåºããŸãã ã©ãºããªãŒããªãã«ãªã£ãŠããããšã確èªããŠãã ããã æ¬¡ã«ãã«ãŒããã©ãºããªãŒã«æ¿å
¥ããã©ãºããªãŒãé£ç©ã«æ¥ç¶ããŸãã ã©ãºããªãŒãšCP2102ã¢ããã¿ã®LEDãç¹æ»
ããŠããã¯ãã§ãã åŸè
ã®ç¹æ»
ã¯ãããŒã¿ãããã«è»¢éãããŠããããšãæå³ããŸãã
ããŒã¿ïŒ ã©ã®ãããªããŒã¿ã§ããïŒ ãããã確èªããã«ã¯ãã·ãªã¢ã«ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ãŒãCP2102ã«æ¥ç¶ããããã§äœãèµ·ããããèªãå¿
èŠããããŸãã LinuxãšmacOSã®äž¡æ¹ã«ã€ã³ã¹ããŒã«ãããŠããããã screenã䜿çšããŸã ã /dev
ãã©ã«ããŒã®ããã€ã¹ãã¹ãèŠããŠå®è¡ããŸã
screen /dev/<> 115200
Linuxã§ã¯ã sudo
ã䜿çšããŠãã®ã³ãã³ããå®è¡ããå¿
èŠãããå ŽåããããŸãã ãã ãããŠãŒã¶ãŒãdialout
ã°ã«ãŒãã«è¿œå ããŠããã®sudo
ã³ãã³ãã®åã«çµ¶ããæžã蟌ãããšã¯ã§ããŸããã
sudo gpasswd --add <-> dialout
ãããã«ããŠããã©ãºããªãŒããã®æšæ¶ã衚瀺ãããã¯ãã§ãã screen
ãçµäºããã«ã¯ã <ctrl-a> k
æŒããŠãããçµäºã®ææ¡ã«å¯ŸããŠy
ãšçããŸãã
ãã§ãŒãº2ïŒLEDã®ç¹æ»
ãã®æ®µéã§ãã©ãºããªãŒã®GPIOïŒç©çæ¥ç¹No. 36ïŒã®16çªç®ã®ãã³ããã¬ããããŒãã®LEDã«æ¥ç¶ããŸãã ãã¡ãŒã ãŠã§ã¢ã§äºåã«æºåããããã€ããªã䜿çšããŠããã®åäœã確èªããŸãããã ã©ãºããªãŒããªãã«ãªã£ãŠããããšã確èªããŠãã ããã
GPIOïŒæ±çšI / O
ååã瀺ãããã«ãGPIOã¯é»æ°æ¥ç¹ãä»ããŠä»»æã®2ã€ã®ããã€ã¹éã§ããŒã¿/ä¿¡å·ã転éããããã®äžè¬çãªã¡ã«ããºã ã§ãã
ã©ãºããªãŒè²ã®GPIOãã³ã¯ã å
¥åãŸãã¯åºåãšããŠæ©èœããŸã ã æ¥ç¹ãåºåã®å Žåããªã³ãŸãã¯ãªãã«ã§ããŸãã æ¥ç¹ããªã³ã«ãããšã3.3ãã«ããåãããšãã§ããŸãã ã·ã£ããããŠã³ãšã¯ããã®æ¥ç¹ã«é»æµãæµããªãããšãæå³ããŸãã GPIOãã³ãå
¥åã®å ŽåãMalinkaã¯3.3ãã«ãããããã©ããã確èªããŸãã
ãããã®é£çµ¡å
ã¯ä¿¡ããããªãã»ã©æ¯ãã®ãã»ã©æ®éçã§ãããããŸããŸãªæ©èœãå¹
åºãå®è£
ããããã«äœ¿çšã§ããŸãã 詳现ã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã ããã¥ã¡ã³ãã¯æ·»ä»ãããŠããŸããã ã³ãŒã¹äžã«èªãããšãã§ããæã«ã¯å¿
èŠã§ãã
LEDæ¥ç¶ã
ãã®ãããªå³ãäœæããããšããå§ããŸãããã

ãã¬ããããŒãã¢ãã«ã䜿çšããããšããªãå Žåã¯ããã®ã¬ã€ããèªãïŒãŸãã¯å°ãªããšãåçãèŠãïŒããšããå§ãããŸãã ãã®åè·¯ã§ã¯ãLEDã3.3ãã«ãã®æ¥ç¹ïŒãã³çªå·1ïŒãšãŒãé»äœã®æ¥ç¹ïŒçªå·14ïŒã«æ¥ç¶ããŸãã LEDã®æ£ããæ¥ç¶ã«æ³šæããŠãã ããã ããçãã¬ãã°ã¯æµæãä»ããŠãã³14ã«æ¥ç¶ããå¿
èŠããããŸãïŒãŒãé»äœããŸãã¯å¥ã®æ¹æ³ã§ã®æ¥å°ïŒã ãã®åŸãã©ãºããªãŒã黿ºã«æ¥ç¶ã§ããŸãã LEDãç¹ç¯ããŸãïŒãã¹ãŠãæ£ããæ¥ç¶ãããŠããå ŽåïŒã LEDãã²ã£ããè¿ããšãç¹ç¯ããªããªããŸãã çµå±ã®ãšããã圌ã¯åœŒã®å人ã®ãããããšåããã€ãªãŒãã§ãã
ãã¹ãŠãåäžã«ç¹ç¯ããŠããLEDã§æ©èœããå Žåãç¹æ»
ãããããšãã§ããŸãã é£ã¹ç©ããã©ãºããªãŒãåãèœãšããŸãã æ¬¡ã®ããã«ããã³1ãããã³36ïŒGPIO 16ïŒã«LEDã忥ç¶ããŸãã

ã¡ã¢ãªã«ãŒããåã³åãåºããŸãã åãååã®å€ãkernel8.img
ãªãã kernel8.img
ãšããååfiles/gpio16-blink.bin
ãã³ããŒãfiles/gpio16-blink.bin
ã ã«ãŒããæ»ããã©ãºããªãŒã黿ºã«æ¥ç¶ããŸãã ããã§ãLEDãå¶åŸ¡äžèœã«ç¹æ»
ããã¯ãã§ãã
ãã§ãŒãº3ïŒããããC
ä»åã¯ã gpio16-blink.bin
ãšåãããšãè¡ãprogããã°ã©ã ãgpio16-blink.bin
ãŸãã raspberryã®ã¡ãã£ãšãããã€ããã³ã³ãã€ã«ã§ããããã«ããã«ã¯ã aarch64-none-elf
ã¯ãã¹ã³ã³ãã€ã©ãå¿
èŠã§ãã
ã¯ãã¹ã³ã³ãã€ã©ã®ã€ã³ã¹ããŒã«
aarch64-none-elf
ã¢ãŒããã¯ãã£ïŒgccã³ã³ãã€ã©ãšobjcopyã®ãããªäŒç€ŸïŒã®GNUããŒã«ãã§ãŒã³ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
macOSã®äžã§
ãŸãã homebrewããã±ãŒãžãããŒãžã£ãŒãã€ã³ã¹ããŒã«ããŸãã ãã§ã«ã€ã³ã¹ããŒã«ãããŠããå Žåããã®éšåã¯ã¹ãããã§ããŸãã
- ã³ãã³ãã©ã€ã³çšã®XcodeããŒã«ãã€ã³ã¹ããŒã«ããŸãã ãã€ã¢ãã°ããã¯ã¹ã衚瀺ãããŸãã 衚瀺ãããã-[ã€ã³ã¹ããŒã«]ã[ç¶è¡]ããŸãã¯éåžžããã«ãããã®ãã¯ãªãã¯ããŸãã
xcode-select
- Homebrewã€ã³ã¹ããŒã«ã¹ã¯ãªãããå®è¡ããŸãã ã€ã³ã¹ããŒã«ããã»ã¹ã®æ®ãã®æé ã説æããŸãã
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
ããã§ãhomebrewã䜿çšããŠaarch64-none-elfããŒã«ãã§ãŒã³ãã€ã³ã¹ããŒã«ããŸãã
brew tap SergioBenitez/osxct brew install aarch64-none-elf
ãã¹ãŠãæ£ããã€ã³ã¹ããŒã«ãããŠãããã©ããã確èªããŸãã
$ aarch64-none-elf-gcc --version aarch64-none-elf-gcc (GCC) 7.2.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Linuxã®äžã§
- aarch64-none-elf-linux-x64.tar.gzãããŠã³ããŒãããŠè§£åããŸãã ãã®åŸã
arch64-none-elf
ã/usr/local/bin
ãŸãã
wget https://web.stanford.edu/class/cs140e/files/aarch64-none-elf-linux-x64.tar.gz tar -xzvf aarch64-none-elf-linux-x64.tar.gz sudo mv aarch64-none-elf /usr/local/bin
/usr/local/bin/aarch64-none-elf/bin
ãPATHç°å¢å€æ°ã«è¿œå ããŸãã æ£ç¢ºã«ã¯-ç¹å®ã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã«äŸåããŸãã ã»ãšãã©ã®å Žåã以äžã~/.profile
远å ããå¿
èŠããããŸãã
PATH="/usr/local/bin/aarch64-none-elf/bin:$PATH"
- ãã¹ãŠãæ£åžžãã©ããã確èªããŸãã ãã®çµæãgccããŒãžã§ã³ãšãã®ä»ãã¹ãŠãååŸããå¿
èŠããããŸãã
aarch64-none-elf-gcc
ãã®ãããªèŠæãçããå Žåã¯ããœãŒã¹ããèªåã§ã³ã³ãã€ã«ã§ããŸãã 詳现ã¯ãã¡ã ã
ä»ãéã«ã€ããŠå°ã
ææ°ã®ããŒããŠã§ã¢ããã€ã¹ã®å€§éšåãšãœãããŠã§ã¢ãšã®çžäºäœçšã¯ããããã¡ã¢ãªããããI / Oã¡ã¢ãªã«ãããã³ã°ããããšã«ãã£ãŠå®è¡ãããŸãã èŠããã«ããŸãã§ã¡ã¢ãªã®ç¹å®ã®éšåã§ãããã®ããã«ããã€ã¹ãšéä¿¡ã§ããŸãã åæã«ãã¡ã¢ãªå
ã®ç¹å®ã®ã¢ãã¬ã¹ãèªã¿æžãããéã«äœãèµ·ãããã«ã€ããŠã®ä»æ§ãæäŸãããŸãã ã¢ãã¬ã¹ã¯éåžžãã¬ãžã¹ã¿ãšåŒã°ãã32ããããŸãã¯64ãããã®æçã«åå²ãããŸãã ã¬ãžã¹ã¿ã¯ãèªã¿åãå°çšãæžã蟌ã¿ããŸãã¯ãã®äž¡æ¹ã«ããããšãã§ããŸãã
ã©ã®ã¬ãžã¹ã¿ãŒã䜿çšãããªã䜿çšããã®ãããããŠããããã¡ã¢ãªãŒå
ã®ã©ãã«ããã®ããã©ã®ããã«ããŠç¥ãã®ã§ãã ããŸããŸãªããã€ã¹ã®ã¡ãŒã«ãŒãããããã®åãããã€ã¹ã®ããã¥ã¡ã³ããäœæããŠããŸãã éåžžããããã¯ããŒã¿ã·ãŒãïŒããŒã¿ã·ãŒãïŒãããã¥ã¢ã«ïŒããã€ã¹ããã¥ã¢ã«ïŒããŸãã¯åã«ããã¥ã¡ã³ããšåŒã°ããŸãã ããã€ã¹ãææžåããããã®äžè¬çãªäžè¬çãªåœ¢åŒã¯ãããŸããã ããã¥ã¡ã³ããäžååãªå ŽåãããŸã£ãããªãå ŽåããããŸãã ããŒããŠã§ã¢ã®ããã¥ã¡ã³ããèªãã§çè§£ããèœåã¯ãéåžžã«æçšãªã¹ãã«ã§ãããããæå³ã§ã¯ã¢ãŒãã§ããããŸãã
ã€ã³ã¡ã¢ãªGPIO
Rasbperry Piã«æèŒãããŠããå€ãã®åšèŸºæ©åšã®ããã¥ã¡ã³ãã¯ã BCM2837 ARM Peripherals Manualã«ãããŸãã GPIOã«ã€ããŠã¯ã89ããŒãžã§èªãããšãã§ããŸãã
ãããžãBCM2835ã«ã€ããŠã®åãå Žæã«ãããBCM2837ããããŸãã ããã¯æ£åžžã§ããïŒ
ããã¥ã¢ã«ãéããšãBCM2835ã®èšåãå€ãã®å Žæã§èŠãããšãã§ããŸãã ãã ãããã¬ã€ãããŠãããã€ãã®ãšã©ãŒãä¿®æ£ããŸããã ãŸããã¿ã€ãã«ã¯BCM2837ã«å€æŽãããŸããã BCM2837ãšBCM2835ã«ã¯ãã¡ã¢ãªå
ã«åãçžå¯Ÿã¢ãã¬ã¹ãæã€åãåšèŸºæ©åšããããŸãã ç©çã¡ã¢ãªã®å
šäœçãªæ§æã®äž»ãªéãã 0x3F000000
ãšã¯ç°ãªãã 0x20000000
ã®åšèŸºããã€ã¹ã®ããŒã¹ç©çã¢ãã¬ã¹ã¯0x3F000000ã§ãã ãã ããäž¡æ¹ã®ãããã¯ãããã®ã¢ãã¬ã¹ã0x7E000000
ãããã0x7E000000
ã ç°¡åã«èšããšãBCM2837ã§ã¯ããåšèŸºãã¢ãã¬ã¹0x7EXXXXXX
ã¯ç©çã¢ãã¬ã¹0x3FXXXXXX
é
眮ãããŸãã äžèšã®ããã¥ã¡ã³ãã¯ããããèæ
®ããŠä¿®æ£ãããŠããŸãã
ãã®ã¿ã¹ã¯ã§ã¯ã次ã®ã¬ãžã¹ã¿ã§ååã§ãã
å | äœæ | 説æ | ãµã€ãº | èªã¿åã/æžã蟌㿠|
---|
GPFSEL1 | 0x7E200004 | GPIOæ©èœéžæ1 | 32ããã | äž¡æ¹ |
GPSET0 | 0x7E20001C | GPIOãã³åºåã»ãã0 | 32ããã | èšé²ã®ã¿ |
Gpclr0 | 0x7E200028 | GPIOãã³åºåã¯ãªã¢0 | 32ããã | èšé²ã®ã¿ |
Taschettoã¯ã90ããŒãžã®ããã¥ã¡ã³ãããçŽæ¥ã³ããŒãããŸãã
次ã«ã91ããŒãžããã³92ããŒãžã®GPFSELn
ã¬ãžã¹ã¿ã®ããã¥ã¡ã³ãããèªã¿ãã ããããã®ã¬ãžã¹ã¿ã«æžã蟌ã¿ããã³ãåºåãŸãã¯å
¥åãšããŠèšå®ããŸãã GPIOã®åºåçªå·16ãåºåã«ãªãããã«æ§æããã«ã¯ã GPFSEL1
ã¬ãžã¹ã¿ã®åãã£ãŒã«ãã®å€ã¯äœã§ããïŒ
ããã§åã³95ããŒãžã®ããã¥ã¡ã³ããèªã¿ãŸãGPSET0
ããã³GPCLR0
ã«ã€ããŠã GPSET0
ã¬ãžã¹ã¿ã«æžã蟌ã¿ãé£çµ¡å
ãæå¹ã«ããŸãã ãããŠGPCLR0
ãªãã«ããŸãã ãã³16ããªã³/ãªãããã«ã¯ããããã®ã¬ãžã¹ã¿ã«ã©ã®å€ãæžã蟌ãå¿
èŠããããŸããïŒ
ã³ãŒãèšè¿°
phase3/
turnipãã£ã¬ã¯ããªã«ã¯ãã©ãºããªãŒã®ãã€ããªãã¡ã€ã«ããã«ãããããã®ã³ãŒãããããŸãã ä»ã®ãšããã crt0.S
ã layout.ld
ããã³Makefile
ãå¿
èŠãªçç±ã説æããã«è¡ããŸãã 代ããã«ã blinky.c
ã«æ³šç®ããŠblinky.c
ã ãã®äžã«ãå¿
èŠãª3ã€ã®ã¬ãžã¹ã¿ãã¹ãŠã®ã¢ãã¬ã¹ããã§ã«äžéšã«ç€ºãããŠããããšãããããŸãã ããã«ãæéé
å»¶ãäœæã§ãã颿°ãããã€ããããŸãã ã¿ã¹ã¯ã¯ãGPIOã®ãã³çªå·16ãåºåãšããŠèšå®ãããããã«main
æ©èœãè£ãããšã§ãããã®åŸããªã³ãšãªããåãæ¿ãããLEDãç¹æ»
ããŸãã
ã³ãŒãã®æºåãã§ãããããã¹ãããå¿
èŠããããŸãã éå§make
ã«ã¯ã phase3/
ãã£ã¬ã¯ããªã§make
ãå®è¡ãmake
ã³ã³ãã€ã«ããŸãã ãã¹ãŠãæ£åžžã§ãšã©ãŒããªãå Žåãblinky.bin blinky.bin
ãblinky.bin
ãŸãã ååãkernel8.img
ã«å€æŽããmicroSDã«ãŒãã«ã³ããŒããŠããã¹ãŠã©ãºããªãŒã§å®è¡ããŸãã æ¢ã«æ©èœããkernel8.img
ãããå Žåã¯ã次ã®ãã§ãŒãºã«é²ãããšãã§ããŸãã
ãã³ãïŒ
ãã³ã®èšå®/æå¹å/ç¡å¹åã¯ã1è¡ã®ã³ãŒãã§å®è£
ã§ããŸãã
æŒç®å<<
ã |
ã &
ããã³~
ã
æååã«ã¯16é²åœ¢åŒãš2é²åœ¢åŒã䜿çšã§ããŸãã 3 0b011
ãããã0x03
ãš0b011
ãããªãã®ã§ãã
ãã§ãŒãº4ïŒé
ä»åã¯ã gpio16-blink.bin
䌌ãããã°ã©ã ãäœæããŸããããã§ã«Rustã«ãããŸãã phase4/src/lib.rs
ã³ãŒããèšè¿°ããŸãã
RustãšXargoãã€ã³ã¹ããŒã«ãã
Rustã§ããã°ã©ã ãã³ã³ãã€ã«ããã«ã¯ããã®åãã³ã³ãã€ã©ãŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ããã«ã cargo
ããã±ãŒãžãããŒãžã£ãŒã«é¢é£ä»ããããã©ãããŒã§ããxargo
ãã€ã³ã¹ããŒã«ããŸãã Xargoã䜿çšãããšãRasbperry Piãªã©ã®ã³ãŒããã³ã³ãã€ã«ã§ããŸãã
- ã«è¡ããŸããã https://rustup.rs/ãããŠãæç€ºã«åŸã£ãŠ
rustup
ãã€ã³ã¹ããŒã«ãrustup
ã rustc --version
å®è¡ããŠãRustãæ£ããã€ã³ã¹ããŒã«ãããããšã確èªããŸãã - ããŠã
rustup
ãšcargo
ïŒæåŸã®æé ã§rustcã䜿çšããŠã€ã³ã¹ããŒã«ãããïŒã䜿çšããŠãRustãã€ãã¢ã»ã³ããªãã€ã³ã¹ããŒã«ããŸãã åæã«ãæšæºã©ã€ãã©ãªã®ãœãŒã¹ãã€ã³ã¹ããŒã«ããŸãã ãããŠxargo
ãã¡ããxargo
ã
rustup default nightly-2018-01-09 rustup component add rust-src cargo install xargo
- ã€ã³ã¹ããŒã«ãããã³ãã³ãããã§ãã¯ããããããã¹ãŠã®ããŒãžã§ã³ããããã«å¿
èŠãªãã®ã«å¯Ÿå¿ããŠããããšã確èªããŸãã
$ rustc --version rustc 1.25.0-nightly (b5392f545 2018-01-08) $ xargo --version xargo 0.3.10 cargo 0.25.0-nightly (a88fbace4 2017-12-29)
ããã§ãRustã³ã³ãã€ã©ãå®å
šã«åäœããããã«ãªããŸããã
ã³ãŒãèšè¿°
phase4/src/lib.rs
ã³ãŒããæžãã«ã¯ãå°ãªããšãæ¬¡ã®æ§æèŠçŽ ãç¥ã£ãŠããå¿
èŠãããphase4/src/lib.rs
ã
1ïŒ read_volatile()
ããã³write_volatile()
ã¡ãœããã䜿çšããŠããã¢ãã€ã³ã¿ãŒã®èåŸã«ãããã®ïŒ *mut T
ïŒã®èªã¿åããšæžã蟌ã¿ãè¡ãããšãã§ããŸãã ããšãã°ãããã宣èšããŸããïŒ
const A: *mut u32 = 0x12 as *mut u32; const B: *mut u32 = 0x34 as *mut u32;
ã¢ãã¬ã¹0x12
笊å·ãªã32ãããæŽæ°ããã¢ãã¬ã¹0x34
ã»ã«ã«æ¬¡ã®ããã«æžã蟌ãããšãã§ããŸãã
B.write_volatile(A.read_volatile());
2ïŒããŒã«ã«å€æ°ã¯ãæ§ælet _ = _;
ã䜿çšããŠå®£èšlet _ = _;
ã
åã®äŸã®A
ïŒ 0x12
ããå€ïŒã次ã®ãããªå€æ°ã«èªã¿èŸŒãããšãã§ããŸãïŒ
let value = A.read_volatile();
3ïŒé¢æ°fn f(param: usize);
次ã®ããã«ãªããŸãïŒ f(123);
ã
4ïŒ loop
ãããã¯ã䜿çšããŠãç¡éã«äœããç¹°ãè¿ãããšãã§ããŸãã
loop { do_this_again_and_again(); }
5ïŒRustã«ã¯æ¬¡ã®ãããæŒç®åããããŸãïŒ
!
-å転<<
-å·Šã·ãã>>
-å³ã«ã·ãã|
-ãããåäœã®OR&
-ãããI
ããã§ãRustã³ãŒãã®LEDãç¹æ»
ãããæºåãã§ããŸããã phase4/src/lib.rs
ã³ãŒããèšè¿°ããŸãã ã³ãŒããåãéã³ãŒãã«å€æããŸãïŒ kmain
颿°å
ïŒã å¿
èŠãªã¬ãžã¹ã¿ãšããã°ããã®éé
å»¶ãäœæãããã¹ãªãŒããæ©èœããã§ã«çºè¡šããŠããŸãã ããããã¹ãŠäœ¿çšããŸãã
ããã°ã©ã ããã¹ãããæºåãã§ãããã phase4
ãã£ã¬ã¯ããªã§make
ãå®è¡ãmake
ã³ã³ãã€ã«ããŸãã ãã¹ãŠãæ£åžžã§ããã°ã build/blinky.bin
ãã¡ã€ã«ãäœæãããŸãã build/blinky.bin
ãã¡ã€ã«ã®ååãkernel8.img
ã«å€æŽããmicroSDã«ãŒãã«é
眮ããŠãããã©ãºããªãŒã«æ¿å
¥ããŸãã LEDãåã³ç¹æ»
ããã-ãã¥ãŒããªã¢ã«ã®ãã®éšåãå®äºããŠãããšæ³å®ã§ããŸãã
UPD Next Series