Slide 1

Slide 1 text

ʲ࿈ଓߨ࠲ #7ʳTDD #3 LED ド ϥΠ バ (λʔ ήοτฤ) 2022/12/15 ύʔιϧςΫϊϩδʔελοϑגࣜձࣾ Ѩ෦ߞೋ [email protected] ૊ΈࠐΈιϑτ΢ΣΞجૅ

Slide 2

Slide 2 text

• ࣗݾ঺հ • ࢀՃऀҰݴίϝϯτ • ߨ࠲։࠵ͷഎܠɾ໨త • ຊ೔ͷςʔϚʲLED ド ϥΠ バ (λʔήοτฤ)ʳ • TDDֶशͷࢀߟ • ࢀՃऀײ૝ • ࣍ճ༧ࠂ ໨࣍ 2

Slide 3

Slide 3 text

• Ѩ෦ɹߞೋʢ͋΂ɹ͜͏͡ʣ • ٕज़ຊ෦ɹػిٕज़෦ɹट౎ݍ2G • [email protected] • ҩྍػث։ൃ • ૊ࠐΈιϑτ΢ΣΞ։ൃɻCݴޠɺϕΞϝλϧͷ։ൃۀ຿ܦݧ͕΄ͱΜͲɻ • LAPRASϙʔτϑΥϦΦɿhttps://lapras.com/public/k-abe • twitter: @juraruming ࣗݾ঺հ 3

Slide 4

Slide 4 text

ࣗ͝༝ʹҰݴίϝϯτ͍͚ͨͩ·͢ͱ͋Γ͕͍ͨͰ͢ɻ ྫ) ໊͓લ ྫ) ࠓճͷߨ࠲ʹظ଴͢Δ͜ͱ ྫ) ͓࢓ࣄ಺༰(࿩ͤΔൣғͰ) ྫ) ιϑτ΢ΣΞ։ൃ୲౰޻ఔ(ཁٻ࢓༷ͷఆٛ?ઃܭ?࣮૷?ςετ?) ࢀՃऀҰݴίϝϯτ 4

Slide 5

Slide 5 text

• ͳʹ͔ςʔϚΛܾΊͯɺιϑτ΢ΣΞ։ൃͷ্ྲྀ޻ఔ͔ΒԼྲྀ޻ఔ·Ͱઆ ໌͢Δߨ࠲Λ։࠵͠ɺεΩϧΞοϓΛਤΔɻ ɹ˙#1 ཁٻ࢓༷ͷཧղɹࢿྉɾهࣄ ɹ˙#2 ཁٻ࢓༷ͷ࢓༷Խɹࢿྉɾهࣄ ɹ˙ઃܭɹ ɹɹ˔#3 ֓ཁɹࢿྉɾهࣄ ɹɹ˔#4 ৄࡉɹࢿྉɾهࣄ ɹ˙TDD ɹɹ˔#5 ςετۦಈ։ൃ#1 ͸͡ΊͷҰาɹࢿྉɾهࣄ ɹɹ˔#6 ςετۦಈ։ൃ#2 LEDυϥΠό(ϗετPCฤ)ɹࢿྉɾهࣄ ɹɹ˔#7 ςετۦಈ։ൃ#3 LEDυϥΠό(λʔήοτฤ) ˒͍·͜͜ ɹɹ˔#8 ɹɹ˔#9 ɹɹ ߨ࠲։࠵ͷഎܠɾ໨త 5

Slide 6

Slide 6 text

ςʔϚɿ ʲطଘ૊ࠐΈ੡඼(CQ EVΧʔτ)ͷ ϚΠίϯΛҠ২͢Δʳ ߨ࠲։࠵ͷഎܠɾ໨త 6

Slide 7

Slide 7 text

