Fråga:
Förvirra om PROGMEM och R "==== () ===="
Mark Estrada
2020-08-31 12:45:08 UTC
view on stackexchange narkive permalink

Jag såg följande kod från https://circuits4you.com/2018/03/10/esp8266-jquery-and-ajax-web-server/ men jag kunde inte förstå den grundligt. ..

Jag tittade på dokumentationen av PROGMEM från detta https://www.arduino.cc/reference/en/language/variables/utilities/progmem/ men kunde inte förstå vikten i koden på varför du ska placera dina variabler i flashminne istället för SRAM (det vanliga minnet?)?

  const char MAIN_page [] PROGMEM = R "====== (<! DOCTYPE html> <html> <head> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" >< / script> <script> $ (dokument) .ready (function ( ) {$ ("p"). klicka (funktion () {$ (detta) .hide ();});}); < / script> < / head> <body> <p> Om du klickar på vilja disappear.< / p> <p>Click mig bort! < / p> <p>Click me too! < / p> <br><hr> <a href = "https://circuits4you.com" >circuits4you.com< / a> < / body> < / html>) ===== ";  

Jag kunde inte heller förstå definitionen av R" ==== () ==== ", vad menas med detta i arduino?

Ett svar:
Majenko
2020-08-31 14:57:10 UTC
view on stackexchange narkive permalink

varför du ska placera dina variabler i flashminne istället för SRAM

Eftersom Arduino bara har en mycket liten mängd minne. Om du har data som aldrig kommer att ändras är det bättre att lagra det i flash (av vilket det finns mycket mer) så att SRAM lämnas gratis för data som ändras .

Jag kunde inte heller förstå definitionen av R "==== () ====", vad menas med detta i arduino?

R betyder "Behandla allt mellan dessa avgränsare som en rå sträng". Det vill säga allt mellan "===== ( och ) =====" . Det är inte en Arduino-sak, utan en allmän C ++-sak ( se här). ===== kan vara vad du vill (inom vissa gränser) så länge det är detsamma både i början och slutet av strängen. Så du kan använda R "- = (Detta är" text ") = -" vilket skulle tilldela strängen Detta är "text" . Det är ett utmärkt sätt att arbeta med långa strängar som kanske vill innehålla " eftersom du annars skulle behöva fly varje " som \ " Så strängen jag visade just nu måste annars skrivas som: "Detta är \" text \ "" , vilket kan bli väldigt rörigt om det finns många " kod > där inne. Det viktiga att komma ihåg är att ) ===== inte får visas i din text någonstans, så se till att det är något riktigt dunkelt.

Tack så mycket för att du tålmodigt hjälper nybörjare!
Detta gäller äldre AVR-arkitekturer. Nyare (till exempel ATMega4809) mappar flash och de andra minnena i datarummet och det finns inget behov av att använda PROGMEM. Detsamma gäller ARM-arkitektur - det finns inget PROGMEM, eftersom det inte finns något behov av att kopiera const-variabler till RAM för att vara tillgängliga direkt.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 4.0-licensen som det distribueras under.
Loading...