AVR GCC a scanf
Richard Kaliciak
hw.kaliciak@stonline.sk
Úterý Květen 6 23:29:02 CEST 2008
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
Další informace o konferenci Hw-list