- மல்டி கோர் செயலியின் நன்மைகள்
- ESP32 மற்றும் FreeRTOS
- ESP32 கோர் ஐடியைக் கண்டறிதல்
- ESP32 இரட்டை கோர் புரோகிராமிங்
ESP8266, ESP-12E போன்ற Wi-Fi செயல்பாடுகளுக்கு ESP தொகுதிகள் பிரபலமாக உள்ளன. இவை அனைத்தும் Wi-Fi செயல்பாடுகளைக் கொண்ட சக்திவாய்ந்த மைக்ரோகண்ட்ரோலர் தொகுதிகள். முந்தைய ESP தொகுதிக்கூறுகளை விட சக்திவாய்ந்த மற்றும் பல்துறை திறன் கொண்ட இன்னும் ஒரு ESP தொகுதி உள்ளது- அதன் பெயர் ESP32. இது புளூடூத் மற்றும் வைஃபை இணைப்புகளைக் கொண்டுள்ளது, மேலும் நாங்கள் ஏற்கனவே ESP32 இன் BLE திறன்களை விளக்கினோம் மற்றும் பல IoT திட்டங்களில் ESP32 ஐப் பயன்படுத்தினோம். ஆனால் ESP32 ஒரு இரட்டை கோர் மைக்ரோகண்ட்ரோலர் என்பது மிகச் சிலருக்குத் தெரியும்.
ESP32 இரண்டு 32-பிட் டென்சிலிகா எக்ஸ்டென்சா எல்எக்ஸ் 6 நுண்செயலிகளைக் கொண்டுள்ளது, இது ஒரு சக்திவாய்ந்த இரட்டை கோர் (கோர் 0 மற்றும் கோர் 1) மைக்ரோகண்ட்ரோலரை உருவாக்குகிறது. இது ஒற்றை கோர் மற்றும் இரட்டை கோர் ஆகிய இரு வகைகளில் கிடைக்கிறது. ஆனால் டூயல் கோர் மாறுபாடு மிகவும் பிரபலமானது, ஏனெனில் குறிப்பிடத்தக்க விலை வேறுபாடு இல்லை.

Arduino IDE, Espressif IDF, Lua RTOS போன்றவற்றைப் பயன்படுத்தி ESP32 ஐ திட்டமிடலாம். Arduino IDE உடன் நிரலாக்கும்போது, குறியீடு கோர் 1 இல் மட்டுமே இயங்குகிறது, ஏனெனில் கோர் 0 ஏற்கனவே RF தகவல்தொடர்புக்காக திட்டமிடப்பட்டுள்ளது. ஆனால் இந்த டுடோரியல் இங்கே இரண்டு செயல்பாடுகளை ஒரே நேரத்தில் செய்ய ESP32 இன் இரண்டு கோர்களையும் எவ்வாறு பயன்படுத்துவது என்பதைக் காண்பிப்போம். இங்கே முதல் பணி ஆன்-போர்டு எல்.ஈ. ஐ ஒளிரச் செய்வதோடு, இரண்டாவது பணி டி.எச்.டி 11 சென்சாரிலிருந்து வெப்பநிலை தரவைப் பெறுவதும் ஆகும்.
ஒற்றை மையத்தின் மீது மல்டி கோர் செயலியின் நன்மைகளை முதலில் பார்ப்போம்.
மல்டி கோர் செயலியின் நன்மைகள்
- ஒரே நேரத்தில் வேலை செய்ய 2 க்கும் மேற்பட்ட செயல்முறைகள் இருக்கும்போது மல்டி கோர் செயலிகள் பயனுள்ளதாக இருக்கும்.
- வேலை வெவ்வேறு கோர்களிடையே விநியோகிக்கப்படுவதால், அதன் வேகம் அதிகரிக்கிறது மற்றும் பல செயல்முறைகளை ஒரே நேரத்தில் முடிக்க முடியும்.
- மின் நுகர்வு குறைக்கப்படலாம், ஏனென்றால் எந்த மையமும் செயலற்ற பயன்முறையில் இருக்கும்போது, அந்த நேரத்தில் பயன்பாட்டில் இல்லாத சாதனங்களை மூட பயன்படுத்தலாம்.
- இரட்டை கோர் செயலிகள் ஒற்றை-கோர் செயலிகளைக் காட்டிலும் வெவ்வேறு நூல்களுக்கு இடையில் குறைவாக மாற வேண்டும், ஏனெனில் அவை ஒரே நேரத்தில் இரண்டிற்கு பதிலாக ஒரே நேரத்தில் இரண்டைக் கையாள முடியும்.
ESP32 மற்றும் FreeRTOS
ESP32 போர்டில் ஏற்கனவே FreeRTOS நிலைபொருள் நிறுவப்பட்டுள்ளது. FreeRTOS என்பது ஒரு திறந்த மூல நிகழ்நேர இயக்க முறைமையாகும், இது பல்பணிக்கு மிகவும் பயனுள்ளதாக இருக்கும். RTOS வளங்களை நிர்வகிக்க மற்றும் கணினி செயல்திறனை அதிகரிக்க உதவுகிறது. FreeRTOS ஆனது வெவ்வேறு நோக்கங்களுக்காக பல API செயல்பாடுகளைக் கொண்டுள்ளது மற்றும் இந்த API களைப் பயன்படுத்தி, நாங்கள் பணிகளை உருவாக்கி அவற்றை வெவ்வேறு கோர்களில் இயக்கலாம்.
FreeRTOS API களின் முழுமையான ஆவணங்களை இங்கே காணலாம். இரு கோர்களிலும் இயங்கும் பல்பணி பயன்பாட்டை உருவாக்க எங்கள் குறியீட்டில் சில API களைப் பயன்படுத்த முயற்சிப்போம்.
ESP32 கோர் ஐடியைக் கண்டறிதல்
குறியீட்டை ESP32 இல் பதிவேற்ற இங்கே Arduino IDE ஐப் பயன்படுத்துவோம். குறியீடு இயங்கும் கோர் ஐடியை அறிய, ஒரு API செயல்பாடு உள்ளது
xPortGetCoreID ()
இந்த செயல்பாடுகள் இயங்கும் மைய ஐடியை அறிய இந்த செயல்பாட்டை வெற்றிட அமைவு () மற்றும் வெற்றிட லூப் () செயல்பாட்டிலிருந்து அழைக்கலாம்.
கீழேயுள்ள ஓவியத்தை பதிவேற்றுவதன் மூலம் இந்த API ஐ சோதிக்கலாம்:
void setup () { Serial.begin (115200); சீரியல்.பிரண்ட் ("அமைவு () செயல்பாடு மையத்தில் இயங்குகிறது:"); Serial.println (xPortGetCoreID ()); } வெற்றிட சுழற்சி () { சீரியல்.பிரண்ட் ("லூப் () செயல்பாடு மையத்தில் இயங்குகிறது:"); Serial.println (xPortGetCoreID ()); }
மேலே உள்ள ஓவியத்தை பதிவேற்றிய பிறகு, சீரியல் மானிட்டரைத் திறக்கவும், கீழே காட்டப்பட்டுள்ளபடி இரண்டு செயல்பாடுகளும் கோர் 1 இல் இயங்குவதை நீங்கள் காண்பீர்கள்.

