Sunday, December 1, 2024

Arduino DMA & IMA. (sinhala)

 

1. Arduino හි Direct Memory Access (DMA).
-

DMA අදාළ වන ආකාරය:
-

• High-End Arduino Board වල: Arduino Due, Arduino Portenta, හෝ ESP32 වැනි පුවරු වල DMA සඳහා සහය දක්වන ක්ෂුද්‍ර පාලක ඇත. DMA බොහෝ විට ADCs, DACs, SPI, හෝ I2C වැනි පර්යන්ත සඳහා මෙම අවස්ථා වලදී භාවිතා වේ.
-

• Arduino හි DMA භාවිතා කරන්නේ ඇයි?

වේගය: සංවේදක දත්ත කියවීම හෝ මතකයෙන් දත්ත මාරු කිරීම වැනි පුනරාවර්තන කාර්යයන් සඳහා CPU මැදිහත් වීම වළක්වයි.
-

තත්‍ය කාලීන අවශ්‍යතා: ශ්‍රව්‍ය සැකසුම්, වීඩියෝ, හෝ අධිවේගී දත්ත ලොග් කිරීම වැනි යෙදුම් සඳහා, DMA අත්‍යවශ්‍ය වේ.
-

කාර්යක්ෂමතාව: දත්ත හුවමාරුව පසුබිමේ සිදු වන විට වෙනත් කාර්යයන් හැසිරවිය හැකි වන පරිදි CPU අක්‍රිය කරයි.

Arduino හි DMA භාවිතය සඳහා උදාහරණ:
-

• ශ්‍රව්‍ය යෙදුම්:

ADC එකකින් ශ්‍රව්‍ය දත්ත කියවීමට DMA භාවිතා කිරීම සහ සැකසීම සඳහා RAM හි ගබඩා කිරීම. -

• LED පාලනය:

WS2812 (NeoPixels) වැනි උසස් LED ධාවකයන්ට සුමට සජීවිකරණ සඳහා DMA භාවිතා කළ හැක. -

• සන්නිවේදනය:

SD කාඩ්පත් වැනි බාහිර උපාංග වෙත විශාල දත්ත කොටස් මාරු කිරීමට DMA සමඟ SPI හෝ I2C සන්නිවේදනය. -

DMA සමඟ Arduino හි අභියෝග:
-

• ප්‍රවේශ මට්ටමේ පුවරු සඳහා සීමිත සහාය: Arduino Uno හෝ Nano වැනි පුවරු සාමාන්‍යයෙන් DMA සඳහා සහය නොදක්වයි.
-

• සංකීර්ණත්වය: DMA පිහිටුවීම සඳහා Arduino IDE මඟින් සෘජුව සහාය නොදක්වන ක්ෂුද්‍ර පාලකයේ දෘඪාංග පිළිබඳ පහළ මට්ටමේ කේතීකරණය සහ අවබෝධය අවශ්‍ය වේ.
-

පුස්තකාල සහාය:

• සමහර පුස්තකාල (උදා., SAMD-පාදක පුවරු සඳහා Adafruit_ZeroDMA) වියුක්ත DMA ක්‍රියාකාරීත්වය, එය Arduino සමඟ භාවිතා කිරීම පහසු කරයි. -

2. Arduino හි වක්‍ර මතක ප්‍රවේශය
-

වක්‍ර මතක ප්‍රවේශය අදාළ වන ආකාරය:

වක්‍ර මතක ප්‍රවේශය යනු දත්ත වෙනුවට මතක ස්ථාන වෙත පොයින්ටර් සමඟ වැඩ කිරීමයි. Arduino Uno වැනි සරල පුවරු වල පවා මෙම සංකල්පය Arduino ක්‍රමලේඛනයේදී බහුලව භාවිතා වේ. -

Arduino හි පොදු භාවිතයන්:
-

Functions වෙත පොයින්ටර් pass කිරීම:

දත්ත වෙනුවට function එක වෙත pointer එකක් යැවීමෙන් විශාල arrays හෝ structures පිටපත් කිරීමෙන් වැළකිය හැක. - void processData(int* data) {

// Work directly on the memory address

}

void loop() {

int array[100];

processData(array); // Pass pointer, not a copy

}
-
ගතික මතක වෙන් කිරීම:

මතකය ගතිකව වෙන් කිරීමට malloc() හෝ new භාවිතා කිරීම සහ පොයින්ටර් හරහා ප්‍රවේශ වීම. -

Peripherals වෙත ප්‍රවේශ වීම:

රෙජිස්ටර් මට්ටමේ වැඩසටහන්කරණය බොහෝ විට දෘඪාංග රෙජිස්ටර් සමඟ අන්තර් ක්‍රියා කිරීමට පොයින්ටර් භාවිතා කරයි.
-
#define PORTB *(volatile uint8_t*)0x25
PORTB = 0xFF; // Directly write to PORTB register
-
Arduino හි වක්‍ර මතක ප්‍රවේශයේ වාසි:

විශාල දත්ත පිටපත් වළක්වා ගැනීමෙන් RAM ඉතිරි කරයි.

සංවේදක දත්ත හෝ ලොග වැනි විශාල දත්ත කට්ටල කාර්යක්ෂමව හැසිරවීම සබල කරයි. -

Arduino හි යථාර්ථවාදී අවස්ථා

සෘජු මතක ප්රවේශය:
-

උදාහරණය: ඔබ ADC එකකින් SD කාඩ් එකකට ශ්‍රව්‍ය දත්ත ප්‍රවාහ කරන බව සිතන්න. DMA භාවිතයෙන්, ADC හට RAM හි බෆරයකට කෙලින්ම ලිවිය හැකි අතර, SPI පර්යන්තයට එම දත්ත CPU බාධාවකින් තොරව SD කාඩ්පතට යැවිය හැක.
-

වක්‍ර මතක ප්‍රවේශය:

උදාහරණය: ඔබට විශාල සංවේදක අරාවක් ඇති අතර, ශ්‍රිතයක් මෙම දත්ත සකසයි. සම්පූර්ණ අරාව පිටපත් කිරීම වෙනුවට, ඔබ ශ්‍රිතයට දර්ශකයක් ලබා දෙයි, මතකය සහ සැකසුම් කාලය ඉතිරි කරයි.
-

Arduino ව්‍යාපෘති සඳහා මෙම සංකල්ප යෙදිය යුතු ආකාරය
-

DMA සඳහා:

Arduino Due, Portenta, හෝ ESP32 වැනි උසස් පුවරු භාවිතා කරන්න.

SPI, ADC, හෝ I2C වැනි පර්යන්ත සඳහා DMA සඳහා සහාය දක්වන පුස්තකාල භාවිතා කරන්න.

DMA හැකියාවන් තේරුම් ගැනීමට ඔබේ මණ්ඩලයේ දත්ත පත්‍රිකාව පර්යේෂණ කරන්න. -

වක්‍ර මතක ප්‍රවේශය සඳහා:

අනවශ්‍ය මතක අනුපිටපත් වළක්වා ගැනීමට පොයින්ටර් භාවිතා කරන්න.

Function වල යොමුව මඟින් arrays හෝ විශාල structures pass කරන්න.

ඔබ කාර්ය සාධනය ප්‍රශස්ත කරන්නේ නම් පහත් මට්ටමේ දෘඪාංග වැඩසටහන් ගවේෂණය කරන්න. -

නිගමනය

DMA සහ වක්‍ර මතක ප්‍රවේශය යන දෙකම Arduino ව්‍යාපෘතිවල භාවිතා කළ හැකි ප්‍රබල මෙවලම් වේ. DMA වඩාත් දෘඪාංග මත රඳා පවතින අතර උසස් පුවරු සඳහා සුදුසු වන අතර, වක්‍ර මතක ප්‍රවේශය සියලුම Arduino වේදිකා හරහා විශ්වීය වශයෙන් අදාළ වේ. මෙම ශිල්පීය ක්‍රම එක්ව, සම්පත් සීමා සහිත ක්ෂුද්‍ර පාලක මත පවා කාර්යක්ෂම, තත්‍ය කාලීන පද්ධති ගොඩනැගීමට ඔබට ඉඩ සලසයි. - තාමත් අපේ group එකේ නැත්තන් group එකට සෙට් වෙන්න :⁣

https://www.facebook.com/groups/paperclipx

මේ group එකේ දාන දේවල් හොඳයි කියල හිතෙනවනම් ඕගොල්ලොන් ගේ යාලුවන්වත් group එකට එකතු කරන්න !⁣

No comments:

Post a Comment