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

[Atmega8] [C] SPRINTF dziwny problem.

vcd_a 26 Paź 2008 16:38 981 0
  • #1 5669784
    vcd_a
    Poziom 18  
    Witam, właśnie udało mi się uruchomić LCD od Nokii 3310, i teraz zaczynam wyświetlać na tym LCD kolejne C-stringi. Jednak mam pewien problem z funkcją sprintf, którą używam do tego żeby sformatować np. liczbę typu int na C-string, który będę mógł wysłać do LCD, poprzez odpowiednią funkcję.

    Programik, który teraz piszę, ma kolejno w pętli wyświetlać indeks pętli "i". Jednak natrafiłem na taki problem, że jak umieszczę w pętli funkcję sprintf to nie chce działać ;/

    Dla przykładu, żeby zobaczyć co jest nie halo, zdeklarowałem dodatkową zmienną liczba. I teraz jak wywołam funkcję sprintf przed pętlą, to w pętli napis się ładnie pokazuje w kolejnych liniach, ale jak już funkcję sprintf wrzucę do pętli to wtedy jest kaszanka. Ma ktoś może pomysł co robię źle?, pozdrawiam serdecznie Krzysiek

    //------------------------------------------------------------------
    //
    //						LCD_Nokia_WinAVR
    //
    //------------------------------------------------------------------
    
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdio.h>
    #include "NokiaLCD_Lib.c"
    
    int main(void)
    {
    	int liczba = 123;
    	unsigned char i, j;
    	char tablica[10];
    	LcdInit();
    	LcdClear();
    	
    	
    	sprintf(tablica, "%d", liczba); // ---->>>> Jezeli tutaj wstawię sprintf to w pętli na LCD w kolejnych liniach pokazuje się 
    	                                // tekst '124'
    
    	while(1)
    	{
    		for(i = 1; i < 7; i++)
    		{
    			//sprintf(tablica, "%d", liczba); // Natomiast jeżeli wykomentuje funkcje wyzej i wstawie ja tutaj to na LCD nic 
    			                                  // sie nie pojawia, czemu???!!!
    			LcdClear();
    			LcdGotoXY(1, i);
    			LcdStr(1, tablica);
    			LcdUpdate();
    			for( j = 0; j < 10; j++)
    			{
    				_delay_ms (30);
    			}
    		}
    	}
    	
    	while(1);
    }
    


    Dodano po 1 [godziny] 19 [minuty]:

    Witam, problem rozwiązany, w uC kończyła się po prostu pamięć, przytoczę log kompilatora.

    
    Size after:
    AVR Memory Usage
    ----------------
    Device: atmega8
    
    Program:    3824 bytes (46.7% Full)
    (.text + .data + .bootloader)
    
    Data:        991 bytes (96.8% Full)
    (.data + .bss + .noinit)
    
    
    
    -------- end --------
    
    



    Przy zmianie warunku w pętli na i < 2, na wyświetlaczu pojawił się wyniki, pozdrawiam serdecznie Krzysiek ;]
REKLAMA