ςʔϚɿʲطଘ૊ࠐΈ੡඼ͷϚΠίϯΛҠ২͢Δʳ ର৅૷ஔɿCQ EVΧʔτ എܠɿ ɾߨࢣ͕͓࣋ͬͯΓɺର৅૷ஔͷυϝΠϯ஌ࣝΛཧղ͍ͯ͠Δɻ ɾιϑτ΢ΣΞͷߏ଄Λཧղ͍ͯ͠Δɻ ɾର৅૷ஔͷϚΠίϯ͕৽ن࠾༻ඇਪ঑඼ʹͳͬͨɻ ɹ⇛ֶशɾεΩϧΞοϓͷͨΊผϚΠίϯʹҠ২ͯ͠ΈΑ͏!!!ɹ ߨ࠲։࠵ͷഎܠɾ໨త 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

• λʔήοτͱ͸? ɹϚΠίϯλʔήοτϘʔυͰTDD͢Δ͜ͱΛࢦ͢ɻ ɹલճ͸ϚΠίϯΛίϯύΠϧ͢ΔPC(ϗετ)ͰTDDͨ͠ɻ • LEDυϥΠόͱ͸? • ϚΠίϯλʔήοτϘʔυͱ͸? ɹ࣍ϖʔδҎ߱ʹॻ͖·͢ɻ LED ド ϥΠ バ (λʔήοτฤ)ͱ͸Կ͔? 10

Slide 11

Slide 11 text

ɾLEDυϥΠόͱ͸? ▪EVΧʔτͷLEDΛ఺౮ɾফ౮͢ΔػೳΛ࣋ͭσόΠευϥΠόͱ͢Δɻ ɹϞʔλʔݱࡏҐஔͱ੍ޚͷঢ়گΛͭͷ-&%Ͱࢹ֮ԽͰ͖Δɻ 11

Slide 12

Slide 12 text

●λʔήοτϚΠίϯͷબఆ ɹSTϚΠΫϩΤϨΫτϩχΫεͷSTM32ϚΠίϯϘʔυʲNUCLEO- F446REʳʹܾΊͨɻ ɾSTM32F446RET6 64ϐϯ ɾArm Cortex-M4ίΞ 180MHz ɾϑϥογϡ: 512Kbyte ɾSRAM: 128Kbyte ɾArm MbedରԠ 12

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

ʲϝϦοτʳ ▪λʔήοτͰ΋ಈ࡞֬ೝͰ͖҆৺Ͱ͖Δ ▪ϗετɺλʔήοτͷҧ͍Λ֬ೝͰ͖Δɻ ●ϋʔυ΢ΣΞͷॳظԽ ●ΞʔΩςΫνϟͷҧ͍ ●࣮ߦ؀ڥͷҧ͍(ελοΫɺͦͷଞ) ●ίϯύΠϥͷҧ͍ ●ϥΠϒϥϦͷڍಈͷҧ͍ λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ 14

Slide 15

Slide 15 text

ʲϝϦοτʳ ▪ϗετɺλʔήοτͷҧ͍Λ֬ೝͰ͖Δɻ ●ϋʔυ΢ΣΞͷॳظԽ ɹϗετͰ͸ϋʔυ΢ΣΞΛॳظԽ͢ΔίʔυΛॻ͔ͳ͍ɻ ɹλʔήοτͰ͸ϋʔυ΢ΣΞΛςετ͢ΔͨΊʹ͸ॳظԽͷ࣮૷͕ඞ ཁɹ(LEDυϥΠόͰ͋Ε͹GPIOͷग़ྗϙʔτͷઃఆͳͲ)ɻ λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ 15

Slide 16

Slide 16 text

