logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przepisywanie stringa z flasha do ramu

sinuh3 06 Maj 2009 09:49 1034 4
REKLAMA
  • #1 6496179
    sinuh3
    Poziom 17  
    Mam sobie w pamięci flash łańcuszek znaków zadeklarowany o tak:
    
    const char tekst[] PROGMEM = "ala ma kota";


    i funkcję w której przepisuję ją do ramu:

    
    void WriteTextFromFlash ( const char * String ,  char * Data)
      {
      
    unsigned char i=0;
    
       for (i=0 ;i<16 ;i++ )
       {
         Data[i] = pgm_read_byte ( String+i ) ;
       } 
     


    Funkcję wywołuję w następujący sposób:

    WriteTextFromFlash ( tekst, &tekst_w_ram[0]);


    I to działa jak najbardziej.

    Natomiast nie jest to idealne rozwiązanie, bo jak widzicie ten kawałek
    for (i=0 ;i<16 ;i++ )

    jawnie wpisuje ile tych miejsc ma być z flasha przepisanych - a ja bym chciał by to wykrywało nulla na końcu stringa "tekst" i samo sobie wybierało moment zakończenia pętli.

    --
    Sinuhe
  • REKLAMA
  • REKLAMA
  • #3 6496363
    sinuh3
    Poziom 17  
    no bo nie działa. Nigdy nie byłem mistrzem wskaźników, ale kombinuję jakoś tak.

    void WriteTextFromFlash ( const char * String , char * Data)

    for(; ;)
    		{
    		
    				*Data++ = pgm_read_byte (*String++ ) ;
    				if ( ! *Data )
            		break  ;
    		};


    Na lcd mam śmietnik.

    --
    PH
  • REKLAMA
  • Pomocny post
    #4 6496380
    Dr.Vee
    VIP Zasłużony dla elektroda
    Testujesz zły wskaźnik :)
    A poza tym wynajdujesz koło od nowa, bo w avr/pgmspace.h jest już funkcja strcpy_P.

    Pozdrawiam,
    Dr.Vee
  • #5 6496466
    sinuh3
    Poziom 17  
    Testowałem także ten drugi ale strcpy_P zadziałało z buta!
    Dzięki wielgaśne.
REKLAMA