ඒකකය 3 / 9

Embedded Systems සහ Microcontroller Code Generation

ලාභ:

  • AI සමඟ Arduino/STM32/ESP32 සඳහා ලේඛනය සහ දෘඪාංග සන්දර්භය ලබා දී ඇති කාවැද්දූ කේතය ජනනය කිරීමේ හැකියාව
  • AI ප්‍රතිදානයේ බාධා කිරීම්, ටයිමර් සහ අවහිර නොවන ලූප වැනි කාවැද්දූ රටා හඳුනා ගැනීමට සහ නිවැරදි කිරීමට හැකියාව
  • ජනනය කරන ලද කේතය දෘඪාංගයට උඩුගත කිරීමට පෙර මතකය, තත්‍ය කාලීන සහ ආරක්ෂාව අනුව සමාලෝචනය කිරීමේ හැකියාව

මෙකට්‍රොනික්ස් හි ක්ෂුද්‍ර පාලකය යනු අදහස් භෞතික ලෝකය හමුවන ස්ථානයයි. Arduino, STM32, ESP32 වැනි කාඩ්පත්; එය සංවේදක කියවයි, ක්‍රියාකරුවන් ධාවනය කරයි, සන්නිවේදනය කරයි, සහ මේ සියල්ල සීමිත මතකය, සීමිත සැකසුම් බලය සහ දැඩි කාල අවශ්‍යතා යටතේ සිදු කරයි. මෙම ක්ෂේත්‍රය තුළ කෘතිම බුද්ධිය ඉතා ප්‍රයෝජනවත් වේ: එයට සංවේදකයේ දත්ත පත්‍රිකාවක් මත පදනම්ව ලියාපදිංචි සැකසුම් උපුටා ගත හැකිය, සන්නිවේදන ප්‍රොටෝකෝලයක් කේතනය කළ හැකිය, ටයිමර් බාධාවක් සැකසිය හැකිය. නමුත් කාවැද්දූ පද්ධති යනු AI වඩාත්ම “ඒත්තු ගැන්වෙන අසත්‍යයන්” නිපදවන එක් අංශයකි; රෙජිස්ටර් ලිපින, බිට් මාස්ක් සහ කාල හැසිරීම් පුවරුවට විශේෂිත වන අතර එක් බිට් දෝෂයක් මුළු හැසිරීමටම බාධා කරයි. මෙම ඒකකය තුළ, අපි AI සමඟ කේත උත්පාදනය කර ඇති ආකාරය සහ එය දෘඪාංග වෙත පැටවීමට පෙර එය සමාලෝචනය කරන්නේ කෙසේද යන්න ආවරණය කරයි.

Pure Software වලින් Embedded Code වල වෙනස

ඩෙස්ක්ටොප් වැඩසටහනක මතකය, මෙහෙයුම් පද්ධතිය සහ නිදොස්කරණයේ පහසුව බොහෝ ඇත. කාවැද්දූ කේතයේ මේවායින් බොහොමයක් නොමැත:

ප්රමාණය

ඩෙස්ක්ටොප්

කාවැද්දූ පද්ධතිය

මතකය

GB මට්ටම

KB මට්ටම (උදා: 2 KB RAM)

කාලය

සාමාන්යයෙන් නම්යශීලී

තද, නියම වේලාව

නිදොස් කිරීම

පහසු (නිදොස්කරණය, ලොග්)

දෘඪ (JTAG, අනුක්‍රමික, LED)

දෝෂ ප්රතිඵලය

වැඩසටහන බිඳ වැටේ

ක්‍රියාකරු/දෘඪාංග හානි විය හැක

සම්පත් ප්රවේශය

OS සාරාංශ

රෙජිස්ටර් වෙත සෘජු ප්රවේශය

මෙම වෙනස්කම් AI ප්‍රතිදානය ඇගයීම සඳහා ඔබේ නිර්ණායක තීරණය කරයි: මතක භාවිතය, තත්‍ය කාලීන (අවහිර නොකිරීම) සහ දෘඪාංග ලේඛනයේ නිරවද්‍යතාවය සැමවිටම ඔබගේ පිරික්සුම් ලැයිස්තුවේ ඉහළින්ම පවතී.

