Hallo Zusammen, ich möche mit einem MEGA128 ein Transponder System fernsteuertn bzw per MC steuern. Ich habe mir folgendes gedacht. Der MC soll das Transpondersystem selbständig abfragen nur ab und an für Testzwecke oder Änderungen verschiedener Variablen möchte ich das System auch per Commando per PC steuern. Ich habe mir gedacht ich speichere alle Steuerbefehle in ein Array wird nun ein Steuerbefehl empfangen durchsucht er das Array nach diesem Befehl wenn er ihn findet führt er dann etwas bestimmtes aus. Nur habe ich keinen Ansatz wie ich das Array am besten durchsuchen soll. Eigenlich wollte ich zuerst die erste Spalte durchsuchen wird dann etwas passendes gefunden dann die gleiche Zeile jedoch die nächste Spalte stimmt dies dann nicht weiter die erste spalte durchsuchen usw. Jedoch wie kann ich sowas programmieren? Ich programmiere mit AVR Studio AVR GCC. Gruss TOM
hmm, bin mir nicht sicher ob ich dich richtig verstanden habe. Tuts eventuell ein switch(command) und dann eventuelle "sub" switch()'es? Ein paar mehr Details über das Protokoll wären interessant.
Also du willst meinetwegen 5 Bewehle o.Kommandos in der 1.Spalte und 5 Zeilen ablegen. Wird ein Kommando empfangen, so werden nacheinander alle Werte der 5 Zeilen in Spalte 1 verglichen. Enthält eine Zeile den Wert, soll ein anderes Kommando ausgeführt werden was dann in der gleichen Zeile eine Spalte weiter steht??? Hab lange kein C gemacht. Aber was du brauchst ist vielleicht so etwas: int A[6,6]; //Array 6x6 Felder int Befehl; //Empfangener Befehl int i,j; //Zählvariablen i=0; //Spalte auf Null wenn nichts gefunden wird //steht dieser Wert immer noch auf Null for(j=1;j=5;j++) { //Beginn in Spalte 0 if( A[i,j]==Befehl; //Befehl gefunden? then {for(i=1;i=5;i++) //Alle 5 Werte dieser Spalte werden durchl. {.......... .......... } } } //nächste Spalte vergleichen Ist das Programm beendet und i steht immer noch auf 0, so wurde kein Befehl gefunden.
@ all, bin leider erst heute wieder dazu gekommen etwas weiter zu machen. @Alexander Dein Vorschlag sieht zwar gut aus jedoch gibt es THEN in c nicht wahrscheinlich jedoch in c++. Zu meinem Protokoll. es werden 12 Hexwerte übertragen. Nun stehen in einem Array ebenfalls Referenzwerte also 12 Werte und das ganze x Mal. Nun soll der erste Hexwert mit der ersten Spalte des Arrays überprüft werden wird der gleiche Wert z.B. in der Zeile 6 gefunden soll die zweite Spalte dieser Reihe mit dem zweiten Hexwert verglichen werden wenn der auch stimmt die 3 Spalte mit dem 3 Hexwert usw bis zum 12 Hexwert. Ist jedoch ein Hexwert falsch soll die erste Spalte des Arrays nach dem 1 Hexwert weiter durchsucht werden. Wird ein passender Datensatz(12 Hexwerte) ermittelt soll etwas gemacht werden wenn nicht gibt es eine Fehlermeldung. Danke schon mal Thomas
@stricker ich habe einen parser geschrieben, der allerdings nicht ganz einfach (zu verstehen) ist, aber dafür einiges an möglichkeiten bietet. leider ist der nicht für den avr geschrieben (problematik das zeiger nicht transparent auf RAM oder Flash zeigen können) schau mal in der codesammlung unter "uShell - unvierseller Parser für uC's". falls interesse besteht (und etwas wartezeit in keuf genommen wird :-) mache ich noch eine anpassung für die avr's. das funktionsprinzip (so wie ich es deiner erklärung nach verstande habe) ist dort auch nochmal ausführlich erklärt gruß rene
Dann brauchst du im wesentlichen zwei verschachtelte Schleifen. Die erste Schleife geht durch jede Zeile, die zweite vergleicht dann die jeweiligen spalten der Zeile. Hier mal ein grobes Standrad C code Beispiel:
1 | unsigned char array[rows][12]; // die "tabelle" |
2 | unsigned char data[12]; // die zu vergleichenden werte |
3 | |
4 | int row, column; |
5 | unsigned char found = 0; |
6 | for(row=0; row < rows; ++row) // alle zeilen prüfen |
7 | {
|
8 | for(column=0; column < 12; ++column) // alle spalten prüfen |
9 | {
|
10 | if(array[row][column] != data[column]) // werte stimmen nicht überein |
11 | {
|
12 | break; // spalten schleife verlassen (mit der nächsten Zeile weitermachen) |
13 | }
|
14 | else if(column == 11) // werte stimmen überein (else if) + letzte spalten |
15 | {
|
16 | found = 1; // gefunden! |
17 | break; // spalten schleife verlassen |
18 | }
|
19 | }
|
20 | if(found) // wenn gefunden) |
21 | {
|
22 | break; // Zeilen Schleifen verlassen |
23 | }
|
24 | }
|
Das array packst du aber am besten fest in den flash rein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.