Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
時の流れが許せない
Search
KOBA789
May 11, 2025
7.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
時の流れが許せない
Kernel/VM探検隊@北陸 Part 7 で発表した内容です。
KOBA789
May 11, 2025
More Decks by KOBA789
See All by KOBA789
8bit CPU 2026
koba789
7
3.2k
メモリが足らない2026
koba789
4
2.7k
直接メモリアクセス
koba789
0
860
人工衛星のファームウェアをRustで書く理由
koba789
16
10k
令和最新版手のひらコンピュータ
koba789
14
9.7k
ついに生産が終わったけどZ80でまだまだ遊びたい
koba789
5
4.9k
ISUCONの練習を楽しくたくさんやる方法
koba789
3
1.6k
Z80をRustで動かすまで年が越せない
koba789
0
490
ISUCON練習環境を最も簡単に用意する方法
koba789
2
3.5k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.1k
Technical Leadership for Architectural Decision Making
baasie
3
580
How to build a perfect <img>
jonoalderson
1
6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
How Software Deployment tools have changed in the past 20 years
geshan
2
34k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Navigating Weather and Climate Data
rabernat
0
540
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Transcript
KOBA789 ࣌ͷྲྀΕ͕ڐͤͳ͍ ,FSOFM7.୳ݕୂ!1BSU
KOBA789 పͰ͔ͭ͘ΒंͰདྷ·ͨ͠ʢ৸ෆʣ w ࣄͷ͠·ͤΜ w ࣄͷ͠·ͤΜʢʣ w ͏͔ͬΓձࣾͷ1$Λ͖࣋ͬͯͨͷͰ͍ͭͷࣗݾհςϯϓϨʔτ͕ͳ͍
None
ಈ͘Α͏ʹͳΓ·ͨ͠ ΫϦελϧͷཪ໘ʹ৴߸ઢ͕௨ͬͯͯΫϩοΫ͕Ε͍ͯͨͷ͕ݪҼ
࣌ͷྲྀΕ͕ڐͤͳ͍
Έͳ͞Μͦ͏Ͱ͢Ͷʁ
ࢲͩͬͯͦ͏ͩ
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ .$6 # .$6 " lz
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ #ͷ࣌ܭ͕ͪΐͬͱ͚ͩΕΔ .$6 # .$6 " lz
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ #ͷ࣌ܭ͕ͪΐͬͱ͚ͩΕΔ .$6 # .$6 " lz ͳ͔ͥʁ
6"35ͷΈ CBVEͳΒ#ZUFૹΔͷʹNT͔͔Δ https://vanhunteradams.com/Protocols/UART/UART.html <CJU><CJUT>˺<NT> ੨͍෦KOBA789ʹΑΔՃච
6"35ͷΈ #ZUFͷ࣌ࠁΛૹͬͨΒNTԆ͢Δ .$6# .$6" NT #ͷ࣌ܭ͕NTΕΔ
6"35ͷΈ #ZUFͷ࣌ࠁΛૹͬͨΒNTԆ͢Δ .$6# .$6" NT #ͷ࣌ܭ͕NTΕΔ NT
Ҿ͍ͨΒʁ
·͊Ԇ͕ίϯελϯτͳΒ ͦΕͰ͍͍ΜͰ͢Α
͕ͩࣄଶͦ͏୯७Ͱͳ͍
let time = gettimeofday(); send(time);
let time = gettimeofday(); send(time); ߦ͕࣮ߦ͞Ε͔ͯΒ ߦ͕࣮ߦ͞ΕΔ·ͰͷԆʁ
ߦͱߦͷؒʹ͋ΔԆ Α͋͘Γ͕ͪͳϚΠίϯͷ߹ w ී௨ʹ໋ྩ࣮ߦʹ͔͔ΔαΠΫϧ͚ͩԆ͢Δ w ༏ઌͷߴׂ͍ΓࠐΈ͕ೖΕԆ͢ΔʢཁΫϦςΟΧϧηΫγϣϯʣ w ࠷ۙͷϚΠίϯͰ w $16͕͍͗ͯ͢Ζ͍Ζ͕૬ରతʹ͍ͷͰΩϟογϡ͕͋Δ
w ΩϟογϡώοτPSOPUͰԆ͕࣌ؒมԽʢඇܾఆతʣ w 5$.ͱ͔͑ϚγʹͳΔ͕ w 0VUPG0SEFS࣮ߦ͢Δ w ίʔυಡΉ͚ͩͰԆ͕࣌ؒΘ͔Βͳ͍ʢࣄ্࣮ඇܾఆతʣ
let time = gettimeofday(); send(time);
let time = gettimeofday(); send(time); ͦͦTFOE ͷ࣮ʁ
Α͋͘Δ6"35ૹ৴ϖϦϑΣϥϧʢงғؾʣ ૹ৴'*'0 5%3 ͕ϝϞϦϚοϓ͞Ε͍ۭͯͯʹͳΔͱׂΓࠐΈ͕ೖΔ 4IJGU SFHJTUFS EFQUI '*'0 59 %"5"
όε $16 %"5" '*'0&NQUZ *OUFSSVQU 5%3
5%3ʹΛॻ͖ࠐΉͱૹ৴͞ΕΔ ͨͱ͑5%3ͷΞυϨεΛY@ͱ͢Δ *(uint32_t*)0x400001000 = 'A'; core::ptr::write_volatile(0x400001000 as *mut u8, b'A');
5%3ʹΛॻ͖ࠐΉͱૹ৴͞ΕΔ EFQUI'*'0ͳΒจࣈ·ͰҰؾʹॻ͚Δ͕ɺӽ͑ΔͱᷓΕΔ core::ptr::write_volatile(0x40000100 as *mut u8, b'0'); core::ptr::write_volatile(0x40000100 as *mut
u8, b'1'); core::ptr::write_volatile(0x40000100 as *mut u8, b'2'); core::ptr::write_volatile(0x40000100 as *mut u8, b'3'); core::ptr::write_volatile(0x40000100 as *mut u8, b'4'); core::ptr::write_volatile(0x40000100 as *mut u8, b'5'); core::ptr::write_volatile(0x40000100 as *mut u8, b'6'); core::ptr::write_volatile(0x40000100 as *mut u8, b'7'); core::ptr::write_volatile(0x40000100 as *mut u8, b'8'); core::ptr::write_volatile(0x40000100 as *mut u8, b'9'); core::ptr::write_volatile(0x40000100 as *mut u8, b'A'); core::ptr::write_volatile(0x40000100 as *mut u8, b'B'); core::ptr::write_volatile(0x40000100 as *mut u8, b'C'); core::ptr::write_volatile(0x40000100 as *mut u8, b'D'); core::ptr::write_volatile(0x40000100 as *mut u8, b'E'); core::ptr::write_volatile(0x40000100 as *mut u8, b’F'); // ͔͜͜ΒઌᷓΕΔ
Α͋͘Δ6"35υϥΠόʢงғؾʣ %."ͷ͜ͱҰ୴Ε͍ͯͩ͘͞ w TFOE w ·ͣ'*'0ͷۭ͖༰ྔ͚ͩॻ͘ w ᷓΕͨιϑτΣΞόοϑΝʹॻ͘ w
&NQUZ'*'0ׂΓࠐΈ w '*'0ͷۭ͖༰ྔ͚ͩιϑτΣΞόοϑΝ͔ΒҠ͢
͏͓͔ΓͰ͢Ͷʁ
όοϑΝɾ'*'0͕ ٧·ͬͯͨΒ ଈ࠲ʹૹ৴͞Εͳ͍ ʢͦΕͦ͏ʣ
ͯ͞
Α͋͘Δ6"35ड৴ϖϦϑΣϥϧʢงғؾʣ ड৴'*'0 3%3 ͕ϝϞϦϚοϓ͞Ε͍͕ͯͯདྷΔͱׂΓࠐΈ͕ೖΔ 4IJGU SFHJTUFS EFQUI '*'0 39 %"5"
όε $16 %"5" '*'0/PO&NQUZ *OUFSSVQU 3%3
3%3͔ΒΛಡΉͱ'*'0͔ΒQPQ͞ΕΔ ͨͱ͑3%3ͷΞυϨεΛY@ͱ͢Δ uint8_t r = *(uint32_t*)0x40000200; // r == 'A'
let r = core::ptr::read_volatile(0x40000100 as *const u8); // r == b’A'
Α͋͘Δ6"35υϥΠόʢงғؾʣ %."ͷ͜ͱҰ୴Ε͍ͯͩ͘͞ʢʣ w /POFNQUZ'*'0ׂΓࠐΈ w '*'0ͷ༰ΛιϑτΣΞόοϑΝʹҠ͢ w ͜ΕΛ͠ͳ͍ͱ'*'0༰қʹᷓΕΔ w SFDW
w ιϑτΣΞόοϑΝ͔ΒಡΈग़͢
ड৴σʔλͷಡΈऔΓ͍͘ΒͰԆ͢Δ ͏͓Θ͔ΓͰ͢Ͷʢʣ w ΞϓϦέʔγϣϯ͕ιϑτΣΞόοϑΝΛ͍ͭಡΉ͔ࣗ༝ w ׂΓࠐΈϋϯυϥ͕ݺΕΔλΠϛϯάʜʜʁ w ΞςʹͳΒͳ͍ w ผͷΫϦςΟΧϧηΫγϣϯͰεϐϯϩοΫͯͨ͠ΒΕΔ
w $PSUFY.ͰׂΓࠐΈͷԣऔΓͱ͔ͰϨΠςϯγ͕ζϨΔ
ࠔΔ
ࠔΔͷͰɺΑ͋͘Δํ๏ʢ6"35 114ʣ ඵ͝ͱʹύϧεΛೖྗ͠ɺͦΕΛϋʔυΣΞͰΩϟϓνϟ͢Δ .$6 # .$6 " lz ʮࠓͰ͢ʂʯ
*OQVU$BQUVSF0VUQVU$PNQBSF ΠέͯΔϚΠίϯͷλΠϚʹ͍͍ͩͨ͋Δ w *OQVU$BQUVSF w ύϧεೖྗΛτϦΨʔʹͯ͠ɺΧϯλͷΛϨδελʹΩϟϓνϟ w ιϑτΣΞͷλΠϛϯάʹґଘͤͣਖ਼֬ͳλΠϛϯά͕औΕΔ w (1*0ׂΓࠐΈͱશ͘ผͷػೳ
w 0VUQVU$PNQBSF w ΧϯλͷΛτϦΨʔʹͯ͠ɺύϧεΛग़ྗ w ιϑτΣΞͷλΠϛϯάʹґଘͤͣʢSZ
ΊͰͨ͠ΊͰͨ͠ʢʁʣ
ݪཧతʹཱ͍ͯ͠Δ͕ݱ࣮తʹࠔΔ 6"35࣌ࠁ৴ઐ༻Ͱͳ͍ɻଞͷίϚϯυૹΓ͍ͨ .$6 # .$6 " lz ʮࠓͰ͢ʂʯ $.%@%0@40.&5)*/( ࠞͬͯ͟͠·͏
6"35ʹྲྀΕΔσʔλΛผ͍ͨ͠ ͜ͷΜͷεϥΠυ͕Ͱ͖ͯͳ͍ w σʔλΛผ͢ΔʹϔομΛ͚Δͷ͕ৗखஈ w ϔομΛ͚Δʹύέοτࢦ͡Όͳ͍ͱ͍͚ͳ͍ w ͱ͜ΖͰ6"35ͨͩͷΕͷͳ͍όΠτετϦʔϜ w ύέοτʹ͢Δʹϓϩτίϧ͕ඞཁ
w ͔͠ඪ४Խ͞Εͯͳ͍ͱඍਖخ͘͠ͳ͍
͜ͷΜͷεϥΠυ͕Ͱ͖ͯͳ͍
͏݁ߦͧ͘
151 1SFDJTJPO5JNF1SPUPDPM &UIFSOFU্Ͱ/51ΑΓਫ਼ີͳ࣌ࠁಉظΛ͢Δϓϩτίϧ w ൃͱͯ͠/51ͱಉ͡ʢԟ෮ͰϨΠςϯγΛଌΔʣ w େ͖ͳҧ͍ϋʔυΣΞλΠϜελϯϓͷαϙʔτ w &UIFSOFUϑϨʔϜͷ4'%͕1):Λ௨աͨ͠ॠؒͷΧϯλͷΛ ϋʔυΣΞͰΩϟϓνϟ͢Δ
w ΑΓਫ਼ີʹϨΠςϯγ͕ଌΕΔͷͰVTʙOTΦʔμʔͷਫ਼͕ૂ͑Δ w ࣮ࡍʹͬͱ͍Ζ͍Ζ͋Δ͕ɺ͜͜ʹॻ͘ʹ४උ͕࣌ؒΒͳ͗͢͞Δ
151 1SFDJTJPO5JNF1SPUPDPM &UIFSOFU্Ͱ/51ΑΓਫ਼ີͳ࣌ࠁಉظΛ͢Δϓϩτίϧ .$6 # .$6 "
31J$.ͱळ݄ͷ(14ϞδϡʔϧͰ࡞ΕΔ ͜ͷهࣄಡΜͩΒ؆୯ʹ࡞ΕΔͱࢥ͏ https://www.je ff geerling.com/blog/2022/ptp-and-ieee-1588-hardware-timestamping-on-raspberry-pi-cm4
/VDMFP 45. ͰΕಈ͘ ୭151ͳΜͯͬͯͳ͍ͷͰؾ߹ೖΕ࣮ͯ͢Δඞཁ͋Δ
ͱͳΔͱؾʹͳΔ͜ͱ͕ ͋Γ·͢Ͷʁ
Ϣʔβʔϥϯυͷ"1* Ͳ͏ͳͬͯΜͩ
#4%TPDLFUʹ λΠϜελϯϓऔΔ"1*ͳ͍
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new ΤϥʔΩϡʔʹ ใࠂ͞ΕΔ
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new ʁʁʁ
λΠϜελϯϓ ΠϯλʔϑΣʔεΛ ഁյͯͭ͠Β͍ ʢਫ਼ӠʑΑΓͦΕ͕ͭΒ͍ʣ