AVR GCC a scanf

Slavomir Tomascik hw_tomascik@credit.t-com.sk
Úterý Květen 6 23:40:16 CEST 2008


Hej, ked som uz vedel co hladat, tak som to nasiel aj ja, lebo 
ma zaujimalo, preco to kua nieje napisane v dokumentacii. Bolo, 
len ...

Slavo.

> Ahoj,
> 
> dakujem za odpoved.
> 
> Prave som sa v
> file:///L:/Programme/WinAVR/doc/avr-libc/avr-libc-user-manual/group__avr__stdio.html#g67bae1ad3af79809fd770be392f90e21
> docital nieco podobne:
> 
> ----------------------------------------
> By default, all the conversions described above are available except the 
> floating-point conversions and the width is limited to 255 characters. 
> The float-point conversion will be available in the extended version 
> provided by the library libscanf_flt.a. Also in this case the width is 
> not limited (exactly, it is limited to 65535 characters). To link a 
> program against the extended version, use the following compiler flags 
> in the link stage:
> 
>       -Wl,-u,vfscanf -lscanf_flt -lm
> ----------------------------------------
> 
> Richard Kaliciak
> 
> 
> Slavomir Tomascik schrieb:
>> Tak este doplnok, scanf float ako som napisal, postupuj podla 
>> toho linku, prihod este libscanf_flt a do parametrov pre linker 
>> dopln dalsi riadok "-Wl,-u,vfscanf". Mne uz takyto bastard beha OK.
>> 	result = sscanf(buff, fmt, &f);
>> 	result = sscanf("357.0", "%5f", &f);
>> 	result = sscanf("357", "%d", &v);
>> 	result = sscanf("357", "%d", &v);
>> 	sprintf(buff,"A%5f",d);
>> 	sprintf(buff,"A%d",v);
>>
>> Slavo T.
>>
>>
>>> Nazdar,
>>>
>>>   neviem, ci to uz mas vyriesene, ale ked nie...
>>> Vyskusal som to u seba, a dosiel som k zaveru, ze sscanf je 
>>> implementovana (funguje mi integer), a "iba" nepodporuje float. 
>>> Aby bolo jasne, tak s AVR-GCC sa iba zacinam hrat ;-) Normalne 
>>> totiz nefunguje ani float sprintf, a treba urobit dalsie kroky 
>>> napr. podla:
>>> http://winavr.scienceprog.com/avr-gcc-tutorial/using-sprintf--function-for-float-numbers-in-avr-gcc.html
>>> aby si rozbehol float pre sprintf. A kedze taka ista kniznica 
>>> (libscanf_flt.a) je aj pre sscanf, tak myslim, ze to bude v tom. 
>>> Treba ju tam dodat, a povedat o tom linkeru. Toto este nemam.
>>>
>>> Slavo T.
>>>
>>>
>>>> Dobry den,
>>>>
>>>> chcem sa opytat tych, co pouzivaju AVR-GCC (WinAVR), ci je 
>>>> implementovana funkcia sscanf a ci funguje, pripadne kde robim chybu. 
>>>> Mam takyto priklad:
>>>>
>>>> // needed for use of PSTR below
>>>> #include <avr/pgmspace.h>
>>>> #include <stdio.h>
>>>> #include <stdlib.h>
>>>>
>>>> char PROGMEM fmt[] = "%f";
>>>>
>>>> int main( void ){
>>>> 	char buffer[20] = {"1.25"};
>>>> 	float flFaktor = 0.0;
>>>> 	int result;
>>>> 	
>>>> 	result = sscanf( buffer, "%f", &flFaktor );
>>>> 	flFaktor = 1.0;
>>>> 	result = sscanf_P( buffer, fmt, &flFaktor );
>>>> 	flFaktor = 2.0;
>>>> 	flFaktor = atof( buffer );
>>>> 	flFaktor = 3.0;
>>>> 	result = sscanf_P( buffer, PSTR( "%f" ), &flFaktor );
>>>> 	flFaktor = 4.0;
>>>> 	flFaktor = strtod( buffer, (char**)NULL );
>>>> 	
>>>> 	return 0;
>>>> }
>>>>
>>>> Je to prelozene s "gcc version 4.2.2 (WinAVR 20071221)" v AVR studiu, s 
>>>> vypnutou optimalizaciou, aby som videl vysledky:
>>>>
>>>> avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2 -std=gnu99 -O0 
>>>> -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP 
>>>> -MT test-float.o -MF dep/test-float.o.d  -c  ../test-float.c
>>>>
>>>> Ked ten program v simulatore krokujem, tak atof a strtod funguju 
>>>> (flFaktor=1.25), ale sscanf tu hodnotu nemeni.
>>>>
>>>> Poradi niekto?
>>>> Pripadne to vyskusajte u seba, ci vam to funguje.
>>>>
>>>> Richard Kaliciak
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list