மேலே உள்ள அவதானிப்புகளிலிருந்து, இயல்புநிலை ஆர்டுயினோ ஸ்கெட்ச் எப்போதும் கோர் 1 இல் இயங்குகிறது என்று முடிவு செய்யலாம்.
ESP32 இரட்டை கோர் புரோகிராமிங்
Arduino IDE ESP32 க்கான FreeRTOS ஐ ஆதரிக்கிறது மற்றும் FreeRTOS API கள் இரு கோர்களிலும் சுயாதீனமாக இயங்கக்கூடிய பணிகளை உருவாக்க எங்களை அனுமதிக்கின்றன. பணி என்பது குறியீட்டின் ஒரு பகுதி, இது ஒளிரும் லெட், வெப்பநிலை அனுப்புதல் போன்ற பலகையில் சில செயல்பாடுகளை செய்கிறது.
இரண்டு கோர்களிலும் இயங்கக்கூடிய பணிகளை உருவாக்க கீழேயுள்ள செயல்பாடு பயன்படுத்தப்படுகிறது. இந்த செயல்பாட்டில், முன்னுரிமை, கோர் ஐடி போன்ற சில வாதங்களை நாம் கொடுக்க வேண்டும்.
இப்போது, பணி மற்றும் பணி செயல்பாட்டை உருவாக்க பின்வரும் படிகளைப் பின்பற்றவும்.
1. முதலில், வெற்றிட அமைவு செயல்பாட்டில் பணிகளை உருவாக்கவும். இங்கே நாம் இரண்டு பணிகளை உருவாக்குவோம், ஒன்று ஒவ்வொரு 0.5 விநாடிகளுக்குப் பிறகு எல்.ஈ.டி ஒளிரும் மற்றும் மற்றொரு பணி ஒவ்வொரு 2 விநாடிகளுக்குப் பிறகு வெப்பநிலை வாசிப்பைப் பெறுவது.
xTaskCreatePinnedToCore () செயல்பாடு 7 வாதங்களை எடுக்கும்:
- பணியைச் செயல்படுத்துவதற்கான செயல்பாடு பெயர் (பணி 1)
- பணிக்கு கொடுக்கப்பட்ட எந்த பெயரும் (“task1”, போன்றவை)
- பணிக்கு ஒதுக்கப்பட்ட அளவு அளவு (1 சொல் = 2 பைட்டுகள்)
- பணி உள்ளீட்டு அளவுரு (NULL ஆக இருக்கலாம்)
- பணியின் முன்னுரிமை (0 என்பது மிகக் குறைந்த முன்னுரிமை)
- பணி கைப்பிடி (NULL ஆக இருக்கலாம்)
- பணி இயங்கும் கோர் ஐடி (0 அல்லது 1)
இப்போது, xTaskCreatePinnedToCore () செயல்பாட்டில் உள்ள அனைத்து வாதங்களையும் கொடுத்து தலைமையை ஒளிரச் செய்ய Task1 ஐ உருவாக்கவும்.
xTaskCreatePinnedToCore (Task1code, "Task1", 10000, NULL, 1, NULL, 0);
இதேபோல், டாஸ்க் 2 க்கு டாஸ்க் 2 ஐ உருவாக்கி, 7 வது வாதத்தில் கோர் ஐடி 1 ஐ உருவாக்கவும்.
xTaskCreatePinnedToCore (Task2code, "Task2", 10000, NULL, 1, NULL, 1);
பணியின் சிக்கலைப் பொறுத்து நீங்கள் முன்னுரிமை மற்றும் அடுக்கு அளவை மாற்றலாம்.
2. இப்போது, Task1code மற்றும் Task2code செயல்பாட்டை செயல்படுத்துவோம். இந்த செயல்பாடுகளில் தேவையான பணிக்கான குறியீடு உள்ளது. எங்கள் விஷயத்தில், முதல் பணி தலைமைக் கண் சிமிட்டும், மற்றொரு பணி வெப்பநிலையைப் பெறும். எனவே ஒவ்வொரு பணிக்கும் இரண்டு தனித்தனி செயல்பாடுகளை வெற்றிட அமைவு செயல்பாட்டிற்கு வெளியே செய்யுங்கள்.
கீழே காட்டப்பட்டுள்ளபடி 0.5 விநாடிகளுக்குப் பிறகு இயக்கப்படும் போர்டில் ஒளிரும் பணி 1 குறியீடு செயல்பாடு.
Task1code ஐ வெற்றிடமாக்கு (வெற்றிட * அளவுரு) { Serial.print ("பணி 1 மையத்தில் இயங்கும்"); Serial.println (xPortGetCoreID ()); for (;;) {// எல்லையற்ற லூப் டிஜிட்டல்ரைட் (தலைமையிலான, உயர்); தாமதம் (500); digitalWrite (தலைமையிலான, LOW ஐ); தாமதம் (500); } }
இதேபோல், வெப்பநிலையைப் பெறுவதற்கு Task2code செயல்பாட்டை செயல்படுத்தவும்.
வெற்றிட பணி 2 குறியீடு (வெற்றிடத்தை * pvParameters) { சீரியல்.பிரண்ட் ("பணி 2 மையத்தில் இயங்கும்"); Serial.println (xPortGetCoreID ()); (;;) { மிதவை t = dht.readTemperature (); சீரியல்.பிரண்ட் ("வெப்பநிலை:"); சீரியல்.பிரண்ட் (டி); தாமதம் (2000); } }
3. இங்கே வெற்றிட லூப் செயல்பாடு காலியாக இருக்கும். லூப் மற்றும் அமைவு செயல்பாடு கோர் 1 இல் இயங்குகிறது என்பதை நாங்கள் ஏற்கனவே அறிந்திருப்பதால், கோர் 1 பணியை வெற்றிட லூப் செயல்பாட்டிலும் செயல்படுத்தலாம்.
இப்போது குறியீட்டு பகுதி முடிந்துவிட்டது, எனவே கருவிகள் மெனுவில் ESP32 போர்டைத் தேர்ந்தெடுப்பதன் மூலம் Arduino IDE ஐப் பயன்படுத்தி குறியீட்டைப் பதிவேற்றவும். ESP32 இன் D13 ஐ இணைக்க DHT11 சென்சாரை இணைத்துள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.

இப்போது கீழே காட்டப்பட்டுள்ளபடி சீரியல் மானிட்டர் அல்லது அர்டுடினோ ஐடிஇ ஆகியவற்றில் முடிவுகளை கண்காணிக்க முடியும்:

நிகழ்நேர அமைப்பு போன்ற சிக்கலான பயன்பாடுகளை ESP32 இன் இரட்டை கோர்களைப் பயன்படுத்தி ஒரே நேரத்தில் பல பணிகளை இயக்குவதன் மூலம் உருவாக்க முடியும்.
டெமோ வீடியோவுடன் முழுமையான குறியீடு கீழே கொடுக்கப்பட்டுள்ளது.
