www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C: große datenmenge in array


Autor: snitch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
ich möchte eine "größere" datenmenge am besten in ein array
speichern
konkret heißt das dass mir ein handy beispielsweise folgendes ausgibt:

+CMGR: 1,,20
069134660405F1040C98456317925805000040703871906280012D
OK
(das kommt erstmal in ein array)

und ich zum vergleichen dieser vom handy ausgegebenen daten ein array
verwende in die ich bereits diese daten vorher gespeichert habe

ich dachte mir zb ein unsigned char array mit 70 feldern müsste locker
ausreichen....nur wie diese daten darin speichern? (außer jedes feld
einzeln von hand zu beschreiben :))

das auslesen diese daten ins array is ok
das verlgeichen auch
nur eben wie ich vorher, damit ich vergleichen kann, diese datenmenge
in ein array bekomme ist mir schleierhaft.

thanx in advance

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich weis zwar nicht wie du auf die idee kommst eine sms mit einer
anderen zu vergleichen aber nun gut ;)

ich würd da einfach die make-file abändern und noch einen prog VOR dem
gcc starten lassen.. oder noch einfach batch file die make heist rein
ins project-dir

da drinnen machst dann

<<<<<<<<<<<<<snip>>>>>>>>
liebe_exe_die_aus_dem_string_ein_c_array_macht.exe
make.exe %1
<<<<<<<<<<<<snip>>>>>>>>>

die exe legt einfach eine cpp-file an wo dann das array definiert und
geladen wird..in welcher form is ja egal...

schaut dann ca so aus in der file...
<<<<<<<<<<snip>>>>>>>>>>>
unsigned char cArray[70];

void InitArray() {
  cArray[0]='zeichen1';
  cArray[1]='zeichen2';
  cArray[2]='zeichen3';
  cArray[3]='zeichen4';
  ...
  ...
}
<<<<<<<<<<<<<<<snip>>>>>>>>

das auszugeben sollte irgendwie schaffbar sein (würde sogar mit vbs
gehn)...

gut in deinem main rufst dann noch InitArray() auf und fertig ;)

brauchst nur die daten in eine text-file tun und das prog zerpflückt
das dann... wennst probs damit haben solltest... ich sollte heute abend
da was schönes bastln können....

73 de oe6jwf / hans

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns in C sein soll:

char meinarray[]="+CMGR:
1,,20\n069134660405F1040C98456317925805000040703871906280012D\n
OK";

aber alles in einer Zeile.
Eventuell muss es ein \r\n statt einem \n sein.

eine andere Schreibweise wäre:
char meinarray[]={'+'.'C','M' ... };

Du brauchst in [] keine Grösse angeben, die weiss der Compiler.

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hans!

Ich bin zwar auch Steirer, aber so kompliziert denk ich nicht, oder hab
ich was falsch verstanden? Bin grad erst auf und hatte erst einen
Kaffee.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
najo ich mach das normalerweise so wenn ich binär daten hab... stimmt
strings dürften so am einfachstn sein... nur müsst ich da nachgucken ob
man auf die art und weise auch globale füllen darf....bin mir ned ganz
sicher...

btw warum einfach wenns kompliziert auch geht...

aja man kann das auch auf mehrere zeilen aufsplitten...


char meinarray[]="+CMGR:
1,,20\n069134660405F1040C9845631792580\
5000040703871906280012D\nOK";

damit gehts... und wenn du beim string der vom handy kommt noch alle
\r\n durch \n ersetzt (also einfach \r am uart ignorieren ;) ) dann
hast 0 probs... wäre mir nicht soo sicher ob alle handys \r\n oder nur
\n schicken...

dürfte der gleiche schrott wie unix/win sein....

so nachmal 73

btw weis eigentlich immer irgendwer was oe6 zu bedeuten hat g

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich weis zwar nicht wie du auf die idee kommst eine sms mit einer
>anderen zu vergleichen aber nun gut ;)

Hm, ganz einfach: eine Art "Remote-Shell" per SMS :D

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> btw weis eigentlich immer irgendwer was oe6 zu bedeuten hat *g*

Wenn man früher mal OE6FAD geheissen hat, dann schon :-)

Autor: snitch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
thanx soweit
wo wir gerade dabei sind \n bzw. \r\n ist das line feed
und wie realisiert man eine neue zeile ?
zb
====
2345243524542254542

OK
====
2345243524542254542\n(??)OK

evtl. mit vertical tab ?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
\n : new-line, 0x0D
\r : return carrier, 0x0A

Was möchtest Du jetzt genau?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>\n : new-line, 0x0D
>\r : return carrier, 0x0A

argh war wohl noch zu früh:

\n : new-line, 0x0A
\r : return carrier, 0x0D

Sorry for any inconvenience...

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du als client win rechner hast... dann musst du \r\n schicken
oder im terminal das umstellen... linux/unix will \n für new-line ;)

btw das mit der remote shell is prinzipiell eine gute idee...aber ich
würd da troztdem alles decodieren und nur text und nummer speichern..
sonnst hast mal ein anderes handy dabei und dann geht nix...sprich
authentifieren per sms und dann remote controllen ;)

nebenbei müsste da auch weniger speicher belegt werden... sprich
160zeichen+nummer max im gegensatz zu diversen längen und nummer und
text ;)

@ex 6AFD noch immer call oder zur ruhe gekommen ??? ;)


73 de oe6jwf / hans

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wenn du als client win rechner hast... dann musst du \r\n schicken
>oder im terminal das umstellen... linux/unix will \n für new-line ;)

Viele Modems (naja, habe nicht wirklich viele gesehen, aber mindestens
die Siemens T/MC35 und auch die Wavecom) benötigen lediglich \r (!).
Steht aber im Datenblatt, vielleicht sollte man den AT-Layer etwas
flexibler gestalten...

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm so wie ich das sehe werde ich mal meine sms-routinen überarbeiten
;) da wird dann beim init mal at mit \r dann mir \n und
schlussendlich \r\n geschickt...dort wo was zurückkommt is dann das
richtige zeichen dabei g... najo mal schaun bis wann ich das alles
schön verpackt hab...

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hans

Ich bin schon langer nimmer aktiv, hab auch fast nur Packet Radio
gemacht. Das war aber zu einer Zeit als es Linux noch nicht gab. Da hab
ich TCP/IP online mitschauen können (WNOS hiess das glaub ich damals).

Ausserdem wohne ich jetzt in Deutschland, ich glaub da müsste ich
nochmal die Prüfung machen.

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.