අවහිර කරන්නා එදිරිව අවහිර නොවන කේතය

ආරම්භකයින් විසින් සිදු කරන ලද වඩාත් පොදු වැරැද්ද (සහ බොහෝ විට AI විසින් සිදු කරනු ලැබේ) ප්‍රමාදය () භාවිතා කිරීමයි. ප්‍රමාදය (1000) තත්පර 1ක් සඳහා ප්‍රොසෙසරය අගුළු දමයි; මෙම කාල පරිච්ෙඡ්දය තුළ, වෙනත් සංවේදක කියවිය නොහැක, බොත්තම් පාලනය කළ නොහැක. මෙය mechatronics හි පිළිගත නොහැකිය. ඒ වෙනුවට, මිලි() මත පදනම් වූ අවහිර නොවන රටාවක් භාවිතා වේ.

// BAD: blocker -- processor හට තත්පර 1ක void loop() {digitalWrite(LED, HIGH); ප්රමාදය (1000); // සෑම දෙයක්ම ඩිජිටල් රයිට් නතර කරයි (LED, අඩු); ප්රමාදය (1000); // හදිසි බොත්තමක් මේ අවස්ථාවේදී කියවිය නොහැක!}// හොඳයි: අවහිර නොවන -- ලූපය අවහිර කර නැත, වෙනත් කාර්යයන් ක්‍රියාත්මක වන්නේ නම් (nowMs - previousMs >= interval) {presentMs = nowMs; ledStatus = !ledStatus; ඩිජිටල් රයිට් (LED, ledStatus); } buttonCheck(); // සෑම චක්‍ර සංවේදකයකම ක්‍රියාත්මක විය හැකRead(); //ඕනෑම ලූපයක ධාවනය කළ හැක}

අවහිර නොවන රටාව කාවැද්දූ mechatronics හි පදනම වේ: පාලන ලූපය අඛණ්ඩව ගලා යයි, කිසිදු කාර්යයක් තවත් අගුලු නොදමයි. කේතය ලිවීමේදී "ප්‍රමාදය භාවිතා නොකරන්න, මිලිස් මත පදනම් නොවන අවහිර කිරීම් ලියන්න" යනුවෙන් AI හට පැවසීම ප්‍රතිදානයේ ගුණාත්මක භාවය සෘජුවම වැඩි දියුණු කරයි.

