Hallo,
ich versuche gerade in Atmel Studio 6.1 einen AVR32 mit FreeRTOS zu
programmieren.
Bei einer Ausgabe auf das Display möchte ich diesen Code verwenden:
1 | #include <stdio.h>
|
2 |
|
3 | float gf_value = 0.5;
|
4 | unsigned int gui_value = 10;
|
5 |
|
6 | void display_printf_string(const char *format, ...)
|
7 | {
|
8 | va_list arg;
|
9 | char string[30];
|
10 | unsigned char i=0;
|
11 |
|
12 |
|
13 | va_start(arg, format);
|
14 |
|
15 | gpio_set_pin_high(SIG_LED4); //Zu Debug zwecken, wird noch erreicht!
|
16 |
|
17 | i = vsprintf(string, format, arg);
|
18 |
|
19 | gpio_set_pin_high(SIG_LED2); //Zu Debug zwecken, wird NICHT mehr erreicht!
|
20 |
|
21 | while (i < sizeof(string) - 1) string[i++] = '\0';
|
22 | va_end(arg);
|
23 | DISPLAY_RS_DATA;
|
24 | spi_selectChip(DISPLAY_SPI, DISPLAY_NPCS);
|
25 | /* for all chars in string */
|
26 | i = 0;
|
27 | while(string[i]!='\0')
|
28 | {
|
29 | /* Send byte */
|
30 | spi_write(DISPLAY_SPI, string[i]);
|
31 | delay_us(40);
|
32 | /* go to next char */
|
33 |
|
34 | i++;
|
35 | }
|
36 | spi_unselectChip(DISPLAY_SPI, DISPLAY_NPCS);
|
37 |
|
38 | }
|
39 |
|
40 | void other_function1(void)
|
41 | {
|
42 | display_printf_string("Wert: %6d ", gui_value);
|
43 | }
|
44 |
|
45 | void other_function2(void)
|
46 | {
|
47 | display_printf_string("Wert: %6.2f ", gf_value);
|
48 | }
|
Mein Problem ist, dass dieser Code mit aufruf der ersten other_function1
bestens funktioniert.
Bei aufruf mit einem float, other_function2 bleibt der uC bei der Zeile
mit
1 | i = vsprintf(string, format, arg);
|
stehen.
Ich habe festgestellt, dass wenn ich mit Rechtsklick auf die #include
<stdio.h> klicke und dort auf "Go implementation" lande ich in der stdio
aus
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR32
GCC\Native\3.4.2.1002\avr32-gnu-toolchain\avr32\include\stdio.h
wenn ich allerdings auf den vsprintf ein "go implementation" ausführe
lande ich in
C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8
GCC\Native\3.4.2.1002\avr8-gnu-toolchain\avr\include\stdio.h
Damit wird auf einem 32Bitter ein 8Bitter Code ausgeführt, was natürlich
ehr nicht so gut geht.
Hat wer eine Idee wo man das einstellt welchen Pfad der Compiler
benutzt?
In meinen Projekteinstellungen habe ich nur unter Toolchain/Commen was
gefunden. Aber da sind die richtigen Pfade drin!
Beim #include zeigt er ja auch den richtigen File an. Aber woher hat er
denn dann den vom AVR8?
In Beispielsprogrammen aus ASF geht es ja auch... Ich finde den
Menüpunkt einfach nicht.
Danke