IAR STM32 inline problem

Gast #4311995
Lesenswert?

Hi,

ich habe folgende Funktion geschrieben die mir Variablen über die UART 
ausgiebt.
1
void uart (char *text, uint32_t data){ 
2
   static uint8_t first = 0;
3
     
4
   if (first < 1){
5
      printf1("%s:\t", text);
6
      first = 1;
7
   }
8
   else{
9
      printf1("%04u\t", data);    
10
   }   
11
}

Funktioniert soweit auch prima. Beim erstaufruf wird die Überschrift 
ausgegeben und bei allen weiteren aufrufen wird der Wert ausgegeben. 
Somit lässt sich das ganze schön in excel importieren.

Jetzt würde ich diese Funktion gerne mehrfach verwenden. Das heist es 
soll zu jeder Variablen die passende Überschrift ausgegeben werden. 
Deshalb bräuchte ich für jede Funktion die Variable "static uint8_t 
first".

Ich habe versucht dies mit #pragma inline bzw. #pragma inline=forced zu 
lösen.
Leider bekomm ich dabei vom Linker folgenden Fehler:

Error[Li005]: no definition for "uart" [referenced from 
C:\WORKSPACE\proj\EWARM\proj Configuration\Obj\main.o]

Ich vermwende IAR auf einem STM32F4

Hat jemand eine Idee?
#4312020
Lesenswert?

Was du vor hast, wird mit inlining nicht funktionieren.

Macros könnten dein problem lösen.

Unterschied:
Inline greift immer auf die selbe static variable "first" zu, da nur der 
code, nicht jedoch die variablen vervielfacht werden.
Macros werden vom Präprozessor verarbeitet. So kann eine ganze 
subfunktion mit allen statischen variablen vervielfältigt werden.

Probier mal das aus:
1
#define uart(text,data) {       \
2
   static uint8_t first = 0;    \
3
                                \
4
   if (first < 1){              \
5
      printf1("%s:\t", text);   \
6
      first = 1;                \
7
   }                            \
8
   else{                        \
9
      printf1("%04u\t", data);  \ 
10
   }                            \
11
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren