mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C - Fragen


Autor: Stefan Helmert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ein paar Fragen zur C-Programmiersprache:
Wie definiere ich Funktionen variabler Argumentenanzahl?
z.B.: sende(1,2);
      sende(8,4,5,6);
      sende(0,2,0,'H',"allo",x,str[0]) // Variablen, Konstanten,
Arrays bilden eine Argumentenkette
Kann ich in einer Variable auch ganze Terme speichern?
x = Term_zuweisen("a+b");
a = 3;
b = 4;

x -> 7

Wie definiere ich einen neuen Datentyp?
z.B.:
var_on_ser_eeprom x;
var_on_ser_eeprom y;
fifo f;
var_on_HDD h[10];

x = 10;  // Ausgeführt wird aber save(0,10);
y = x + 1;  // Ausgeführt wird aber save(1,load(0)+1);

Wie kann ich Variblen halb-gobal-local definieren?
z.B.:
char x for print, send;

void print(void)
{
PORTA = x // Variable x
}

void send(void)
{
PORTB = x // gleiche Variable x
}

void pause(void)
{
char x; // andere Variable x
for(x=0;x<=10;x++)
{}
}

Wie kann ich mit einem Pointer auf Konstanten und Variablen
gleichermaßen Lesezugriffe starten?
z.B.:
print("Hallo");
Print(str[0]);

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan Helmert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke,
beim überfliegen sah es jedoch nicht so aus als würe es alle meine
fragen beantworten. Ich verwende übrigens den cc5xfree - Compiler.

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie definiere ich Funktionen variabler Argumentenanzahl?
>...
>Arrays bilden eine Argumentenkette
Vgl. beliebiges besseres C-Buch, nach va_start suchen. Alternativ: die
Sendefunktion soll wohl ein paar Bytes rausschrieben, also uebergibt
man ein Bytearray (und dessen Laenge). Das Array selbst wird vorher
zusammengestellt -> sende(uint8_t sendefolge[], uint16_t anzahlbytes)
>Kann ich in einer Variable auch ganze Terme speichern?
>x = Term_zuweisen("a+b");
>a = 3;
>b = 4;
>x -> 7
So etwas funktioniert nicht "mit Bordmitteln" und so transparent wie
gewuenscht auch nicht in "normalem" C (schon in C++, aber auch nicht
"einfach so"). Auf jeden Fall braucht man "extra Code". Wie auch
immer - unter "function parser" findet man gut "vorgekautes" im
Netz (meist aber Code fuer etwas mehr RAM als bei kleinen µCs
verfuegbar).
>Wie definiere ich einen neuen Datentyp?
>z.B.:
>var_on_ser_eeprom x;
>var_on_ser_eeprom y;
>fifo f;
>var_on_HDD h[10];
>
>x = 10;  // Ausgeführt wird aber save(0,10);
>y = x + 1;  // Ausgeführt wird aber save(1,load(0)+1);
Betr "var_on_hdd" und "fifo": C-Buch lesen. Betr. Eeprom ist die
Vorgehensweise aehnlich wie bei anderen "externen" Speichermedien
(auch HDD). Man liest die Variablen mit speziellen Funktionen (abh. von
Controller/Eeprom/Compiler/Library) und schreibt auch "indirekt".
Syntax wie gewuenscht ist erst in C++ moeglich (oder firmenspezifisch
erweiterten C-Compilern), aber vielleicht erstmal Hintergrund
nachvollziehen und dann nochmal konkreter Fragen.
>Wie kann ich Variablen halb-gobal-local definieren?
>z.B.: char x for print, send;
>...
Sowas steht wirklich in einem C-Buch/Tutorial. Globale und lokale
Variablen mit gleichem Namen machen nur Code schlecht lesbar. Wenn
schon Globale dann mit aussagekraeftigem Namen und vielleicht je nach
"Geschmack" oder Firmenrichtlinien noch ein "g" davor. (z.B.
gUartSendBufferStat).
>Wie kann ich mit einem Pointer auf Konstanten und Variablen
>gleichermaßen Lesezugriffe starten?
>z.B.:
>print("Hallo");
>Print(str[0]);
wird so eher nichts. (print(char a[]) bzw. P(p)rint(char a) sind nicht
identisch (a) C-Buch (b) evtl. nochmal konkrekter nachfragen.

Autor: Stefan Helmert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke,
(Frage 1:) dass man eine Array verwenden kann wusste ich. Es geht aber
darum die Argumente gleich in der Funktion anzugeben, damit das nicht
so unübersichtlich wird. etwa so
Adresse: 10 (Gerät Nr. 10 - Monitor)
Kommando: 12 (print)
Daten: "Wert:", x, "km"
->
sende(10,12,"Wert:",x,"km");

Wie wird das denn bei der printf - Funktion gelöst, da kann man doch
z.B. schreiben:
printf("Wert: %d km",x); // 2 Argumente oder aber
printf("Werte: %d V, %d A, %d Ohm",x,y,z); // 4 Argumente

Wie wurde diese Funktion definiert?

Ich hab zwar mal die printf.h angesehen -> ist aber total
unübersichtlich, d.h. ich hab da nicht wirklich eine Antwort auf meine
Frage gefunden.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich zitier mal:
"Vgl. beliebiges besseres C-Buch, nach va_start suchen."

da solltest du weitersuchen

Autor: Stefan Helmert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.pronix.de/pronix-813.html
da steht es ist in stdarg.h definiert. Die hab ich (glaube ich) gar
nicht. Was nun? Selbst schreiben?! Wie?

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probier doch einfach aus, ob du es hast. hab bisher keinen c compiler
ohne gesehen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.