Funktion max. Anzahl Argumente in C

OP #1763593
Lesenswert?

Hallo,

einer Funktion "leitung" müsste ich vier Argumente (Pointer) übergeben.
Das sieht so aus:

void leitung(uint8_t *piT, uint8_t *piS, uint8_t *ipL, uint8_t *pAS)

Der C-Compiler meckert "... zu viele Atgumente .."

Kann C nur drei Argumente? Wenn ja, wie macht man das dann?
OP #1763619
Lesenswert?

Das ist die Definition in main.c und der Aufrufe der Funktion leitung:
1
  uint8_t iT = 0;       // Zähler für Takt
2
  uint8_t iS = 0;       // Zähler-Status für Mux- und Hex-Zähler (7493)
3
  uint8_t iL = 0;       // Leitungsstatus für LED
4
  uint8_t AS = 0;       // Schalter für Alarm
5
 .
6
 .
7
  leitung(&iT, &iS, &iL, &AS); // Steuerung Leitungen und Auswertung

und das die Funktion "leitung":
1
void leitung(uint8_t *piT, uint8_t *piS, uint8_t *piL, uint8_t *pAS)

Ist da was syntaktisch falsch? Wenn ich nur drei Parameter angebe, dann 
funktioniert es.
Gast #1763631
Lesenswert?

Ich denke so generell kann man das nicht beantworten!

Prinzipiell hat C da keine Probleme. In der Regel werden Parameter über 
den Stack übergeben. Allerdings geht es ja hier um C für nen uC und der 
ein oder andere Compiler kann da vielleicht auch optimieren und benutzt 
Register dafür - möglicherweise durch irgend einen Compiler switch 
eingeschaltet?!

Also, welcher uC, welcher C-Compiler? C- und H-Files?
OP #1763644
Lesenswert?

Hallo miteinander,

danke für Eure Hilfe.
Der Fehler war offenbar, dass ich den Parameter *pAS, den ich später 
eingefügt hatte in der leitung.h vergessen hatte, Schande Schande!!

Aber die Fehlermeldung war für mich etwas irreführend, weshalb ich nicht 
auf die Idee kam dort zu suchen.
#1763651
Lesenswert?

celine schrieb:

> wo dann? im ram? bei meinen 8-bittern ist der stack im ram angesiedelt

Einige 8-Bitter haben erkleckliche Probleme damit, Daten in einem Stack 
effizient zu adressieren, weil eine entsprechende Adressierungsart 
fehlt. Statisch adressieren können sie besser. Beispielsweise 8051 und 
PIC10-16 und ein bischen auch die erste Generation der PIC18.

Compiler für diese Maschinen neigen daher dazu, sämtliche Daten statisch 
zu adressieren, auch Parameter und lokale "auto" Variablen. Solche 
Funktionen sind dann natürlich von Haus aus nicht reentrant, weshalb man 
sie ggf. entsprechend kennzeichnen muss.

NB: Bei 32-Bittern ist es genau umgekehrt. Die tun sich mit Daten auf 
dem Stack leichter als mit statischen Daten.

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