- 3D-Druck Einstieg und Tipps         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 35

Thema: String zerlegen und umwandeln ?!

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Anzeige

    Praxistest und DIY Projekte
    z.B. Für Menues auf einem Grafik Display, Meldungen auf einem LCD ,
    übertragung von Text über die Serielle u.s.w
    Überträngst Du nur konstante Texte ?
    na gut was ist schwieriger an
    strcpy(String,"text");
    als String="text"
    Das mußt Du mir jetzt erklären

    Und das ganze C++ mit Klassen, toll was hab ich davon mit C++ zu arbeiten, wenn ich die Vorteile dieser Sprache nicht nutzen kann, weil sie nicht unterstützt werden ?
    @ehenkes,
    Toll M32 und M128 ?
    Es gibt auch Leute, die es etwas kleiner brauchen, wenn ich die großen AVRs nutzen will/muß kann ich auch ruhig mit Basic drangehen.
    Programmiere mal einen T13 mit C++ und Deinen Klassen.
    Es gab hier mal einen Fred, der wollte mal blinki blinki auf T13 mit Basic machen.
    Daraufhin kam ein anderer Fred, der meinte, der Speicher reicht nich aus dafür, er möge bitte einen Kontroller nehmen, der 2 Nummer größer sei.
    Ich habe ihm sein blinki blinki in asm geliefert, es blieben noch etwa 800 Bytes unbenutzt, es hat keiner mehr was gesagt, wie toll doch Basic wäre...(habe gerade keine Lust diesen Thread zu suchen)
    Also immer schön abwegen was man auf welchem Kontroller machen will

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  2. #22
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    699
    Also immer schön abwegen was man auf welchem Kontroller machen will Zwinkern
    Akzeptiert! Für 8K und Lichtorgeln ist C++ sicher nicht der richtige Ansatz.

    Wenn man in Richtung schwache KI will oder vorhandene C++-Klassen nutzen will, dann macht das absolut Sinn. Dafür brauche ich z.B. C++. Die Zukunft auf den AVR ist m.E. C++, java, ... Die Speichergrößen und Geschwindigkeiten laufen einem da entgegen, genau wie beim PC. Assembler ist für die kleine Elektronik aber ideal, vor allem für Serien.

  3. #23
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Vorhandene C++ Klassen ?
    Welche klassen gibt es speziell für AVR ?
    Zugegeben, ich habe noch nicht C++ auf µC gemacht, es würde mich aber interessieren.
    Meine Erfahrung ist aber, daß C++ größeren Code produziert als C.
    Damit ich hier was zu argumentieren habe, habe ich eben das berühmte "Hallo World!" einmal in C und einmal in C++ geschrieben.
    Beide mit -O2 übersetzt und strip verwendet um Debuginformationen loszuwerden.
    Ergebnis :
    C 2932 Bytes
    C++ 3896 Bytes
    Ist der Unterschied bei avr-gcc <-> avr-cpp auch so groß ?
    Wenn das so ist, wäre das ein K.O, kriterium für C++...

    Versteh mich nicht falsch, ich habe nichts gegen C++, im Gegenteil ich schreibe gerne Programme mit, aber auf AVR bin ich eher Minimalist und wenn ich einen Kontroller > M8 verwende, dann nur weil ich mehr Pins brauche und nicht wegen Flashmangel

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #24
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    699
    Versteh mich nicht falsch, ich habe nichts gegen C++, im Gegenteil ich schreibe gerne Programme mit ...
    Nein, ich verstehe Dich richtig. Dein minimalistischer Ansatz ist in bestimmten Bereichen völlig überlegen, weil notwendig! Aber im Bereich der Robotik kommen die Fortschritte eher durch die OOP-Sprachen wie z.B. C++. Viele koppeln noch den PC per Funk, Kabel oder IR-Schnittstelle an den Roboter, aber durch die zunehmende Leistungsfähigkeit der µC wird sich da in den nächsten Jahren einiges ändern. Die Zukunft gehört leistungsfähigen, autonomen Systemen mit OOP. Da bin ich ganz sicher. Man sieht dies bereits im akademischen Bereich. Siehe z.B. Khepera, http://www.informatik.uni-leipzig.de...ra/libkhepera/ (C++-Bibliothek bereits vor 10 Jahren)

    Vorhandene C++ Klassen ?
    Welche klassen gibt es speziell für AVR ?
    Spezielle C++-Klassen für AVR gibt es (STL, boost), aber leider nur kommerziell verfügbar! Die meisten AVR-C++-Entwickler basteln sich selbst eigene Klassen. Das muss ich z.B. für den Nibo auch machen. Echt schade, dass dies immer wieder mehrfach hinter vorgehaltener Hand entwickelt wird.


    Mit vorhandenen Klassen meine ich die fast schon unüberschaubare Vielfalt an bereits vorhandenen C++-Klassen, die man offen zugänglich im Internet findet. Der Vorteil der C++-Klasse (gilt natürlich auch für java) ist doch gerade der modulare Einsatz und die Kapselung. Bei AVR muss man allerdings einiges anpassen, da viele C++-Features nicht im Sinne von Open Source unterstützt werden. Ich denke aber, dass hier der AVR-GCC sich mit zunehmenden Speichergrößen und Rechengeschwindigkeiten immer mehr in Richtung C++ entwickeln wird, da der objektorientierte Ansatz bezüglich des Entwicklungsaufwandes (nicht des Ergebnisses!) der überlegenere ist. C drängt in diesem Sinne im professionellen Bereich Assembler etwas zurück, weil es einfacher wiederverwendbar und besser lesbar ist. Für C++ gilt dies verstärkt.

    Interessant sind z.B. Klassen im Bereich der schwachen KI, Beispiele: http://fbim.fh-regensburg.de/~saj391...plomarbeit.pdf und http://www.ai-junkie.com/ai-junkie.html (Finite State Machine, Neuronale Netze, genetische Algorithmen, Kohonen-Netze, etc.)

    Mit dem ATmega128 mit immerhin schon 4096 Bytes SRAM (flankiert durch zwei ATtiny44 für die Motorensteuerung und IR-Abstandsmessung bzw. Empfang/Senden von RC5-Codes) des Nibo lässt sich mit C++ schon ordentlich programmieren. Bei 128 K Flash kommt es auf 1K Unterschied im Programm auch nicht mehr an! Das ist der entscheidene Punkt. Hier ändert sich etwas.

  5. #25
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo

    @Sternthaler
    Danke für deine Mühe
    Habe das mal durchgekaut

    Dazu ein paar Fragen :

    Den Stern muss man ja nur beim deklarieren angeben (char *str
    Nachher nicht mehr ? Stimmt das?

    Kann man das dann nicht irgendwie leicht verwechseln?
    Weil str ist ja dann eigentlich ein Zeiger.
    naja, eigentlich ja nur eine Variable als Zeiger...
    Dachte mir nur, dass kann man dann später im Programme vielleicht irgendwie verwechseln....

    -----
    Sonstige Neuheiten

    Stricke gerade wieder am Programm
    Inzwischen ging die Werteüberweisung schon mit dem "flash unsigned char...)

    Dann verwendete ist dazu das strcpy
    Aber er meldete dann wieder Fehler

    Ich lasse das mal einstweilen und schreibe mal weiter beim Stringumwandeln.

    Dazu probiere ich gerade mit "atoi"
    Irgendwie spinnt es da auch..

    Eigentlich müsste es ja so funktionieren:

    char Text[]= "test";
    int String_asc;
    String_asc = atoi (Text[1]);

    Werde da noch weiter probieren und mich dann wieder melden.

    l.G. Roberto

  6. #26
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    folgendes beispiel ist nicht ganz einfach zu verstehen, zeigt aber, wie man mit zeichenketten, zeigern (und atoi) arbeitet. es werden zahlen aus einer zeichenkette extrahiert und addiert. am ende wird das ergebnis (integer) wieder in eine zeichenkette gewandelt.

    mit char *p wird der zeiger deklariert. später (das ist bissl verwirrend) ist *p aber der char-wert, auf den p gerade zeigt. p wandert hier (mit p++) durch die zeichenkette "array", bis er auf die 0 am ende der zeichenkette stösst.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
      int i=0,summe=0;
      char array[]="Ein String mit der Zahl 123 und der Zahl 456 drin";
      char buffer[8];
    
      char *p; // ein char-zeiger
      p=array; // der zeiger zeigt nun auf erstes element von array
    
      printf("untersuche zeichenkette: %s\n",array);
    
      while(*p) // wiederhole bis der wert des char´s, auf den p zeigt = 0 ist (dort endet der string)
      {
        if(*p>47&&*p<58) // wenn dieser wert eine ziffer ist (0-9)
        {
          buffer[i++]=*p; // dann füge sie dem array 'buffer' zu
        }
        else if(i>0) // andernfalls (wenn i>0 ist, wurden bereits ziffern gefunden, das aktuelle zeichen ist aber keine zahl mehr)
        {
          buffer[i]=0; // 0-terminieren
    
          printf("zahl gefunden: %s\n",buffer); // die ascii-zeichen der zahl liegen nun in buffer
    
          summe+=atoi(buffer); // in integer (ganzzahl-wert) wandeln und zu "summe" addieren
    
          i=0; // weiter geht die Suche nach weiteren zahlen
        }
        p++; // den zeiger in "array" weiterbewegen
      }
      printf("summe der zahlen: %d\n",summe);
    
      itoa(summe,buffer,10);
      printf("summe als zeichenkette: %s\n",buffer);
    
      return 0;
    }
    buffer ist hier mit 8 zeichen sehr klein, und es wurden keine "sicherheitsmassnahmen" eingebaut. in der praxis müsste man unbedingt darauf achten, dass nicht über das ende von buffer hinausgeschrieben werden kann.

    ich kann dir (wie izaseba bereits) nur empfehlen, solche fingerübungen am pc zu machen, die fehlersuche gestaltet sich dann viel einfacher.

    gruesse

  7. #27
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo Robocat

    Danke für das Beispiel. Hat mir sehr geholfen \/

    Wusste nicht, dass die Zeichen im Speicher, sowieso als ASCII vorliegen.
    Habe da dann einen Zeiger deklariert, diesen auf mein Array zeigen lassen und den Zeiger nach jedem Zeichen eins rauf zählen lassen
    Mit *Zeiger dann den ASCII-Wert ausgelesen und verwertet

    Langsam fangen meine Neuronen ja in C zu denken an

    Das alte Problem, gehe ich demnächst an

    l.G. Roberto

  8. #28
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo
    Habe inzwischen Hilfe bekommen
    http://www.mikrocontroller.net/topic/15088#623380
    Hier habe ich nach langen Suchen auch noch was gefunden:
    http://www.embeddedrelated.com/usene...ow/41447-1.php

    Jetzt ne blöde Frage:
    Flash ist ja der Teil, wo der Programmcode reinkommt.
    Da sehe ich im Datenblatt was von 10000 Read/Write's.
    Wird da jetzt mit Flash bei jedem Aufruf der String in dieses Flash geschrieben?

    l.G. Roberto

  9. #29

  10. #30
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo
    Leider kann ich nicht gut englisch.
    Sehe auch nix von Flash.
    Was willst Du mir damit sagen?.
    l.G. Roberto

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress