|
| 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
| |
|
|