ʲϝϦοτʳ ▪ϗετɺλʔήοτͷҧ͍Λ֬ೝͰ͖Δɻ ●ΞʔΩςΫνϟͷҧ͍ ྫ) intܕͷΞυϨεԋࢉ ɹϗετ) 32bitɾ64bitͷCPU intܕͷαΠζ 4όΠτ ɹλʔήοτ) 16bitϚΠίϯ intܕͷαΠζ2byte ɹ΋͠ɺintܕͷϙΠϯλΞυϨεԋࢉͳͲ͍ͯͨ͠Βڍಈ͕ҟͳΔɻ ྫ) ΤϯσΟΞϯ ɹϏοάɾϦτϧΤϯσΟΞϯʹґଘ͢ΔίʔυͩͬͨΒڍಈ͕ҟͳΔɻ λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ 16

Slide 17

Slide 17 text

ʲϝϦοτʳ ▪ϗετɺλʔήοτͷҧ͍Λ֬ೝͰ͖Δɻ ●࣮ߦ؀ڥͷҧ͍(ελοΫɺͦͷଞ) ɹλʔήοτϚΠίϯͷ։ൃ؀ڥʹ෇ଐ͍ͯ͠ΔελʔτΞοϓϧʔνϯͰ σϑΥϧτͰઃఆ͍ͯ͠ΔελοΫαΠζ500byteͩͬͨͱԾఆɻ ɹ͋Δؔ਺ͷ಺෦ม਺Ͱ500byteͷ഑ྻΛએݴͨ͠৔߹ɻ ɹϗετͰ͋Ε͹ಈ͘ͱࢥ͏͕λʔήοτϚΠίϯͰ͸όάΔՄೳੑ͋ Γɻ ɹϗετͰ͋Ε͹ߟྀ͠ͳͯ͘΋ྑ͍͜ͱ͕(໰୊ʹͳΒͳ͍͜ͱ͕ଟ͍)ɺ λʔήοτϚΠίϯͰ͸ߟྀ͕ඞཁͳ৔߹͕͋Δɻ λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ 17

Slide 18

Slide 18 text

ʲϝϦοτʳ ▪ϗετɺλʔήοτͷҧ͍Λ֬ೝͰ͖Δɻ ●ίϯύΠϥͷҧ͍ ɾ࠷దԽʹΑΓϗετɾλʔήοτͰڍಈ͕ҟͳΔ৔߹ɻ ɾϝϞϦͷΞϥΠϝϯτ ●ϥΠϒϥϦͷڍಈͷҧ͍ ɾඪ४ϥΠϒϥϦͷڍಈͷҧ͍ɾόάͳͲɻ ɹྫ) sprintf͕ϗετɾλʔήοτͰಈ͖͕ҧ͏ͳͲɻ λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ 18

Slide 19

Slide 19 text

ʲσϝϦοτʳ ɹσϝϦοτ͸͋Μ·Γࢥ͍͖ͭ·ͤΜͰͨ͠ɻ ɹλʔήοτͰ΋TDDͰ͖ΔͷͰ͋Ε͹ͨ͠ํ͕ྑ͍ͱ͸ࢥ͏ɻ ▪ςετίʔυΛॻ͘ͷͰ͕͔͔࣌ؒΔɻ ɹʲςετΛॻ͔ͳ͍͔Β͕࣌ؒͳ͘ͳΔʳͱ͍͏໊ݴ΋͋Γ·͢ɻ λʔήοτͰTDDΛ͢ΔϝϦοτɾσϝϦοτ 19

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

▪૊ࠐΈιϑτ΢ΣΞ։ൃݱ৔ͷ೰Έ ●1ͭͷϋʔυͰςελʔ͕ෳ਺ ɹ͍͔ʹϋʔυ΢ΣΞΛ࢖ΘͣʹςετͰ͖Δ͔͕ϙΠϯτɻ ɹ ●ࢀߟʹͳͬͨهࣄ ɹΦϒδΣΫτࢦ޲ͷຊ࣭ ɾґଘੑͷ௿͍ιϑτ΢ΣΞϞδϡʔϧͷઃܭɻ ɾγϛϡϨʔλΛ࢖༻ͨ͠ςετ؀ڥͷߏங ɹɹɹ TDDΛ΍Δ৔߹ϗετͰ΍Δ͜ͱɺλʔήοτͰ΍Δ͜ͱΛ໌֬Խ͠ςετͷ ઓུΛཱͯΔ͜ͱ͕ॏཁͱײͨ͡ɻ ૊ࠐΈιϑτ΢ΣΞͷςετઓུ 21

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

