• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Komunikacja UART
#2
Chciałbym Ci coś podpowiedzieć ze swojego doświadczenia gdy pisałem program do obsługi modemu GSM.
Za jego pomocą odczytywałem SMSy i je wysyłałem.
Napotkałem wówczas na pewną trudność z obsługą stringów w funkcji Serial.print("string").

Trudność ta objawiła się gdy zebrało się w programie ileś tam komend Serial.print("string").
Program nagle zaczął się wykładać i działy się dziwne rzeczy.
Doszedłem do tego, że zapychała mi się pamięc RAM w procku (tak to sobie wytłumaczyłem).

Nie mogłem ograniczyć ilości wysyłanych stringów a docelowo potrzebnych mi ich było ponad 80.
Problem rozwiązałem wykorzystując pamięć FLASH mikrokontrolera.

Poniżej przykład z którego możesz skorzystać aby uniknąć problemu z jakim ja się borykałem.
Efekt pracy programu możesz zobaczyć w serial monitorze IDE Arduino.

Kod:
// FLASH MEMORY

// ---------------------------
// Zdefiniowanie pamięci FLASH
// ---------------------------
#include <avr/pgmspace.h>

// -------------------------------------
// Zdefiniowanie tekstów w pamięci FLASH
// -------------------------------------
const char tekst_0 [] PROGMEM = "Dowolny tekst";
const char tekst_1 [] PROGMEM = "Nastepny tekst";
const char tekst_2 [] PROGMEM = "Jeszcze jeden tekst";
const char tekst_3 [] PROGMEM = "... i jeszcze jeden";
const char tekst_4 [] PROGMEM = "... itd...";

const char* const tablicaFLASH [] PROGMEM = {
 tekst_0, tekst_1, tekst_2, tekst_3, tekst_4
};

char bufor [100];
byte poz;

// -------------------
// Ustawienia programu
// -------------------
void setup()  
{
 Serial.begin (9600);
}

// ---------------------
// Główna pętla programu
// ---------------------
void loop()
{
 STRING();
 Serial.println(bufor);
 
 poz ++;
 if (poz > 4) poz = 0;
 
 delay(1000);
}

// ---------------------------------------------------
// Funkcja ładująca STRING'a z pamięci FLASH do bufora
// ---------------------------------------------------
void STRING ()
{
 strcpy_P (bufor, (char*) pgm_read_word (& (tablicaFLASH [poz])));
}

Pozdr.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
  


Wiadomości w tym wątku
Komunikacja UART - przez MarJanPol - 30-12-2017, 19:55
RE: Komunikacja UART - przez ANT - 30-12-2017, 21:53
RE: Komunikacja UART - przez MarJanPol - 30-12-2017, 22:56
RE: Komunikacja UART - przez MarJanPol - 30-12-2017, 23:17
RE: Komunikacja UART - przez ANT - 30-12-2017, 23:18
RE: Komunikacja UART - przez MarJanPol - 30-12-2017, 23:37

Skocz do:


Przeglądający: 1 gości