- మల్టీ-కోర్ ప్రాసెసర్ యొక్క ప్రయోజనాలు
- ESP32 మరియు FreeRTOS
- ESP32 కోర్ ID ని కనుగొనడం
- ESP32 డ్యూయల్ కోర్ ప్రోగ్రామింగ్
ESP8266, ESP-12E, వంటి వారి Wi-Fi కార్యాచరణలకు ESP గుణకాలు ప్రాచుర్యం పొందాయి. ఇవన్నీ Wi-Fi కార్యాచరణతో శక్తివంతమైన మైక్రోకంట్రోలర్ మాడ్యూల్స్. మునుపటి ESP మాడ్యూళ్ళ కంటే శక్తివంతమైన మరియు బహుముఖమైన మరో ESP మాడ్యూల్ ఉంది- దాని పేరు ESP32. ఇది బ్లూటూత్ మరియు వై-ఫై కనెక్టివిటీని కలిగి ఉంది మరియు మేము ఇప్పటికే ESP32 యొక్క BLE సామర్థ్యాలను వివరించాము మరియు అనేక IoT ప్రాజెక్టులలో ESP32 ను ఉపయోగించాము. కానీ చాలా తక్కువ మందికి ESP32 డ్యూయల్ కోర్ మైక్రోకంట్రోలర్ అని తెలుసు.
ESP32 లో రెండు 32-బిట్ టెన్సిలికా ఎక్స్టెన్సా ఎల్ఎక్స్ 6 మైక్రోప్రాసెసర్లు ఉన్నాయి, ఇది శక్తివంతమైన డ్యూయల్ కోర్ (కోర్ 0 మరియు కోర్ 1) మైక్రోకంట్రోలర్గా చేస్తుంది. ఇది సింగిల్-కోర్ మరియు డ్యూయల్ కోర్ అనే రెండు వేరియంట్లలో లభిస్తుంది. గణనీయమైన ధర వ్యత్యాసం లేనందున డ్యూయల్ కోర్ వేరియంట్ మరింత ప్రాచుర్యం పొందింది.
ఆర్డునో ఐడిఇ, ఎస్ప్రెస్సిఫ్ ఐడిఎఫ్, లువా ఆర్టిఒఎస్ మొదలైనవాటిని ఉపయోగించి ESP32 ను ప్రోగ్రామ్ చేయవచ్చు. ఆర్డునో ఐడిఇతో ప్రోగ్రామింగ్ చేస్తున్నప్పుడు, కోడ్ కోర్ 1 లో మాత్రమే నడుస్తుంది ఎందుకంటే కోర్ 0 ఇప్పటికే ఆర్ఎఫ్ కమ్యూనికేషన్ కోసం ప్రోగ్రామ్ చేయబడింది. ఈ ట్యుటోరియల్ ఇక్కడ రెండు ఆపరేషన్లను ఒకేసారి చేయడానికి ESP32 యొక్క రెండు కోర్లను ఎలా ఉపయోగించాలో చూపిస్తాము. ఇక్కడ మొదటి పని ఆన్బోర్డ్ ఎల్ఈడీని రెప్ప వేయడం మరియు రెండవ పని DHT11 సెన్సార్ నుండి ఉష్ణోగ్రత డేటాను పొందడం.
మొదట ఒకే కోర్ కంటే మల్టీ-కోర్ ప్రాసెసర్ యొక్క ప్రయోజనాలను చూద్దాం.
మల్టీ-కోర్ ప్రాసెసర్ యొక్క ప్రయోజనాలు
- ఏకకాలంలో పనిచేయడానికి 2 కంటే ఎక్కువ ప్రక్రియలు ఉన్నప్పుడు మల్టీ-కోర్ ప్రాసెసర్లు ఉపయోగపడతాయి.
- పని వేర్వేరు కోర్ల మధ్య పంపిణీ చేయబడినందున, దాని వేగం పెరుగుతుంది మరియు ఒకే సమయంలో బహుళ ప్రక్రియలను పూర్తి చేయవచ్చు.
- విద్యుత్ వినియోగాన్ని తగ్గించవచ్చు ఎందుకంటే ఏదైనా కోర్ నిష్క్రియ మోడ్లో ఉన్నప్పుడు ఆ సమయంలో ఉపయోగంలో లేని పెరిఫెరల్స్ను మూసివేయడానికి ఉపయోగించవచ్చు.
- డ్యూయల్-కోర్ ప్రాసెసర్లు సింగిల్-కోర్ ప్రాసెసర్ల కంటే తక్కువసార్లు వేర్వేరు థ్రెడ్ల మధ్య మారాలి, ఎందుకంటే అవి ఒకేసారి రెండు బదులు ఒకేసారి రెండు నిర్వహించగలవు.
ESP32 మరియు FreeRTOS
ESP32 బోర్డు ఇప్పటికే FreeRTOS ఫర్మ్వేర్ను ఇన్స్టాల్ చేసింది. FreeRTOS అనేది ఓపెన్ సోర్స్ రియల్ టైమ్ ఆపరేటింగ్ సిస్టమ్, ఇది మల్టీ టాస్కింగ్లో చాలా ఉపయోగకరంగా ఉంటుంది. RTOS వనరులను నిర్వహించడానికి మరియు సిస్టమ్ పనితీరును పెంచడానికి సహాయపడుతుంది. FreeRTOS వేర్వేరు ప్రయోజనాల కోసం అనేక API ఫంక్షన్లను కలిగి ఉంది మరియు ఈ API లను ఉపయోగించి, మేము పనులను సృష్టించవచ్చు మరియు వాటిని వేర్వేరు కోర్లలో అమలు చేయగలము.
FreeRTOS API ల యొక్క పూర్తి డాక్యుమెంటేషన్ ఇక్కడ చూడవచ్చు. రెండు కోర్లలో పనిచేసే మల్టీ టాస్కింగ్ అప్లికేషన్ను రూపొందించడానికి మేము మా కోడ్లోని కొన్ని API లను ఉపయోగించడానికి ప్రయత్నిస్తాము.
ESP32 కోర్ ID ని కనుగొనడం
ఇక్కడ మేము ESP32 లోకి కోడ్ను అప్లోడ్ చేయడానికి Arduino IDE ని ఉపయోగిస్తాము. కోడ్ నడుస్తున్న కోర్ ఐడిని తెలుసుకోవడానికి, ఒక API ఫంక్షన్ ఉంది
xPortGetCoreID ()
ఈ ఫంక్షన్లు నడుస్తున్న కోర్ ఐడిని తెలుసుకోవడానికి ఈ ఫంక్షన్ను శూన్య సెటప్ () మరియు శూన్య లూప్ () ఫంక్షన్ నుండి పిలుస్తారు.
దిగువ స్కెచ్ను అప్లోడ్ చేయడం ద్వారా మీరు ఈ API ని పరీక్షించవచ్చు:
void setup () { Serial.begin (115200); సీరియల్.ప్రింట్ ("సెటప్ () ఫంక్షన్ కోర్లో నడుస్తుంది:"); సీరియల్.ప్రింట్ల్న్ (xPortGetCoreID ()); } గర్జన లూప్ () { Serial.print ("లూప్ () ఫంక్షన్ కోర్ నడుస్తున్న:"); సీరియల్.ప్రింట్ల్న్ (xPortGetCoreID ()); }
పై స్కెచ్ను అప్లోడ్ చేసిన తరువాత, సీరియల్ మానిటర్ను తెరవండి మరియు క్రింద చూపిన విధంగా రెండు ఫంక్షన్లు కోర్ 1 లో నడుస్తున్నట్లు మీరు కనుగొంటారు.
పై పరిశీలనల నుండి, డిఫాల్ట్ ఆర్డునో స్కెచ్ ఎల్లప్పుడూ కోర్ 1 పై నడుస్తుందని నిర్ధారించవచ్చు.
ESP32 డ్యూయల్ కోర్ ప్రోగ్రామింగ్
Arduino IDE ESP32 కోసం FreeRTOS కి మద్దతు ఇస్తుంది మరియు FreeRTOS API లు రెండు కోర్లలోనూ స్వతంత్రంగా అమలు చేయగల పనులను సృష్టించడానికి మాకు అనుమతిస్తాయి. టాస్క్ అంటే బోర్డు మీద మెరిసే దారి, ఉష్ణోగ్రత పంపడం మొదలైనవి వంటి కొన్ని ఆపరేషన్ చేసే కోడ్.
రెండు కోర్లలో అమలు చేయగల పనులను సృష్టించడానికి క్రింది ఫంక్షన్ ఉపయోగించబడుతుంది. ఈ ఫంక్షన్లో, మనకు ప్రాధాన్యత, కోర్ ఐడి మొదలైన కొన్ని వాదనలు ఇవ్వాలి.
ఇప్పుడు, టాస్క్ మరియు టాస్క్ ఫంక్షన్ సృష్టించడానికి క్రింది దశలను అనుసరించండి.
1. మొదట, శూన్య సెటప్ ఫంక్షన్లో పనులను సృష్టించండి. ఇక్కడ మనం రెండు టాస్క్లను క్రియేట్ చేస్తాము, ఒకటి ప్రతి 0.5 సెకన్ల తర్వాత ఎల్ఈడీ మెరిసేందుకు మరియు మరొక పని ప్రతి 2 సెకన్ల తర్వాత ఉష్ణోగ్రత పఠనం పొందడం.
xTaskCreatePinnedToCore () ఫంక్షన్ 7 వాదనలు పడుతుంది:
- విధిని అమలు చేయడానికి ఫంక్షన్ పేరు (టాస్క్ 1)
- విధికి ఇచ్చిన ఏదైనా పేరు (“టాస్క్ 1”, మొదలైనవి)
- పదానికి కేటాయించిన స్టాక్ పరిమాణం (1 పదం = 2 బైట్లు)
- టాస్క్ ఇన్పుట్ పరామితి (NULL కావచ్చు)
- పని యొక్క ప్రాధాన్యత (0 అతి తక్కువ ప్రాధాన్యత)
- టాస్క్ హ్యాండిల్ (NULL కావచ్చు)
- టాస్క్ నడుస్తున్న కోర్ ఐడి (0 లేదా 1)
ఇప్పుడు, xTaskCreatePinnedToCore () ఫంక్షన్లో అన్ని ఆర్గ్యుమెంట్లను ఇవ్వడం ద్వారా లీడ్ను మెరిసేలా టాస్క్ 1 ను సృష్టించండి.
xTaskCreatePinnedToCore (టాస్క్ 1 కోడ్, "టాస్క్ 1", 10000, NULL, 1, NULL, 0);
అదేవిధంగా, టాస్క్ 2 కోసం టాస్క్ 2 ను సృష్టించండి మరియు 7 వ ఆర్గ్యుమెంట్లో కోర్ ఐడి 1 ను చేయండి.
xTaskCreatePinnedToCore (టాస్క్ 2 కోడ్, "టాస్క్ 2", 10000, NULL, 1, NULL, 1);
పని యొక్క సంక్లిష్టతను బట్టి మీరు ప్రాధాన్యత మరియు స్టాక్ పరిమాణాన్ని మార్చవచ్చు.
2. ఇప్పుడు, మేము టాస్క్ 1 కోడ్ మరియు టాస్క్ 2 కోడ్ ఫంక్షన్ను అమలు చేస్తాము . ఈ విధులు అవసరమైన పని కోసం కోడ్ను కలిగి ఉంటాయి. మా విషయంలో, మొదటి పని దారితీస్తుంది మరియు మరొక పని ఉష్ణోగ్రతను పొందుతుంది. కాబట్టి శూన్య సెటప్ ఫంక్షన్ వెలుపల ప్రతి పనికి రెండు వేర్వేరు ఫంక్షన్లను చేయండి.
0.5 సెకన్ల తర్వాత ఆన్-బోర్డ్ మెరిసే టాస్క్ 1 కోడ్ ఫంక్షన్ క్రింద చూపిన విధంగా అమలు చేయబడుతుంది.
టాస్క్ 1 కోడ్ను రద్దు చేయండి (శూన్యమైన * పరామితి) { సీరియల్.ప్రింట్ ("టాస్క్ 1 కోర్లో నడుస్తోంది"); సీరియల్.ప్రింట్ల్న్ (xPortGetCoreID ()); (;;) {// అనంతమైన లూప్ డిజిటల్ రైట్ (దారితీసింది, అధికం); ఆలస్యం (500); digitalWrite (దారితీసింది, LOW); ఆలస్యం (500); } }
అదేవిధంగా, ఉష్ణోగ్రత పొందడానికి టాస్క్ 2 కోడ్ ఫంక్షన్ను అమలు చేయండి .
శూన్యమైన టాస్క్ 2 కోడ్ (శూన్యమైన * పివిపారామీటర్లు) { సీరియల్.ప్రింట్ ("టాస్క్ 2 కోర్లో నడుస్తోంది"); సీరియల్.ప్రింట్ల్న్ (xPortGetCoreID ()); (;;) { ఫ్లోట్ t = dht.readTemperature (); సీరియల్.ప్రింట్ ("ఉష్ణోగ్రత:"); సీరియల్.ప్రింట్ (టి); ఆలస్యం (2000); } }
3. ఇక్కడ శూన్య లూప్ ఫంక్షన్ ఖాళీగా ఉంటుంది. లూప్ మరియు సెటప్ ఫంక్షన్ కోర్ 1 పై నడుస్తుందని మాకు ఇప్పటికే తెలుసు కాబట్టి మీరు కోర్ 1 టాస్క్ను శూన్య లూప్ ఫంక్షన్లో కూడా అమలు చేయవచ్చు.
ఇప్పుడు కోడింగ్ భాగం ముగిసింది, కాబట్టి టూల్స్ మెనులో ESP32 బోర్డ్ను ఎంచుకోవడం ద్వారా Arduino IDE ని ఉపయోగించి కోడ్ను అప్లోడ్ చేయండి. మీరు ESP32 యొక్క D13 ను పిన్ చేయడానికి DHT11 సెన్సార్ను కనెక్ట్ చేశారని నిర్ధారించుకోండి.
ఇప్పుడు ఫలితాలను క్రింద చూపిన విధంగా సీరియల్ మానిటర్ లేదా ఆర్డునో IDE లో పర్యవేక్షించవచ్చు:
ESP32 యొక్క ద్వంద్వ కోర్లను ఉపయోగించి ఒకేసారి పలు పనులను అమలు చేయడం ద్వారా రియల్ టైమ్ సిస్టమ్ వంటి సంక్లిష్ట అనువర్తనాలను నిర్మించవచ్చు.
డెమో వీడియోతో పాటు పూర్తి కోడ్ క్రింద ఇవ్వబడింది.