▪λʔήοτͷ؀ڥ ▪ํ਑ ▪࣮૷ྫͷ঺հ ▪ಈ࡞֬ೝ݁Ռ λʔήοτͰTDD͢Δ۩ମతํ๏ 23

Slide 24

Slide 24 text

▪λʔήοτͷ؀ڥ ▪ํ਑ ▪࣮૷ྫͷ঺հ ▪ಈ࡞֬ೝ݁Ռ λʔήοτͰTDD͢Δ۩ମతํ๏ 24

Slide 25

Slide 25 text

▪λʔήοτͷ؀ڥ ɾSTM32CubeIDE Version: 1.11.0 ɾςετϑϨʔϜϫʔΫ: CppUTest 4.0 λʔήοτͰTDD͢Δ۩ମతํ๏ 25

Slide 26

Slide 26 text

▪λʔήοτͷ؀ڥ ▪ํ਑ ▪࣮૷ྫͷ঺հ ▪ಈ࡞֬ೝ݁Ռ λʔήοτͰTDD͢Δ۩ମతํ๏ 26

Slide 27

Slide 27 text

▪ํ਑ ɾϗετͱςετίʔυΛڞ༗͢Δɻ ɾϗετͱλʔήοτͰίʔυͷ੾Γସ͑͸ϚΫϩͰߦ͏ɻ ɾLED఺౮͸STM32ͷϋʔυ΢ΣΞந৅ԽϨΠϠʔ(௨শɿHAL)ͷίʔυ Λ࢖༻͢Δɻ ɹϝϦοτ) ૊ࠐΈ؆୯ σϝϦοτ) ɹɾॲཧͷ৑௕Խɺ଎౓ͷ໰୊(͕͋Δ͔΋͠Εͳ͍ɾɾɾ) ɹɾϋʔυ΢ΣΞந৅ԽϨΠϠͷίʔυࣗମͷόά͕͋Δ͔΋͠Εͳ͍ɻ λʔήοτͰTDD͢Δ۩ମతํ๏ 27

Slide 28

Slide 28 text

▪ํ਑ ʼϋʔυ΢ΣΞந৅ԽϨΠϠʔɹGPIOͷWriteͷྫ) λʔήοτͰTDD͢Δ۩ମతํ๏ 28

Slide 29

Slide 29 text

▪λʔήοτͷ؀ڥ ▪ํ਑ ▪࣮૷ྫͷ঺հ ▪ಈ࡞֬ೝ݁Ռ λʔήοτͰTDD͢Δ۩ମతํ๏ 29

Slide 30

Slide 30 text

▪࣮૷ྫͷ঺հ ɹϗετͰTDDͨ͠ͱ͖ͷσΟϨΫτϦߏ੒ λʔήοτͰTDD͢Δ۩ମతํ๏ 30

Slide 31

Slide 31 text

▪࣮૷ྫͷ঺հ ϗετɾλʔήοτͰTDD͢Δͱ͖ͷσΟϨΫτϦߏ੒Ҋ(Ϗϧυɾಈ࡞ະ֬ೝ) ɹ λʔήοτͰTDD͢Δ۩ମతํ๏ 31 host: ϗετͰTDD͢Δͱ͖ͷϑΝΠϧΛ֨ೲ͢Δɻ target: λʔήοτͰTDD͢Δͱ͖ͷϑΝΠϧΛ֨ೲ͢Δɻ include: ΠϯΫϧʔυϑΝΠϧ֨ೲ༻ɻϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δɻ src: ιʔεϑΝΠϧ֨ೲ༻ɻϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δɻ tests: ςετίʔυ֨ೲ༻ɻϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δɻ ●ϗετɾλʔήοτͰڞ௨Ͱ࢖༻͢Δ΋ͷ͸host, targetσΟϨΫτϦͷ֎ʹஔ͘ͱ͍͏ํ਑ɻ ɹTDDֶशͷࢀߟ(4)Λࢀߟʹ͍͍ͤͯͨͩͨ͞ɻ

