/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
printf problem (IAR Embedded Workbench)
Fra : Lasse Madsen


Dato : 17-05-05 16:35

Hej,

Jeg har et problem med PrintF under IAR Embedded Workbench for AVR.
Jeg har under options=>general=>library configuration=> sat IAR CLIB samt
printf og scanf til "Full (or custom)"
samt konfigureret den til CPU mega128 og sat small memory model.

når jeg prøver følgende:
void main (void)
{
unsigned int lasse=24;
printf("\r\nBooting once... %u",lasse);
while(1) asm("nop");
}

skriver den på seriel porten: Booting once... u

laver jeg %u om til %d fungere det fint ... men det er jo en unsigned int !
yderligere !

printf("\r\nBooting once %03d",lasse);

resultere i Booting once 03d

Hvordan får jeg den til at virke med den fulde printf !?

M.v.h.
Lasse Madsen



 
 
Lasse Madsen (17-05-2005)
Kommentar
Fra : Lasse Madsen


Dato : 17-05-05 16:40

Hmm jeg fandt en løsning ... yderst mystisk !
jeg måtte vælge "Configure system using dialogs" og manuelt opsætte data og
retur stack mv.

undskyld at jeg opdager det nu men jeg har siddet med fejlen siden i morges
men ironisk opdager jeg den lige efter mit indlæg... sorry...

m.v.h
lasse

"Lasse Madsen" <spam@electrologic.dk> skrev i en meddelelse
news:428a0f08$0$67257$157c6196@dreader2.cybercity.dk...
> Hej,
>
> Jeg har et problem med PrintF under IAR Embedded Workbench for AVR.
> Jeg har under options=>general=>library configuration=> sat IAR CLIB samt
> printf og scanf til "Full (or custom)"
> samt konfigureret den til CPU mega128 og sat small memory model.
>
> når jeg prøver følgende:
> void main (void)
> {
> unsigned int lasse=24;
> printf("\r\nBooting once... %u",lasse);
> while(1) asm("nop");
> }
>
> skriver den på seriel porten: Booting once... u
>
> laver jeg %u om til %d fungere det fint ... men det er jo en unsigned int
> !
> yderligere !
>
> printf("\r\nBooting once %03d",lasse);
>
> resultere i Booting once 03d
>
> Hvordan får jeg den til at virke med den fulde printf !?
>
> M.v.h.
> Lasse Madsen
>
>



Troels (19-05-2005)
Kommentar
Fra : Troels


Dato : 19-05-05 09:01

<cut>
>> og manuelt opsætte data og retur stack mv.
<cut>
Heh? Overfører du hele structs (ikke pointere) i funktionskald, laver du
rekursive funktioner, ?

>> printf("\r\nBooting once... %u",lasse);

Husk at på Atmel'er kopieres sådanne string literals op i ram under startup
(sideeffekt af Harvard Arkitekturen), så hvis du har mange tekster (eller
for lidt ram!) skulle du overveje:

#include pgmspace.h
__farflash char txt_BootMessage[] = "\r\nBooting once... %u";
printf_P( txt_BootMessage , lasse );

tpt



Troels (20-05-2005)
Kommentar
Fra : Troels


Dato : 20-05-05 18:27

> #include pgmspace.h
> __farflash char txt_BootMessage[] = "\r\nBooting once... %u";
> printf_P( txt_BootMessage , lasse );
>

Desuden skal du vide at den gui-setting hvor du kan vælge mellem minimal ,
medium og fuld printf implementation ikke virker for _P varianterne, dvs du
får den store med mindre du bruger
-e_small_write_P=_formattet_write_P
i din xcl fil.

Den store bruger 178 bytes stack, hvilket kan gøre lidt ondt ....

tpt



Lasse Madsen (22-05-2005)
Kommentar
Fra : Lasse Madsen


Dato : 22-05-05 20:39

Mange tak troels !

Din hjælp var uvurderlig !

Jeg fik løst problemet !

Med venlig hilsen
Lasse Madsen



Søg
Reklame
Statistik
Spørgsmål : 177438
Tips : 31962
Nyheder : 719565
Indlæg : 6408040
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste