Új hozzászólás Aktív témák

  • _q

    addikt

    válasz Teasüti #9272 üzenetére

    Elnézést ha nem fogalmaztam egyértelműen. Leírom konkrétabban.

    Van egy hőmérséklet mérés, kijelzőre adat kiíratás, wifi-n NTP lekérés, webserver futtatás. Ez lenne a master és van hozzá egy slave eszköz amivel az előző felsorolás bővül, espnow kommunikáció. Ezeket gondoltam két magon futtatni úgy, hogy ami wifi-vel kapcsolatos az megy az 0-ás magon: NTP lekérés, webserver (espnow meg callback-el megy, így azt csak feltételezem, hogy szintén 0-ás magon megy, a fórumon is volt szó róla, illetve amit linkeltem oldal is arra hivatkozik, hogy wifi-s dolgok 0-ás magon futnak). A kijelző és I2C hőmérséklet olvasás megy az 1-es magon. Eredetileg legalább is ezt terveztem. Sajnos azonban azt tapasztaltam, hogy bizonyos idő elteltével (volt hogy fél nap és volt hogy 2 napos futás után jött elő) az odáig jó érték helyett a hőmérőtől már nem a megfelelő adat jön, hanem 125 °C, amit olyankor küld, ha nincs bekötve a hőmérő. Egészen a resetig ezt küldi folyamatosan. Reset után ismét a jó érték látható.

    Hivatkozva a linkelt oldalon írtakra:
    "The two cores are named Protocol CPU (PRO_CPU) and Application CPU (APP_CPU). That basically means the PRO_CPU processor handles the WiFi, Bluetooth and other internal peripherals like SPI, I2C, ADC etc. The APP_CPU is left out for the application code."

    Innen jött a feltételezés, nem amiatt "akad" össze az I2C olvasás, mert valójában függetlenül attól, hogy melyik magon futtatom az I2C-t, az a 0-ás magon fog lefutni, de ott meg nincs neki prioritás adva, legalább is általam nem, mivel ugye én az 1-es magon gondoltam futtatni, ott adtam az I2C task-nak prioritást. Lehet, hogy a valójában lefuttatott I2C és Wifi és tényleg a 0-ás magon fut, és összeakad, ezért jön hibás érték a kiolvasásnál? Igaz itt felmerül a kérdés, hogy ha 1-1 feltételezett összeakadás történik, akkor utána miért nem jön a következő reset-ig jó érték? Azt nehéz elképzelni, hogy folyamatosan összeakadna a 2 kommunikáció.

    Ha az általad javasolt szerint, mindent áttennék core 1-re, mivel ugye minden ciklikus, akkor a core 0á-n semmi se lenne. Vagy esetleg csináljam azt, hogy core 1-en futtassak egy task-ot, ami ütemezi a core 0-án a taskokat, amiket 1x meghívok, majd törlöm? Így is ciklikus lesz, de task szempontból 1x fut csak le.

    Még egy dolog jöhet szóba, amit nem tudom mennyire helyesen adok meg. Globális változóként adom át a 2 mag között a hőmérséklet változó értékét. Ezt úgy teszem, mint ha nem task-okat futtatnék, setup() előtt hozok létre egy pl.: float temp változót.

    [ Szerkesztve ]

Új hozzászólás Aktív témák