ඉඟිය: ප්‍රමාදය සොයන්න( AI වෙතින් කාවැද්දූ කේතයෙහි. ඔබ ප්‍රධාන පාලන ලූපයේ ප්‍රමාදයක් දුටුවහොත්, බොහෝ විට එම කේතය තත්‍ය කාලීන පද්ධතියකට සුදුසු නොවන අතර නැවත ලිවිය යුතුය.

බාධා කිරීම් සහ ටයිමර්

අපි ප්‍රධාන ලූපයේ රැඳී සිටීම වෙනුවට බාධා කිරීම් සමඟ කාල තීරණාත්මක සිදුවීම් (කේතක ස්පන්දනය, බොත්තම, ආවර්තිතා නියැදීම) ග්‍රහණය කර ගනිමු. බාධා කිරීම් දින චර්යාව (ISR) කෙටියෙන් සහ ප්‍රවේශමෙන් ලිවිය යුතුය: ප්‍රමාදයන්, Serial.print හෝ දිගු ගණනය කිරීම් එහි නොමැත; හවුල් විචල්‍යයන් වාෂ්පශීලී ලෙස සලකුණු කර ඇත.

වාෂ්පශීලී දිගු සංකේතක කවුන්ටරය = 0; // ISR සහ loop බෙදා ඇත -> වාෂ්පශීලී තත්ත්වය void enkoderISR() { // කෙටි ISR: ගණන් කරන්න, (digitalRead(ENC_B)) enkoderCounter++ නම් වෙනත් වැඩක් නොකරන්න; වෙනත් encoderCounter--;}නිෂ්චිත සැකසුම() {pinMode(ENC_A, INPUT_PULLUP); pinMode(ENC_B, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(ENC_A), enkoderISR, RISING);}void loop() {long counter; බාධා කිරීම් (); //පරමාණුක කියවීම් කවුන්ටරය සඳහා කෙටි බාධා කිරීම් = encoderCounter; බාධා කිරීම් (); //කවුන්ටරය සමඟ ආරක්ෂිතව ගනුදෙනු කරන්න...}

මෙම උදාහරණයේ තීරනාත්මක කරුණු තුනක් වන්නේ AI බොහෝ විට මග හැරෙන ස්ථානයි: (1) හවුල් කේතීකරණ කවුන්ටරය 'වාෂ්පශීලී' විය යුතුය, නැතහොත් සම්පාදක ප්‍රශස්තිකරණයට යාවත්කාලීනයන් මග හැරෙනු ඇත; (2) ISR කෙටි විය යුතුය; (3) ප්‍රධාන ලූපයේ බහු-බයිට් විචල්‍යයක් කියවන විට, පරමාණුක කියවීම සඳහා බාධා කිරීම් කෙටි කාලයක් සඳහා වසා දැමිය යුතුය, එසේ නොමැතිනම් ISR කියවීමේදී මැදිහත් විය හැකි අතර අර්ධ/දූෂිත අගය කියවිය හැක (ජාතික තත්ත්වය). මෙම තුන AI කේතයේ තිබේදැයි පරීක්ෂා කිරීමට වග බලා ගන්න.

නිරවද්‍යතාවය සහ දත්ත පත්‍රිකාව ලියාපදිංචි කරන්න

AI හට සංවේදකයක ලියාපදිංචි ලිපිනය හෝ MCU එකක වින්‍යාස බිට් එක විශ්වාසදායක ලෙස වැරදි ලෙස නිරූපණය කළ හැක. උදාහරණයක් ලෙස, MPU6050 IMU එකක බල කළමනාකරණ ලේඛනය 0x6B වේ; AI මෙය 0x6A ලෙස ලබා දෙන්නේ නම්, කේතය සම්පාදනය කර ඇත, එය වැඩ කරන බව පෙනේ, නමුත් සංවේදකය අවදි නොවේ. එවැනි දෝෂ අනාවරණය වන්නේ දත්ත පත්‍රිකාව හා සසඳන විට පමණි.

// MPU6050 අවදි කිරීම: දත්ත පත්‍රිකාවට අනුව PWR_MGMT_1 = 0x6B, අගය 0x00# MPU_ADDR 0x68# define PWR_MGMT_1 0x6B // <-- VERIFY වෙතින් datasheetWire.beginTransmission(MPU_ADDR);Wire.write(PWR_MGMT_1);Wire.write(0x00); // නින්දෙන් අවදි වන්නWire.endTransmission(සත්‍ය);

අවධානය: දත්ත පත්‍රිකාවෙන් AI විසින් ලබා දී ඇති එක් එක් ලියාපදිංචි ලිපිනය, බිට් මාස්ක් සහ I2C/SPI ලිපිනය සත්‍යාපනය කරන්න. මෙම අගයන් කාඩ්පත් සහ චිප් විශේෂිත වේ; AI "මතක" අගය වෙනත් චිප සංශෝධනයකින් විය හැක. වැරදි ලේඛනය නිශ්ශබ්දව වැරදි හැසිරීම් වලට මග පාදයි.

දුර්වල ක්ෂණික / ශක්තිමත් ක්ෂණික

දුර්වල:"ESP32 මත උෂ්ණත්ව සංවේදකය කියවන්න."(මොන සංවේදකයද? කුමන ප්‍රොටෝකෝලයද? කුමන පින්ද? සාමාන්‍ය, බොහෝ විට වැරදි කේතයකි.)STRONG:"GPIO4 වෙතින් ESP32 (Arduino රාමුව) මත DS18B20 උෂ්ණත්ව සංවේදකයක් OneWire සමඟින් කියවන්න. වාරණ නොවන, නියැදිය සෑම තත්පර 1කට වරක්ම ලියන්න. -127 හෝ 85) මතක හේතූන් මත ඔබ භාවිතා කරන සෑම පුස්තකාලයක්ම සහ පින් සම්බන්ධතාවයක් සඳහන් කරන්න, String වෙනුවට char buffer භාවිතා කරන්න.

බලවත් ක්ෂණික; එය චිපය, රාමුව, සංවේදකය, ප්‍රොටෝකෝලය, පින්, නියැදි රටාව, දෝෂ තත්ත්වය සහ මතක සීමාව ලබා දෙයි. මේ ආකාරයෙන් ප්‍රතිදානය සත්‍යාපනය කළ හැකි සහ යථාර්ථවාදී වේ.

Embedded Code සඳහා පිරික්සුම් ලැයිස්තුව සමාලෝචනය කරන්න

AI ප්‍රතිදානය පූරණය කිරීමට පෙර, එය මෙම ලැයිස්තුව හරහා යන්න:

  1. අවහිර කිරීම: ප්‍රධාන ලූපයේ ප්‍රමාදයක් හෝ දිගු අවහිරයක් තිබේද?
  2. වාෂ්පශීලී: ISR සමඟ බෙදාගත් විචල්‍යයන් වාෂ්පශීලීද?
  3. පරමාණුක ප්‍රවේශය: බහු-බයිට් බෙදාගත් විචල්‍ය කියවීමට ආරක්ෂිතද?
  4. ලියාපදිංචි වන්න: ලිපින සහ බිට් වෙස් මුහුණු දත්ත පත්‍රිකාවට අනුකූලද?
  5. මතකය: තන්තු, විශාල අරා, පුනරාවර්තනය KB මට්ටම පිටාර ගැලීමක් ඇති කරයිද?
  6. දෝෂ හැසිරවීම: සංවේදක කියවීමේ දෝෂ, සන්නිවේදන කල් ඉකුත්වීම් හසුරුවන්නේද?
  7. ආරක්ෂිත ආරම්භය: ආරම්භයේදී ක්‍රියාකාරක ප්‍රතිදානයන් ආරක්ෂිත (නිෂ්ක්‍රීය) තත්වයක තබා තිබේද?

කුඩා නඩුව

Embedded systems engineer Baran සතුව AI මගින් ඩ්‍රෝන යානයක් සඳහා IMU කියවන කේතය ලිවීමට ඇත. කේතය සම්පාදනය කර වැඩ කරන බව පෙනේ, නමුත් කෝණ අගයන් අර්ථ විරහිත ය. Baran පිරික්සුම් ලැයිස්තුව යොදයි: දත්ත පත්‍රිකාව සමඟ ලියාපදිංචි ලිපින සංසන්දනය කර AI විසින් ගයිරොස්කෝප් වින්‍යාස ලේඛනය වැරදි ලෙස ප්‍රතිදානය කරන බව සොයා ගනී (0x1B වෙනුවට 0x1A), එබැවින් සංවේදීතා පරිමාණය වැරදියි. නිවැරදි කළ පසු, අගයන් නිරාකරණය වේ. එවිට ප්‍රධාන ලූපයේ ප්‍රමාද (10) දැනුම්දීම්; මෙය මිලි-පාදක ව්‍යුහයකට පරිවර්තනය කිරීම, මන්ද පියාසර පාලන ලූපය අවහිර කිරීම පිළිගත නොහැකි බැවිනි. අවසාන වශයෙන්, එය බෙදාගත් කවුන්ටර විචල්‍යය වාෂ්පශීලී නොවන බව දැක එය එකතු කරයි. AI ඇටසැකිල්ල වේගයෙන් ලබා දුන්නේය; නමුත් සමාලෝචන ලැයිස්තුවට වෙනම දෝෂ තුනක් හසු විය: ලියාපදිංචිය, අවහිර කිරීම සහ වාෂ්පශීලී, සහ දෘඩාංග කිසිසේත්ම අවදානමට ලක් නොවීය.

පොදු වැරදි

  • ප්‍රධාන පාලන ලූපයේ ප්‍රමාදය() භාවිතා කිරීමෙන් තත්‍ය කාලීන ප්‍රතිචාරය විනාශ කිරීම.
  • ISR සමඟ බෙදාගත් විචල්‍යය වාෂ්පශීලී කිරීම සහ නිහඬ දත්ත දූෂණය අත්විඳීමෙන් වළකින්න.
  • බහු-බයිට් බෙදාගත් විචල්‍යයක් පරමාණුක නොවන ලෙස කියවීම සහ ධාවන තත්වයක් උත්පාදනය කිරීම.
  • දත්ත පත්‍රිකාව සමඟ AI විසින් දෙන ලද රෙජිස්ටර්/බිට් වෙස් මුහුණු සත්‍යාපනය නොකිරීම.
  • සීමිත RAM තුළ Strings සහ විශාල අරා භාවිතා කිරීමෙන් මතකය පිටාර ගැලීම නිර්මාණය කිරීම.
  • ක්‍රියාකාරක ප්‍රතිදානයන් මුලින් සුරක්ෂිත කිරීමට අමතක වීම.

සාරාංශයක් ලෙස

  • කාවැද්දූ කේතය; එය සීමිත මතකය, දැඩි වේලාව සහ සෘජු ලියාපදිංචි ප්රවේශය සමඟ ක්රියා කරයි.
  • ප්‍රධාන ලූපය තුළ, ප්‍රමාදය වෙනුවට මිලි-පාදක අවහිර නොවන රටාවක් භාවිතා වේ.
  • ISR කෙටියෙන් තබා ඇත; හවුල් විචල්‍යයන් වාෂ්පශීලී සහ පරමාණුක ප්‍රවේශ විය යුතුය.
  • ලියාපදිංචි ලිපින සහ බිට් ආවරණ සෑම විටම දත්ත පත්‍රිකාවට එරෙහිව සත්‍යාපනය කෙරේ; AI වැරදි විය හැක.
  • මතකය, දෝෂ හැසිරවීම සහ ආරක්ෂිත ආරම්භක තත්ත්වය සැමවිටම පරීක්ෂා කරනු ලැබේ.
  • බලවත් ක්ෂණික; එයට චිප්, රාමුව, සංවේදකය, ප්‍රොටෝකෝලය, පින් සහ සීමාවන් ඇතුළත් වේ.

යෙදුම් කාර්යය

සංවේදකයක් (උදා: DS18B20, MPU6050 හෝ HC-SR04) සහ ක්ෂුද්‍ර පාලකයක් (Arduino/ESP32/STM32) තෝරන්න. මෙම ඒකකයේ ඇති බලගතු කඩිනම් අච්චුව සමඟ අවහිර නොවන කියවීමේ කේතයක් ජනනය කිරීමට AI ට සලස්වන්න. ඉන්පසු සමාලෝචන පිරික්සුම් ලැයිස්තුවේ අයිතම හතක් එකින් එක අනුගමනය කරන්න: දත්ත පත්‍රිකාව සමඟ අවම වශයෙන් එක් රෙජිස්ටර්/පින් අගයක් සංසන්දනය කරන්න, ලූප් ප්‍රමාදයන් සඳහා පරීක්ෂා කරන්න, හවුල් විචල්‍යවල වාෂ්පශීලී තත්ත්වය පරීක්ෂා කරන්න. පළමු උත්සාහයේදී අයිතම කීයක් "සමත් වූවා" සහ කොපමණ නිවැරදි කිරීම් අවශ්‍යද? ඔබ සොයා ගන්නා සෑම ගැටලුවක්ම සහ එය විසඳීම ගැන සටහන් කරන්න.