Upgrade to Pro — share decks privately, control downloads, hide ads and more …

組み込みソフトウェア基礎_【連続講座 #7】TDD#3 LEDドライバ(ターゲット編)

k-abe
December 16, 2022

組み込みソフトウェア基礎_【連続講座 #7】TDD#3 LEDドライバ(ターゲット編)

2022/12/15 社内勉強会向け資料です。
TDDでLEDデバイスドライバをターゲットマイコンで実施する考えをまとめました。

リンクが有効な資料はこちらにあります。
https://www.docswell.com/s/juraruming/KN4MW5-2022-12-15-210619

k-abe

December 16, 2022
Tweet

More Decks by k-abe

Other Decks in Programming

Transcript

  1. ʲ࿈ଓߨ࠲ #7ʳTDD #3 LED ド ϥΠ バ (λʔ ήοτฤ) 2022/12/15

    ύʔιϧςΫϊϩδʔελοϑגࣜձࣾ Ѩ෦ߞೋ [email protected] ૊ΈࠐΈιϑτ΢ΣΞجૅ
  2. • ࣗݾ঺հ • ࢀՃऀҰݴίϝϯτ • ߨ࠲։࠵ͷഎܠɾ໨త • ຊ೔ͷςʔϚʲLED ド ϥΠ

    バ (λʔήοτฤ)ʳ • TDDֶशͷࢀߟ • ࢀՃऀײ૝ • ࣍ճ༧ࠂ ໨࣍ 2
  3. • ͳʹ͔ςʔϚΛܾΊͯɺιϑτ΢ΣΞ։ൃͷ্ྲྀ޻ఔ͔ΒԼྲྀ޻ఔ·Ͱઆ ໌͢Δߨ࠲Λ։࠵͠ɺεΩϧΞοϓΛਤΔɻ ɹ˙#1 ཁٻ࢓༷ͷཧղɹࢿྉɾهࣄ ɹ˙#2 ཁٻ࢓༷ͷ࢓༷Խɹࢿྉɾهࣄ ɹ˙ઃܭɹ ɹɹ˔#3 ֓ཁɹࢿྉɾهࣄ

    ɹɹ˔#4 ৄࡉɹࢿྉɾهࣄ ɹ˙TDD ɹɹ˔#5 ςετۦಈ։ൃ#1 ͸͡ΊͷҰาɹࢿྉɾهࣄ ɹɹ˔#6 ςετۦಈ։ൃ#2 LEDυϥΠό(ϗετPCฤ)ɹࢿྉɾهࣄ ɹɹ˔#7 ςετۦಈ։ൃ#3 LEDυϥΠό(λʔήοτฤ) ˒͍·͜͜ ɹɹ˔#8 ɹɹ˔#9 ɹɹ ߨ࠲։࠵ͷഎܠɾ໨త 5
  4. • LED ド ϥΠ バ (λʔήοτฤ)ͱ͸Կ͔? • λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ • ૊ࠐΈιϑτ΢ΣΞͷςετઓུ

    • λʔήοτͰTDD͢Δ۩ମతํ๏ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (λʔήοτฤ)ʳ 8
  5. • LED ド ϥΠ バ (λʔήοτฤ)ͱ͸Կ͔? • λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ • ૊ࠐΈιϑτ΢ΣΞͷςετઓུ

    • λʔήοτͰTDD͢Δ۩ମతํ๏ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (λʔήοτฤ)ʳ 9
  6. • LED ド ϥΠ バ (λʔήοτฤ)ͱ͸Կ͔? • λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ • ૊ࠐΈιϑτ΢ΣΞͷςετઓུ

    • λʔήοτͰTDD͢Δ۩ମతํ๏ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (λʔήοτฤ)ʳ 13
  7. ʲϝϦοτʳ ▪ϗετɺλʔήοτͷҧ͍Λ֬ೝͰ͖Δɻ •ΞʔΩςΫνϟͷҧ͍ ྫ) intܕͷΞυϨεԋࢉ ɹϗετ) 32bitɾ64bitͷCPU intܕͷαΠζ 4όΠτ ɹλʔήοτ)

    16bitϚΠίϯ intܕͷαΠζ2byte ɹ΋͠ɺintܕͷϙΠϯλΞυϨεԋࢉͳͲ͍ͯͨ͠Βڍಈ͕ҟͳΔɻ ྫ) ΤϯσΟΞϯ ɹϏοάɾϦτϧΤϯσΟΞϯʹґଘ͢ΔίʔυͩͬͨΒڍಈ͕ҟͳΔɻ λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ 16
  8. • LED ド ϥΠ バ (λʔήοτฤ)ͱ͸Կ͔? • λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ • ૊ࠐΈιϑτ΢ΣΞͷςετઓུ

    • λʔήοτͰTDD͢Δ۩ମతํ๏ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (λʔήοτฤ)ʳ 20
  9. • LED ド ϥΠ バ (λʔήοτฤ)ͱ͸Կ͔? • λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ • ૊ࠐΈιϑτ΢ΣΞͷςετઓུ

    • λʔήοτͰTDD͢Δ۩ମతํ๏ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (λʔήοτฤ)ʳ 22
  10. ▪࣮૷ྫͷ঺հ ϗετɾλʔήοτͰTDD͢Δͱ͖ͷσΟϨΫτϦߏ੒Ҋ(Ϗϧυɾಈ࡞ະ֬ೝ) ɹ λʔήοτͰTDD͢Δ۩ମతํ๏ 31 host: ϗετͰTDD͢Δͱ͖ͷϑΝΠϧΛ֨ೲ͢Δɻ target: λʔήοτͰTDD͢Δͱ͖ͷϑΝΠϧΛ֨ೲ͢Δɻ include:

    ΠϯΫϧʔυϑΝΠϧ֨ೲ༻ɻϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δɻ src: ιʔεϑΝΠϧ֨ೲ༻ɻϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δɻ tests: ςετίʔυ֨ೲ༻ɻϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δɻ •ϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δ΋ͷ͸host, targetσΟϨΫτϦͷ֎ʹஔ͘ͱ͍͏ํ਑ɻ ɹTDDֶशͷࢀߟ(4)Λࢀߟʹ͍͍ͤͯͨͩͨ͞ɻ
  11. ▪ ࣮૷ྫͷ঺հ ςετίʔυ(HallSensorLedDriverTest.cpp)Λλʔήοτ޲͚ʹमਖ਼͢Δඞཁ͋Γ // υϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δ TEST(HallSensorLedDriver, LedsOffAfterCreate) { unsigned char

    virtualLeds = 0xff; HallSensorLedDriver_Create(&virtualLeds); BYTES_EQUAL(0, virtualLeds); } // ϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δ TEST(HallSensorLedDriver, TurnOnHallULed) { unsigned char virtualLeds; HallSensorLedDriver_Create(&virtualLeds); HallSensorLedDriver_TurnOn(0x04); BYTES_EQUAL(0x04, virtualLeds); } // ϗʔϧηϯαʔU͕0ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϑʹ͢Δ TEST(HallSensorLedDriver, TurnOffHallULed) { unsigned char virtualLeds; HallSensorLedDriver_Create(&virtualLeds); HallSensorLedDriver_TurnOn(0x04); HallSensorLedDriver_TurnOff(0x04); BYTES_EQUAL(0x00, virtualLeds); } λʔήοτͰTDD͢Δ۩ମతํ๏ 33 ϗετͷ৔߹͸virtualLeds͸೚ ҙͷΞυϨεͰྑ͔ͬͨ(LED͕ͳ ͍ͨΊ)ɻ
  12. ▪࣮૷ྫͷ঺հ ϓϩμΫτίʔυ(HallSensorLedDriver.c)Λλʔήοτ޲ ͚ʹमਖ਼ void HallSensorLedDriver_Create(unsigned char* address) { // *address

    = 0; hallSensorLedsAddress = address; *hallSensorLedsAddress = 0; } void HallSensorLedDriver_Destroy(void) { } void HallSensorLedDriver_TurnOn(unsigned char ledBitNumber) { *hallSensorLedsAddress = 0x04; } void HallSensorLedDriver_TurnOff(unsigned char ledBitNumber){ *hallSensorLedsAddress = 0x00; } λʔήοτͰTDD͢Δ۩ମతํ๏ 34 ɾλʔήοτͷ৔߹͸*_CreateͰ LEDΛফ౮͢ΔॳظԽॲཧ͕ඞ ཁɻ
  13. • ςʔϚͷલఏઆ໌ ʲCQ EVΧʔτʳͱ͸??? ɾಈը1: ૸ߦத ɾಈը2: ج൘Λ֦େ աڈʹॻ͍ٕͨज़ॻ(EV Χʔτ

    で ࢝ΊΔϞ デ ϧ ベ ʔε։ൃ)Λϕʔεʹઆ໌͠·͢ɻ هࡌՕॴɿʲୈ1ষ EVΧʔτͱ͸Կ͔ʳ ࢀߟʲςʔϚͷલఏઆ໌ʳ 40