Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Porting PicoRuby to Another Microcontroller: ESP32
Search
Y_uuu
April 18, 2025
Technology
4
660
Porting PicoRuby to Another Microcontroller: ESP32
RubyKaigi 2025 Day.3
https://rubykaigi.org/2025/presentations/Y_uuu.html#day3
Y_uuu
April 18, 2025
Tweet
Share
More Decks by Y_uuu
See All by Y_uuu
RubyKaigi 2025でプロポーザルが初めて採択されるまでにやったこと
yuuu
1
440
地方企業の強みを活かす!AWSを活用したIoTシステムの開発事例とその裏側
yuuu
0
86
あの重機は今どこにある?- 重機管理IoTプロダクトのバックエンドをAWSで構築した話 -
yuuu
0
920
mruby-esp32におけるペリフェラルAPIの実装検討
yuuu
1
720
育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り -
yuuu
4
4.6k
committee-railsとOpenAPI Generatorでスキーマ駆動なAPI開発をする
yuuu
0
890
mrubyでマイコンの世界に足を踏み入れる
yuuu
2
1.9k
mruby on IoT devices.
yuuu
4
2.5k
SORACOM ArcでオフィスのIoT化を進行中です⭐
yuuu
1
1.1k
Other Decks in Technology
See All in Technology
MCP で繋ぐ Figma とデザインシステム〜LLM を使った UI 実装のリアル〜
kimuson
1
910
テスト設計チュートリアル ちびこん編 ’25
omn
1
430
AWS パートナー企業のテクニカルサポートが日々思っていること 〜そして、4/15 の現場から〜
kazzpapa3
2
380
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
17k
会社員しながら本を書いてきた知見の共有
sat
PRO
2
600
撤退危機からのピボット : 4年目エンジニアがリードする TypeScript で挑む事業復活 / crisis-to-pivot-4th-year-engineer-ts-relaunch
carta_engineering
2
720
主要ライブラリの実例に学ぶ、TypeScriptで実現する型安全な座標定義
tiroljpn
1
220
AWS LambdaでSocket通信サーバーレスアプリケーションのリアルタイム通信 / 20250523 Kumiko Hennmi
shift_evolve
1
260
マップを速く表示するために
tsuboyan5
0
160
iOS/Androidで無限循環Carousel表現を考えてみる
fumiyasac0921
0
110
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
360k
Web Streams APIの基本と実践、TypeScriptでの活用法 / TSKaigi 2025 Web Streams API
tasshi
5
1.1k
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
BBQ
matthewcrist
88
9.6k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Six Lessons from altMBA
skipperchong
28
3.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Agile that works and the tools we love
rasmusluckow
329
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
122
52k
Transcript
"QSJM 3VCZ,BJHJ :VIFJ0LB[BLJ !:@VVV Porting PicoRuby to Another Microcontroller: ESP32
self.inspect w :VIFJ0LB[BLJ w !:@VVV 9 !ZVVVOFU #MVF4LZ w
!ZVVV (JU)VC w *P5$MPVE&OHJOFFSBU'VTJD$P -UE w .FOUFSBU'KPSE#PPU$BNQ 2
PicoRuby 3
PicoRuby w 5IFTNBMMFTU3VCZJNQMFNFOUBUJPOEFTJHOFEUPSVOPO NJDSPDPOUSPMMFST w &OBCMFTSVOOJOH3VCZPONJDSPDPOUSPMMFSCPBSETTVDIBTUIF 3BTQCFSSZ1J1JDP 4
Raspberry Pi Pico w "NJDSPDPOUSPMMFSCPBSE EFWFMPQFECZUIF3BTQCFSSZ 1J'PVOEBUJPO w $BOCFQSPHSBNNFEVTJOH 1ZUIPO
.JDSP1ZUIPO BOE$ $ 5
R2P2 (Ruby Rapid Portable Platform) w "TIFMMTZTUFNXJUI1JDP3VCZFNCFEEFEUIBUSVOTPO NJDSPDPOUSPMMFST w 8PSLTPOUIF3BTQCFSSZ1J1JDP
6
Question: Do we need a Raspberry Pi Pico to try
PicoRuby? 7
Question: Do we need a Raspberry Pi Pico to try
PicoRuby? w /PUOFDFTTBSJMZ 8
PicoRuby is portable w *UJTCVJMUUPTVQQPSUPQFSBUJPOPOEJ ff FSFOUNJDSPDPOUSPMMFST w 'JMFTBOEEJSFDUPSJFTBSFFYQMJDJUMZTFQBSBUFEUPIBOEMF NJDSPDPOUSPMMFSTQFDJ
fi DEJ ff FSFODFT w &BTZQPSUJOHBMMPXTUIFFYJTUJOHFDPTZTUFNUPCFMFWFSBHFEBDSPTT EJ ff FSFOUNJDSPDPOUSPMMFST 9
Porting PicoRuby is still a work in progress w 5IFSFBSFOPUNBOZ
NJDSPDPOUSPMMFSTUIBUDBO FBTJMZSVO1JDP3VCZ w 5IFDSFBUPSPG1JDP3VCZJT BMTPFBHFSUPTFFNPSFQPSUT 10 IUUQTQJDPSVCZHJUIVCJPDPOUSJCVUJPOIUNM
Porting PicoRuby is still a work in progress w 5IFSFBSFOPUNBOZ
NJDSPDPOUSPMMFSTUIBUDBO FBTJMZSVO1JDP3VCZ w 5IFDSFBUPSPG1JDP3VCZJT BMTPFBHFSUPTFFNPSFQPSUT 11 1PSUJOH "TPG 1JDP3VCZTVQQPSUTPOMZUIF31 3BTQCFSSZ1J1JDP *U XPVMECFBTJHOJ fi DBOUVOEFSUBLJOHUPQPSUJUUPPUIFS.$6TMJLFUIF O3' 45. BOE&41*GZPVBSFJOUFSFTUFEJODPOUSJCVUJOHUPB QPSUJOH QMFBTFWJTJUUIFSFQPTJUPSZ IUUQTQJDPSVCZHJUIVCJPDPOUSJCVUJPOIUNM
ESP32 12
ESP32 w "MPXDPTU MPXQPXFS NJDSPDPOUSPMMFSNPEVMF EFWFMPQFECZ&TQSFTTJG 4ZTUFNT w 8JEFMZVTFEJOWBSJPVT EFWJDFT
JODMVEJOH.4UBDL w 4VQQPSUTXJSFMFTT DPNNVOJDBUJPOTVDIBT8J'J BOE#MVFUPPUI 13
My device1: M5Stamp C3 Mate w &RVJQQFEXJUI&41$ POFPGUIF&41TFSJFT NJDSPDPOUSPMMFSNPEVMFT
w #BTFEPO3*4$7 BSDIJUFDUVSF w &YUSFNFMZTNBMMBOE B ff PSEBCMF 14
My device2: ESP32-DevKitC w &41EFWFMPQNFOUCPBSE EFWFMPQFEBOENBSLFUFECZ &TQSFTTJG4ZTUFNT w #BTFEPO9UFOTB BSDIJUFDUVSF
15
Let's start porting!
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 17
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 18 /FYU6Q
Introduction to Compilation, Linking, and Archiving 19
Introduction to Compilation, Linking, and Archiving 20 $PNQJMF
Introduction to Compilation, Linking, and Archiving 21 -JOL
Introduction to Compilation, Linking, and Archiving 22 "SDIJWF
Introduction to Cross-Compilation 23 'PSY 'PSY 'PSY 'PSY 'PSY 'PSY
Introduction to Cross-Compilation 24 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7 'PS9UFOTB3*4$7
File Structure of PicoRuby/R2P2 25
File Structure of PicoRuby/R2P2 26
File Structure of PicoRuby/R2P2 27
File Structure of PicoRuby/R2P2 28
File Structure of PicoRuby/R2P2 29
File Structure of PicoRuby/R2P2 30
File Structure of PicoRuby/R2P2 31 -FU`TDSFBUFUIJT fi MF
ESP-IDF w &41*%'JTBEFWFMPQNFOU GSBNFXPSLGPS&41 QVCMJTIFECZ&TQSFTTJG 4ZTUFNT w #ZGPMMPXJOHUIFP ff
i DJBM EPDVNFOUBUJPOGPSTFUVQ ZPV DBOVTFDPNQJMFST MJOLFST BOEBSDIJWFSTGPSCPUI3*4$ 7BOE9UFOTB 32 IUUQTEPDTFTQSFTTJGDPNQSPKFDUTFTQJEGFOW FTQHFUTUBSUFEMJOVYNBDPTTFUVQIUNM
Writing build_config w 5IFCVJME@DPO fi HEJSFDUPSZJO 1JDP3VCZDPOUBJOT fi MFTGPS CVJMEJOHPOWBSJPVT
NJDSPDPOUSPMMFSTBOE FOWJSPONFOUT w 5IFTF fi MFTBSFBMTPXSJUUFOJO 3VCZ 33 TLJQQFEʜ
Writing build_config 34 .3VCZ$SPTT#VJMEOFX FTQ EPcDPOGc DPOGUPPMDIBJO HDD DPOGDDDPNNBOEYUFOTBFTQFMGHDD
DPOGMJOLFSDPNNBOEYUFOTBFTQFMGME DPOGBSDIJWFSDPNNBOEYUFOTBFTQFMGBS DPOGDDIPTU@DPNNBOEHDD DPOGQJDPSVCZ BMMPD@MJCDGBMTF FOE QJDPSVCZCVJME@DPO fi HYUFOTBFTQSC 4FUUJOH6Q$PNQJMFS -JOLFS BOE "SDIJWFS$PNNBOETGPS9UFOTB "EE$POTUBOUTBOE0UIFS0QUJPOT BT/FFEFE
Writing build_config 35 .3VCZ$SPTT#VJMEOFX FTQ EPcDPOGc DPOGUPPMDIBJO HDD DPOGDDDPNNBOESJTDWFTQFMGHDD
DPOGMJOLFSDPNNBOESJTDWFTQFMGME DPOGBSDIJWFSDPNNBOESJTDWFTQFMGBS DPOGDDIPTU@DPNNBOEHDD DPOGQJDPSVCZ BMMPD@MJCDGBMTF FOE QJDPSVCZCVJME@DPO fi HSJTDWFTQSC
rake w 4QFDJGZUIFCVJME@DPO fi HOBNFVTJOHUIF.36#:@$0/'*( FOWJSPONFOUWBSJBCMF w #VJMEVTJOHUIFSBLFDPNNBOE 36 GPS9UFOTB
.36#:@$0/'*(YUFOTBFTQSBLF GPS3*4$7 .36#:@$0/'*(SJTDWFTQSBLF
rake w 8FDBOTFFUIBUMJCNSVCZBIBTCFFOHFOFSBUFE 37 MTCVJMEFTQMJC MJCNSVCZBMJCNSVCZ@DPSFB
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 38 +VTU5BMLFE
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 39 /FYU6Q
File Structure of PicoRuby/R2P2 40 $SFBUFE
File Structure of PicoRuby/R2P2 41 "OEDSFBUFUIJT fi MF -FU`TDSFBUFUIJTQSPKFDU
Creating an ESP-IDF Project w 'PMMPXTUIFTBNFQSPDFEVSF BTEFWFMPQJOHXJUI$ w *OBNFEUIJTQSPKFDU31 &41
42 IUUQTEPDTFTQSFTTJGDPNQSPKFDUTFTQJEGFOWFTQ HFUTUBSUFEMJOVYNBDPTTFUVQIUNMTUBSUBQSPKFDU
Writing main.c 43 JODMVEFNSCNBJO@UBTLD ʜ 5IJTGVODUJPOJTUIFFOUSZQPJOU WPJEBQQ@NBJO WPJE \
NSCD@JOJU IFBQ@QPPM )&"1@4*;& NSCD@UDC NBJO@UDCNSCD@DSFBUF@UBTL NBJO@UBTL NSCD@TFU@UBTL@OBNF NBJO@UDC NBJO@UBTL NSCD@SVO ^ 31&41NBJONBJOD *OJUJBMJ[BUJPO 1BTTJOHUIF)FBQ .FNPSZ"SFB 3VOUIF7. $SFBUFBOFYFDVUJPODPOUFYU DBMMFEBUBTL
Writing main.c 44 JODMVEFNSCNBJO@UBTLD ʜ 5IJTGVODUJPOJTUIFFOUSZQPJOU WPJEBQQ@NBJO WPJE \
NSCD@JOJU IFBQ@QPPM )&"1@4*;& NSCD@UDC NBJO@UDCNSCD@DSFBUF@UBTL NBJO@UBTL NSCD@TFU@UBTL@OBNF NBJO@UDC NBJO@UBTL NSCD@SVO ^ 31&41NBJONBJOD 8IBUEPUIFTFDPEFTEP
Binary for the PicoRuby VM 45 QVUT)FMMPXPSME NSCMJCNBJO@UBTLSC JODMVEFTUEJOUI JGEFG@@DQMVTQMVT
FYUFSO FOEJG DPOTUVJOU@UNBJO@UBTL<>\ Y Y Y Y Y Y Y Y Y Y Y YE Y Y YE YC ʜ ^ NSCNBJO@UBTLD QJDPSCD#NBJO@UBTLPNSCNBJO@UBTLDMJCNBJO@UBTLSC *OQVU 0VUQVU
Writing CMakeLists.txt 46 TFU 1*$036#:@%*3\$0.10/&/5@%*3^QJDPSVCZ TFU -*#.36#:@'*-&\1*$036#:@%*3^CVJMEFTQMJCMJCNSVCZB BEE@QSFCVJMU@MJCSBSZ
MJCNSVCZ\-*#.36#:@'*-&^3&26*3&4\$0.10/&/5@/".&^ UBSHFU@MJOL@MJCSBSJFT \$0.10/&/5@-*#^13*7"5&MJCNSVCZ UBSHFU@JODMVEF@EJSFDUPSJFT \$0.10/&/5@-*#^ 13*7"5& \$0.10/&/5@%*3^QJDPSVCZCVJMESFQPTFTQNSVCZDPNQJMFSJODMVEF \$0.10/&/5@%*3^QJDPSVCZCVJMESFQPTFTQNSVCZDPNQJMFSMJCQSJTNJODMVEF \$0.10/&/5@%*3^QJDPSVCZCVJMEFTQNSCHFNT 31&41DPNQPOFOUTQJDPSVCZFTQ$.BLF-JTUTUYU 3FGFSFODJOHMJCNSVCZB "EEMJCSBSJFTUPMJOL
Build with idf.py 47 JEGQZCVJME 1SPKFDUCVJMEDPNQMFUF5P fl BTI SVO JEGQZ
fl BTI PS JEGQZQ1035 fl BTI PS QZUIPONFTQUPPMDIJQFTQCCFGPSFEFGBVMU@SFTFUBGUFSIBSE@SFTFUXSJUF@ fl BTI fl BTI@NPEFEJP fl BTI@TJ[F.# fl BTI@GSFRNYCVJMECPPUMPBEFSCPPUMPBEFSCJOYCVJMEQBSUJUJPO@UBCMFQBSUJUJPO UBCMFCJOYCVJME31&41CJOYCVJMETUPSBHFCJO PSGSPNUIF6TFSTZVIFJHIRHJUIVCDPNQJDPSVCZ31&41CVJMEEJSFDUPSZ QZUIPONFTQUPPMDIJQFTQCCFGPSFEFGBVMU@SFTFUBGUFSIBSE@SFTFUXSJUF@ fl BTI! fl BTI@BSHT $PNQMFUF
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 48 +VTU5BMLFE
Steps for Porting 📝 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 49 /FYU6Q
w 5SBDFUIF1JDP3VCZTPVSDFDPEFTUBSUJOHGSPNUIFQVUTNFUIPE BWBJMBCMFJO3VCZ w &WFOUVBMMZ JUMFBETUPUIFQJDPSVCZNBDIJOFNSCHFN 50 Exploring the Call
Tree
w 5SBDFUIF1JDP3VCZTPVSDFDPEFTUBSUJOHGSPNUIFQVUTNFUIPE BWBJMBCMFJO3VCZ w &WFOUVBMMZ JUMFBETUPUIFQJDPSVCZNBDIJOFNSCHFN 51 Exploring the Call
Tree
Modifying build_config w *O1JDP3VCZ NSCHFNTBSF BEEFEUISPVHICVJME@DPO fi H w "EEQJDPSVCZNBDIJOF
52 .3VCZ$SPTT#VJMEOFX FTQ EPcDPOGc DPOGHFNDPSFlQJDPSVCZNBDIJOF DPOGQJDPSVCZ BMMPD@MJCDGBMTF FOE QJDPSVCZCVJME@DPO fi HYUFOTBFTQSC BOESJTDWFTQSC
File Structure of PicoRuby/R2P2 53
File Structure of PicoRuby/R2P2 54
File Structure of PicoRuby/R2P2 55
File Structure of PicoRuby/R2P2 56 'PS3BTQCFSSZ1J1JDP
File Structure of PicoRuby/R2P2 57 'PS3BTQCFSSZ1J1JDP
File Structure of PicoRuby/R2P2 58 4IPVMEDSFBUFUIJT fi MFBOE TXJUDIUIFDPNQJMFUBSHFU 'PS&41
Example implementation of hal_write in machine.c 59 JOU IBM@XSJUF JOUGE
DPOTUWPJE CVG JOUOCZUFT \ UVE@DED@XSJUF CVG OCZUFT JOUMFOUVE@DED@XSJUF@ fl VTI SFUVSOMFO ^ QJDPSVCZNBDIJOFQPSUTSQNBDIJOFD JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ TIPVMEXSJUFDPEFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD w 5BLFTUIFGPMMPXJOHBSHVNFOUT w 0VUQVU fi MFEFTDSJQUPS w 0VUQVUEBUB w /VNCFSPGCZUFTUPXSJUF w .VTUSFUVSOUIFOVNCFSPG CZUFTXSJUUFO w )PXTIPVMEJUCFJNQMFNFOUFE
Example implementation of hal_write in machine.c 60 JOU IBM@XSJUF JOUGE
DPOTUWPJE CVG JOUOCZUFT \ UVE@DED@XSJUF CVG OCZUFT JOUMFOUVE@DED@XSJUF@ fl VTI SFUVSOMFO ^ QJDPSVCZNBDIJOFQPSUTSQNBDIJOFD JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ TIPVMEXSJUFDPEFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD w UVE@DED@XSJUF JTBGVODUJPO QSPWJEFECZ5JOZ64# w *UJTOPUJODMVEFEJO&41*%' CZEFGBVMU w *O&41*%' TUEJPIDBOCF VTFE BOETUBOEBSEPVUQVUJT EJSFDUFEUPTFSJBM DPNNVOJDBUJPO
JODMVEFTUEJPI JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ GPS
JOUJJOCZUFTJ \ QVUDIBS DIBS CVG <J> ^ ffl VTI TUEPVU SFUVSOOCZUFT ^ Example implementation of hal_write in machine.c 61 QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD w 6MUJNBUFMZ JUXBT JNQMFNFOUFEBTTIPXOJOUIF DPEFPOUIFSJHIU w )PXFWFS *FODPVOUFSFE TFWFSBMGBJMVSFTBMPOHUIF XBZ w *XJMMFYQMBJOUIFNMBUFS
w 3FXSJUFPUIFSGVODUJPOTVTJOH UIFTBNFBQQSPBDIBTCFGPSF w .PTUPG1JDP3VCZ`TQPSUJOH XPSLDPOTJTUTPGUIJTQSPDFTT w 0ODFNBDIJOFDJTDPNQMFUF TUBOEBSEJOQVUBOEPVUQVU
XJMMCFBWBJMBCMF 62 Porting other functions TUS D QSJOU1MFBTFFOUFSTPNFUFYUaO XIJMFDaO TUS D*0HFUDI QSJOUD FOE QVUTTUS NSCMJCNBJO@UBTLSC 1MFBTFFOUFSTPNFUFYU )FMMP 3VCZ,BJHJ )FMMP 3VCZ,BJHJ
Steps for Porting #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 63 +VTU5BMLFE
Steps for Porting #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 64 /FYU6Q
w &OBCMFUIFFDIPDPNNBOEJOUIFTIFMM w "EENSCHFNTPUIFSUIBOQJDPSVCZNBDIJOF 65 My Goal for This Task
Writing main_task.rb w 1SFQBSJOHB3VCZQSPHSBNUP MBVODIUIFTIFMM w &YUSBDUPOMZUIFOFDFTTBSZ DPEFGSPNUIF31QSPHSBN 66 SFRVJSFTIFMM
SFRVJSFbNBDIJOF 45%*/*0 45%065*0 CFHJO 45%*/FDIPGBMTF TIFMM4IFMMOFX DMFBOUSVF QVUT4UBSUJOHTIFMMaOaO TIFMMTIPX@MPHP TIFMMTUBSU SFTDVFF QVUT/PUBWBJMBCMF QVUT\FNFTTBHF^ \FDMBTT^ FOE NSCMJCNBJO@UBTLSC
w NSCHFNTOFFEFEUPFYFDVUFUIFFDIPDPNNBOEJOUIFTIFMM 67 Listing required mrbgems QJDPSVCZTIFMM QJDPSVCZFEJUPS QJDPSVCZTBOECPY QJDPSVCZFOW
QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU QJDPSVCZWGT QJDPSVCZNFUBQSPH QJDPSVCZUJNFDMBTT QJDPSVCZNBDIJOF
w 4PNFNSCHFNTDPOUBJOPOMZ3VCZ fi MFT OPQPSUJOHOFFEFE 68 Listing required mrbgems ✅QJDPSVCZTIFMM
✅QJDPSVCZFEJUPS QJDPSVCZTBOECPY QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT QJDPSVCZNFUBQSPH QJDPSVCZUJNFDMBTT QJDPSVCZNBDIJOF
w 4PNFNSCHFNTEPOPUIBWFBQPSUEJSFDUPSZ OPQPSUJOHOFFEFE 69 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY
QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT QJDPSVCZNBDIJOF
w *IBWFBMSFBEZDPNQMFUFEQPSUJOHQJDPSVCZNBDIJOF w 70 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY
QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT ✅QJDPSVCZNBDIJOF
w 5IFSFGPSF NSCHFNTTUJMMOFFEUPCFQPSUFE 71 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY
QJDPSVCZFOW QJDPSVCZJPDPOTPMF QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT ✅QJDPSVCZNBDIJOF
picoruby-env and picoruby-io-console w 5IFTFNSCHFNTSBOPO&41XJUIPVUNPEJ fi DBUJPO VTJOHUIF FYJTUJOH31DPEF w
5IFSFGPSF UIF fi MFTXFSFSFVTFE 72 $PQZEJSFDUPSJFTBOE fi MFT
picoruby-filesystem-fat w -JLFQJDPSVCZNBDIJOF JUXPVMEOPSNBMMZSFRVJSFQPSUJOH w )PXFWFS GPSSVOOJOHUIFFDIPDPNNBOE UIFDPEFJTOPU OFDFTTBSZ 73
picoruby-filesystem-fat w .JTTJOHGVODUJPOTDBVTF MJOLFSFSSPST w 5PQSFWFOUUIJT EF fi OFFNQUZ GVODUJPOTPOMZGPSUIPTF
SFGFSFODFECZPUIFSDPEF 74 JODMVEFMJC ff CTPVSDF ff I 50%0*NQMFNFOUUIJTGVODUJPOMPHJD WPJE '*-&@QIZTJDBM@BEESFTT '*- GQ VJOU@U BEES \ ^ 50%0*NQMFNFOUUIJTGVODUJPOMPHJD JOU '*-&@TFDUPS@TJ[F WPJE \ SFUVSO ^ QJDPSVCZ fi MFTZTUFNGBUQPSUTFTQ fl BTI@EJTLD
w "MMNSCHFNTBSFSFBEZ👍 75 Listing required mrbgems ✅QJDPSVCZTIFMM ✅QJDPSVCZFEJUPS ✅QJDPSVCZTBOECPY ✅QJDPSVCZFOW
✅QJDPSVCZJPDPOTPMF ✅QJDPSVCZ fi MFTZTUFNGBU ✅QJDPSVCZWGT ✅QJDPSVCZNFUBQSPH ✅QJDPSVCZUJNFDMBTT ✅QJDPSVCZNBDIJOF
Steps for Porting #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT *NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU
1PSUBEEJUJPOBMNSCHFNT 76 +VTU5BMLFE
Steps for Porting → Completed 🎉 #VJMEUIF1JDP3VCZTPVSDFUPHFOFSBUFMJCNSVCZB -JOLMJCNSVCZBBOEDPNQMFUFUIFCVJMEQSPDFTT
*NQMFNFOUTVQQPSUGPSTUBOEBSEJOQVUBOEPVUQVU 1PSUBEEJUJPOBMNSCHFNT 77
Did Porting Seem Easy? w :FT JUTTJNQMFJGZPVLOPXUIFDPSSFDUTUFQT w "TMPOHBTOPUIJOHHPFTXSPOH😏 78
Troubleshooting collection
case1: Watchdog Timer Error w 5IFGPMMPXJOHFSSPSPDDVSSFEPOUIFEFWJDF 80 & UBTL@XEU5BTLXBUDIEPHHPUUSJHHFSFE5IFGPMMPXJOHUBTLTVTFSTEJEOPUSFTFUUIFXBUDIEPHJOUJNF
& UBTL@XEU*%-& $16 & UBTL@XEU5BTLTDVSSFOUMZSVOOJOH & UBTL@XEU$16NBJO & UBTL@XEU$16*%-& & UBTL@XEU1SJOU$16 DVSSFOUDPSF CBDLUSBDF
case1: Watchdog Timer Error w "UJNFSVTFEUPEFUFDUJGBQSPHSBNIBTDSBTIFEPSGSP[FO w "GFBUVSFQSPWJEFECZ'SFF3504 UIFSFBMUJNF04SVOOJOHPO &41
81
case1: Watchdog Timer Error w 8IZ8BTUIF8BUDIEPH5JNFS5SJHHFSFE w 1JDP3VCZIBTJUTPXONFDIBOJTNGPSDPOUFYUTXJUDIJOHXJUIJO UIF7.
5$# w 5IJTBMMPXTDPOUFYUTXJUDIJOHSFHBSEMFTTPGUIF04UZQFPS XIFUIFSBO04JTQSFTFOUPOUIFNJDSPDPOUSPMMFS 82
case1: Watchdog Timer Error w 6OMFTTUIF3VCZQSPHSBNFYQMJDJUMZJODMVEFTTMFFQ UIF$16 SFNBJOTDPOUJOVPVTMZBDUJWF w "TBSFTVMU
'SFF3504JOUFSQSFUTUIJTBTBSVOBXBZQSPHSBNTJODF UIF$16JTOPUJEMJOH 83
case1: Watchdog Timer Error w %FDJEFEUPEJTBCMFUIF 8BUDIEPH5JNFSBTB DPVOUFSNFBTVSF w $POUFYUTXJUDIJOHJT
IBOEMFECZ5$# w 5IFPSJHJOBM31QSPKFDUIBT BEPQUFEUIFTBNFBQQSPBDI 84 JODMVEFNSCNBJO@UBTLD WPJEQJDPSVCZ@FTQ WPJE \ %JTBCMF58%5 FTQ@UBTL@XEU@EFJOJU NSCD@JOJU IFBQ@QPPM )&"1@4*;& ^ 31&41NBJONBJOD TIPVMEDBMMJU
case 2: “require” Doesn't Work w 8IFOFYFDVUJOHlSFRVJSFzJOB3VCZQSPHSBN UIFGPMMPXJOHFSSPS PDDVST 85
&YDFQUJPO WN@JE VOEF fi OFEMPDBMWBSJBCMFPSNFUIPESFRVJSFGPS0CKFDU /P.FUIPE&SSPS
case 2: “require” Doesn't Work w QJDPSVCZTIFMMBOEQJDPSVCZ SFRVJSFHFOFSBUF$TPVSDF DPEFEVSJOHUIFCVJME QSPDFTT
w 5IFJOJUJBMJ[BUJPOGVODUJPOT EF fi OFEJOUIFTFTPVSDF fi MFT NVTUCFDBMMFEGSPNUIFNBJO GVODUJPO 86 TUBUJDQJDPHFNTQSFCVJMU@HFNT<>\ \NBDIJOF NBDIJOF NSCD@NBDIJOF@JOJU GBMTF^ \FOW FOW NSCD@FOW@JOJU GBMTF^ \/6-- /6-- /6-- USVF^ TFOUJOFM ^ WPJE QJDPSVCZ@JOJU@SFRVJSF NSCD@WN WN \ ^ QJDPSVCZCVJMEFTQNSCHFNTQJDPHFN@JOJUD
case 2: “require” Doesn't Work w QJDPSVCZTIFMMBOEQJDPSVCZ SFRVJSFHFOFSBUF$TPVSDF DPEFEVSJOHUIFCVJME QSPDFTT
w 5IFJOJUJBMJ[BUJPOGVODUJPOT EF fi OFEJOUIFTFTPVSDF fi MFT NVTUCFDBMMFEGSPNUIFNBJO GVODUJPO 87 JODMVEFNSCNBJO@UBTLD WPJEBQQ@NBJO WPJE \ EJTBCMF8%5 FTQ@UBTL@XEU@EFJOJU NSCD@JOJU IFBQ@QPPM )&"1@4*;& QJDPSVCZ@JOJU@SFRVJSF WN QJDPSVCZ@JOJU@FYFDVUBCMFT WN NSCD@SVO ^ 31&41NBJONBJOD 4IPVMEDBMMJU
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 88 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 89 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE 0,
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 90 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE /(
case 3: Stack overflow w 8IFOSVOOJOHB3VCZQSPHSBNJOJSCPSBOZPUIFSTDSJQU UIFTZTUFN TVEEFOMZSFCPPUT 91 JSC
JSCB JSCBNBQ\cJcJ ^FBDIEPcOVNc JSC OVNOVN JSC QVUTOVN JSC FOE &3303 "TUBDLPWFS fl PXJOUBTLNBJOIBTCFFOEFUFDUFE
case 3: Stack overflow w 'SFF3504TUBSUTUIF BQQ@NBJOUBTLBUCPPU BOE 1JDP3VCZ7.SVOTXJUIJOUIJT UBTL
w #ZEFGBVMU UIFBQQ@NBJOUBTL IBTBTUBDLTJ[FPG CZUFTBMMPDBUFE 92
case 3: Stack overflow w 'VODUJPODBMMTBOEMPDBM BVUPNBUJD WBSJBCMFT DPOTVNFTUBDLNFNPSZ w
*GVTBHFFYDFFET CZUFT BTUBDLPWFS fl PXPDDVST 93
case 3: Stack overflow w *O&41*%' UIFTUBDLTJ[FPG UIFBQQ@NBJOUBTLDBOCF NPEJ fi
FEWJBDPO fi HVSBUJPO w "EEUIFGPMMPXJOHFOUSZUP TELDPO fi HEFGBVMUTUPDIBOHF UIFTUBDLTJ[F 94 $0/'*(@&41@."*/@5"4,@45"$,@4*;& 31&41TELDPO fi HEFGBVMUT
case 4: CSI Command Not Working w 31DIFDLTUIFUFSNJOBM FNVMBUPSTUBUFBUTUBSUVQ w
4QFDJ fi DBMMZ JUVTFT$4* $POUSPM4FRVFODF *OUSPEVDFS %43 %FWJDF 4UBUVT3FQPSU GPSUIJT QVSQPTF 95 DMBTT*0 EFGTFMGXBJU@UFSNJOBM UJNFPVU SFT 45%*/SFBE@OPOCMPDL 45%065QSJOUaF<O$4*%43 UJNFPVU UP@JUJNFTEPcJc SFT45%*/SFBE@OPOCMPDL UP@T CSFBLJJGSFTMFOHUI TMFFQ@NT FOE &/7<5&3.>SFTTUBSU@XJUI aF<O BOTJ EVNC FOE QJDPSVCZJPDPOTPMFNSCMJCJPDPOTPMFSC
case 4: CSI Command Not Working w 31DIFDLTUIFUFSNJOBM FNVMBUPSTUBUFBUTUBSUVQ w
4QFDJ fi DBMMZ JUVTFT$4* $POUSPM4FRVFODF *OUSPEVDFS %43 %FWJDF 4UBUVT3FQPSU GPSUIJT QVSQPTF 96 DMBTT*0 EFGTFMGXBJU@UFSNJOBM UJNFPVU SFT 45%*/SFBE@OPOCMPDL 45%065QSJOUaF<O$4*%43 UJNFPVU UP@JUJNFTEPcJc SFT45%*/SFBE@OPOCMPDL UP@T CSFBLJJGSFTMFOHUI TMFFQ@NT FOE &/7<5&3.>SFTTUBSU@XJUI aF<O BOTJ EVNC FOE QJDPSVCZJPDPOTPMFNSCMJCJPDPOTPMFSC
case 4: CSI Command Not Working w *GUIFUFSNJOBMFNVMBUPSJT SFBEZ JUTIPVMESFDFJWF
aF<OGSPNTUBOEBSEJOQVU w )PXFWFS BOJTTVFPDDVSSFE XIFSFUIJTJOQVUXBTOPU CFJOHSFBEQSPQFSMZ 97 DMBTT*0 EFGTFMGXBJU@UFSNJOBM UJNFPVU SFT 45%*/SFBE@OPOCMPDL 45%065QSJOUaF<O$4*%43 UJNFPVU UP@JUJNFTEPcJc SFT45%*/SFBE@OPOCMPDL UP@T CSFBLJJGSFTMFOHUI TMFFQ@NT FOE &/7<5&3.>SFTTUBSU@XJUI aF<O BOTJ EVNC FOE QJDPSVCZJPDPOTPMFNSCMJCJPDPOTPMFSC
case 4: CSI Command Not Working w *G$4*%43GBJMT UIFGBNJMJBS 1JDP3VCZMPHPEPFTOU
BQQFBS w 5IJTJTBTFSJPVTJTTVF😱 98
case 4: CSI Command Not Working w 5IFDBVTFXBTUIFJOJUJBMMZ QPSUFEQJDPSVCZNBDIJOF w
"U fi STU *IBEJNQMFNFOUFEJU MJLFUIJT 99 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ SFUVSOQSJOUG CVG ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD
case 4: CSI Command Not Working w $BOZPVTQPUUIFEJ ff FSFODF
100 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ SFUVSOQSJOUG CVG ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ GPS JOUJJOCZUFTJ \ QVUDIBS DIBS CVG <J> ^ ffl VTI TUEPVU SFUVSOOCZUFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD #FGPSF "GUFS
case 4: CSI Command Not Working w 5IFDPEFCFGPSFUIF fi YIBE
UXPJTTVFT *UJHOPSFEOCZUFT UIF OVNCFSPGCZUFTUPXSJUF *UEJEOPUDBMM ffl VTI TP UIF$4*DPNNBOENJHIU SFNBJOCV ff FSFEBOEOPU TFOUJNNFEJBUFMZ 101 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ SFUVSOQSJOUG CVG ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD
case 4: CSI Command Not Working w "GUFS fi YJOHQJDPSVCZNBDIJOF
UIF$4*DPNNBOETUBSUFEXPSLJOH QSPQFSMZ 102 JOU IBM@XSJUF JOUGE DPOTUWPJE CVG JOUOCZUFT \ GPS JOUJJOCZUFTJ \ QVUDIBS DIBS CVG <J> ^ ffl VTI TUEPVU SFUVSOOCZUFT ^ QJDPSVCZNBDIJOFQPSUTFTQNBDIJOFD
Demo
104
Demo explanation 105
Demo explanation 106 $PNNVOJDBUJOH XJUIUIF.BUSJY -&%WJB41* QJDPSVCZTQJ
Demo explanation 107 3FBEJOHUIF9 BYJTUJMUGSPNUIF +PZTUJDLVTJOH "%$ QJDPSVCZBED
Demo explanation 108 (FOFSBUJOHTPVOE CZPVUQVUUJOH XBWFGPSNTWJB 18.UPUIFQJF[P FMFNFOU QJDPSVCZQXN
Conclusion
Summary w 5IJTTFTTJPODPWFSFEQPSUJOH1JDP3VCZUP&41 w 5IFQSPDFTTBQQMJFTUPPUIFSNJDSPDPOUSPMMFSTUPP w 1PSUJOHUP45.BOEO3'JTDPOTJEFSFE w "HSFBUDIBODFUPDPOUSJCVUF🚀 110
Summary w 0GDPVSTF UIFSFBSFTUJMMNBOZXBZTUPDPOUSJCVUFUP&41 w *GZPVSFJOUFSFTUFE MFUTUBML w *CSPVHIUTPNFEFWJDFTUPTIBSF 111
Summary w 1MFBTFWJTJUUIFGPMMPXJOHSFQPTJUPSZ w IUUQTHJUIVCDPNQJDPSVCZ31&41 w IUUQTHJUIVCDPNQJDPSVCZQJDPSVCZ 112
end Thank you for coming!