stack/printf/va_arg Problem bei arm-none-eabi-gcc und STM32

#3208193
Lesenswert?

Hallo,

mein Kollege und ich versuchen seit mehreren Tagen ein seltsames Problem 
zu fixieren:

Umgebung:
  STM32F103 mit arm-none-eabi-gcc (mit 4.6 und 4.7 bereits probiert)

Code (nur Prinzip):
1
void interrupt_1ms()
2
{
3
  printf("%f",1.234);
4
}
5

6
void test()
7
{
8
  // irgendwas
9
}
10

11
void main()
12
{
13
  while(1)
14
  {
15
    test();
16
  }
17
}

Symptom:
Meistens wird 1.234000 durch den printf erzeugt (und über RS232 
ausgegeben), und manchmal 0.000000. Wird test(); nicht aufgerufen, passt 
alles.

Ein Versuch printf selbst nachzuprogrammieren (unter Verwendung von 
va_arg) hat zu dem selben Ergebnis geführt. Es stimmen einfach manchmal 
die von va_arg zurückgegebenen Werte nicht wodurch printf ebenfalls 
seine Probleme hat.

Im Internet gefundene Lösungsvorschläge wie
http://www.coocox.org/forum/topic.php?id=346
haben das Problem nicht gelöst.

Unsere Vermutung ist, dass irgendwo das stack alignment sich nicht mit 
va_arg verträgt.

Hat jemand von euch dieses Problem auch schon gehabt und eine Lösung 
dazu finden können. Ich kann mir nicht vorstellen, dass printf einfach 
nicht gehen.

Besten Dank.

mfg, Weinga-Unity
Moderator Persönliche Seite #3209464
Lesenswert?

Komplettes Minimalbeispiel inkl. aller Quellen, Linkerscript und 
Makefile (Compiler und Linkeroptionen, Linkeraufruf)? printf wirklich in 
einer ISR? MSP und PSP in Gebrauch? Stack und Heap ausreichend groß? 
sbrk Implementierung? Welches Binärpacket der Toolchain oder selbst 
gebaut? Stack auf double-word ausgerichtet? Wie geprüft? Stack-pointer 
und "heap end"-Wert und Adressen der Argumente vor Aufruf von printf 
bzw. va_start/va_arg im debugger beobachtet?

(In Forum gcc verschoben.)
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.