Funktionsrumpf auf dem Stack anlegen

OP #5486558
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe bei ST für die STM8 Mikrocontroller einen LIN Stack gefunden, 
den ich für meinen Xmega portieren möchte.
Ich dachte "ganz leicht". Mach ich am Wochenende. Hmm, naja. Ich steh 
auf dem Schlauch.
1
/*********************************************************************
2
 *
3
 * The LIN driver expects a real stack memory model for all functions
4
 * If a memory model is used that implements a non standard behavior
5
 * for function calls, adjust the STACK macro to the token that
6
 * must be written before each function to guarantee use of real
7
 * stack for that function
8
 * For the COSMIC compiler this is @stack
9
 *
10
 *********************************************************************/
11
#ifdef __COSMIC__
12
  #define STACK    @stack
13
#elif __RAISONANCE__
14
  #define STACK   
15
#elif __IAR__
16
  #define STACK  
17
#else
18
  #error "This LIN driver is developed for the COSMIC, RAISONANCE and IAR compilers only"
19
#endif

Das steht in dem einen File. Hier muss was angepasst werden, je nachdem 
welchen Compiler man verwendet. Damit hatte ich noch nie zu tun. Was 
bedeutet dies nun, wenn ich den xmega verwenden will? Muss ich da was 
machen.

Hier die Stelle auf die es sich bezieht:
1
/* structure to hold the ifc control function pointers */
2
typedef struct ifc_ctrl_hooks
3
{
4
  STACK bool (*initHook) (void);
5
  STACK bool (*connectHook) (void);
6
  STACK bool (*disconnectHook) (void);
7
  STACK void (*txCharHook) (uint8_t);
8
  STACK void (*rxFunc) (void);
9
  STACK void (*txFunc) (void);
10
  STACK void (*baudrateHook) (uint16_t);
11
  #if (defined(LIN_SLAVE_NODE) && defined(LIN_BAUDRATE_DETECT))
12
    STACK void (*baudrateCallback) (__OPTIONAL_IFC_DEFINITION_COMMA__ uint16_t);
13
  #endif
14
  #ifdef LIN_PROTOCOL_SWITCH
15
    STACK void (*protocolCallback) (void);
16
  #endif /* LIN_PROTOCOL_SWITCH */
17
} IFC_CTRL_HOOKS_TYPE;

Hier werden anscheinend Funktionen direkt zusammengefasst und auf den 
Stack gelegt.
Zumindest lese ich das raus. Korrigiert mich bitte wenn ich da falsch 
liege.
Vielleicht kann mir jemand hier auf die Sprünge helfen.

Vielen Dank!
#5486571
Lesenswert?
• ▲
▼
Jens W. schrieb:
> Hier werden anscheinend Funktionen direkt zusammengefasst und auf den
> Stack gelegt.

Nö. Hier wird eine Struct aus Funktionszeigern erstellt. Das mit dem 
STACK ist eine mir unbekannte Eigenart vom COSMIC Compiler - der wohl 
was unanständiges bei normalen Funktionsaufrufen macht.

Der XMEGA benutzt IIRC den normalen Stack für Funktionsaufrufe, das 
STACK  Macro wäre also leer.

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.