Hi,
ich muss eine Funktion schreiben, bei der eine variable anzahl an
paramtern übergeben werden.
Also der Benutzer kann zuerst Auswählen, ob jetzt z.b. Spannung, Strom,
Leistung,... gemessen werden soll und dann sollen nur genau diese Werte
übergeben werden!
Ich habs früher einmal schon gesehen, dass so etwas möglich ist,
allerdings habe cih keine Ahnung mehr, wo ich das suchen sollte....
Hatte wenn mich nicht alles täuscht etwas mit Arrays zu tun....
Wäre wirklich sehr dankbar, wenn mir jemand helfen könnte.
in welcher Programmiersprache denn?
und woher soll die funktion denn wissen wenn nur ein wert übergeben ist
ob es nun der Strom oder die Spannung ist?
Bitte ein etwas genauere beschreibung.
Ok ich beschreibs mal kurz:
Über einen PC stellt man über USB (über USART) beim µC ein, welche Werte
gemessen werden. (das ganze geht über eine Bitmaske)
Dann misst der µC über einen Messchip die Werte
(Spitzenspannung,Effektivwerte, Oberwellen, Temperatur,... ) Sind
ungefähr 30 Werte, die gemessen werden können.
Danach werden sämtliche Werte auf einer SD-Karte gespeichert und bei
Anfrage vom PC wieder über USART übertragen.
Und ich bin gerade beim programmieren von dieser Übertragungsfunktion.
D.h. über die Bitmaske weiß ich, dass jetzt z.b. der erste Wert der
Strom ist und der 5te z.b. die Wirkleistung. Allerdings wie übergebe ich
diese Werte dieser Funktion?
void USART_neue_zeile( /* Paramter */ )
{
uint8_t laenge;
// Sende FF (Start)
USART_send(0xFF);
// Sende Seq Nr.
USART_send_seq_nr();
// Berechne die variable Länge
// Sende die Länge
// Sende Befehlscode 0x11
USART_send(0x11);
//Sende Daten
//Berechne Pruefsumme
pruefsumme = 0x11; // + Paramter
//Sende Pruefsumme
USART_send(pruefsumme);
}
Programmiersprache ist übrigens C (sollte sowieso ersichtlich sein :> )
Ein packet schaut immer aus 0xFF danach die Sequenz Nummer, dann die
Länge, danach der Befehlscode (was ist das für ein packet?) und
anschießend die Daten mit der Pruefsumme.
die Frage ist wie wird die Funktion aufgerufen, dort ist ja dann das
gleiche Problem.
Ich würde der funktion ein zeiger auf ein array übergeben und die anzahl
der elemente:
funktion( int* daten, int count );
wenn du es wirklich mit variabler liste machen willst dann schau dir mal
die macros "va_arg, va_end, va_start" an.
Warum fragst Du nicht in Deiner Funktion die Bitmaske auf gesetzte Bits
ab, und leitest dann bei jedem gesetzten Bit die entsprechende Messung
ein?
Als Beispiel:
Es wird die Bitfolge 00000101 übergeben:
if (Bitfolge & 1)
......Messung 1 ausführen (Z.B. Spannung)
if (Bitfolge & 1<<1)
......Messung 2 ausführen (Z.B. Strom)
if (Bitfolge & 1<<2)
......Messung 3 ausführen (Z.B. Temperatur)
...
Es würden also nur die Messung von Bit0 und Bit2 ausgeführt.