Slide 32

Slide 32 text

▪࣮૷ྫͷ঺հ λʔήοτσΟϨΫτϦߏ੒Ҋ(Ϗϧυɾಈ࡞ະ֬ೝ) ɹ λʔήοτͰTDD͢Δ۩ମతํ๏ 32 ▪446re_test: ϝΠϯϓϩδΣΫτɻϚΠίϯʹॻ͖ࠐ ΉϑΝΠϧΛ࡞੒͢Δɻ

Slide 33

Slide 33 text

▪ ࣮૷ྫͷ঺հ ςετίʔυ(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͕ͳ ͍ͨΊ)ɻ

Slide 34

Slide 34 text

▪࣮૷ྫͷ঺հ ϓϩμΫτίʔυ(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Λফ౮͢ΔॳظԽॲཧ͕ඞ ཁɻ

Slide 35

Slide 35 text

▪λʔήοτͷ؀ڥ ▪ํ਑ ▪࣮૷ྫͷ঺հ ▪ಈ࡞֬ೝ݁Ռ λʔήοτͰTDD͢Δ۩ମతํ๏ 35

Slide 36

Slide 36 text

▪ಈ࡞֬ೝ݁Ռ ɹظ଴͍͍͍ͨͩͯͨΒਃ͠༁͋Γ·ͤΜɻ ɹλʔήοτͰTDDΛಈ࡞֬ೝ͢Δ·ͰࢸΓ·ͤΜͰͨ͠ɻ λʔήοτͰTDD͢Δ۩ମతํ๏ 36

Slide 37

Slide 37 text

1. ςετۦಈ։ൃʹΑΔ૊ΈࠐΈϓϩάϥϛϯά 2. ʦಈըͰղઆʧ࿨ా୎ਓͷ“ςετۦಈ։ൃ”ߨ࠲ هࣄҰཡ 3. ʰςετۦಈ։ൃʹΑΔ૊ΈࠐΈϓϩάϥϛϯάʱΛಡΜͰֶΜͩ͜ͱ 4. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(1) 5. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(2)(׬) TDDֶशͷࢀߟ 37

Slide 38

Slide 38 text

• ੋඇͱ΋ߨ࠲ͷײ૝ΛҰݴ͓ئ͍͠·͢ɻ ࢀՃऀײ૝ 38

Slide 39

Slide 39 text

ɹTDDͷߨ࠲ͷ࣍ճ͸ʲ1/xx(x) 19:30ʙ20:30ʳͰ։࠵༧ఆͰ͢ɻ ʲ࿈ଓߨ࠲ #8ʳςετۦಈ։ൃ#4 xxx ɹ ࢀՃͷํɺੋඇͱ΋ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ ࣍ճ༧ࠂ 39 ߟ ͑ த ɾ ɾ ɾ

Slide 40

Slide 40 text

• ςʔϚͷલఏઆ໌ ʲCQ EVΧʔτʳͱ͸??? ɾಈը1: ૸ߦத ɾಈը2: ج൘Λ֦େ աڈʹॻ͍ٕͨज़ॻ(EV Χʔτ で ࢝ΊΔϞ デ ϧ ベ ʔε։ൃ)Λϕʔεʹઆ໌͠·͢ɻ هࡌՕॴɿʲୈ1ষ EVΧʔτͱ͸Կ͔ʳ ࢀߟʲςʔϚͷલఏઆ໌ʳ 40

Slide 41

Slide 41 text

͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ɻ ऴΘΓ 41