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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.