- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Übersetzung von C nach Compact-C

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523

    Übersetzung von C nach Compact-C

    Hallo,

    ich habe diese C-Funktion:
    Code:
    #define MAX_PARAMS 6 
    int params[MAX_PARAMS]; 
    
    int cmdsplit(char*cmd_string) 
    {    
    	int cursor = 0;  
    	int param_nr = 0; 
    
    	// Parameterarray initialisieren 
    	for (int i=0;i<MAX_PARAMS;i++) 
    		params[i] = -1; 
    
    	/* Prüfen ob der command-string gültig beginnt */ 
    	if ((cmd_string == NULL) || (cmd_string[cursor] != '#')) 
    		return -1; 
    
    	while (cmd_string[cursor] != '\0' && cmd_string[cursor] != '*') // prüfen ob das ende erreicht wurde 
    	{
    		char *tmp; 
    
    		cursor++; 
    		tmp = (cmd_string + cursor);  // tmp wird auf den anfang des für atoi auszulesenden werts "gesetzt" 
    		params[param_nr] = atoi(tmp); // wert auslesen 
    		if (param_nr >= MAX_PARAMS)   // sind mehr parameter verfügbar als erwartet? Stimmt was mit dem Commando nicht... 
    			return -1; 
    		param_nr++; 
    
    		// Überspingen der ausgelesen Zeichen und ermitteln des nächsten "interessanten" Teils im string. 
    		while((cmd_string[cursor] != ':') && (cmd_string[cursor] != '*') && (cmd_string[cursor] != '\0')) 
    			cursor++; 
    	} 
    
      return param_nr; 
     }
    Leider funktioniert das so mit Compact-C nicht. Es gibt einige Syntaxfehler. Z.B. mag der die Pointer überhaupt nicht. Auch die Funktion "atoi" kennt er nicht.

    Kann mir jemand helfen, das zu übersetzen?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    15.03.2010
    Beiträge
    94
    Hmm, statt nem char-Pointer n char-Array benutzen.
    Und atoi lässt sich sehr einfach selbst programmieren.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Okay, nur ehrlich gesagt habe ich nicht die geringste Ahnung von C-Programmieren... Mein Gebiet ist eher .NET/C#. Kann mir dewegen vielleicht jemand verraten wie man atoi selbst schreibt?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.03.2010
    Beiträge
    94
    Mein Gebiet ist eher .NET/C#
    Glaub ich nich...
    Das hat doch mit der Sprache nichts zu tun!
    Du nimmst den ASCII Wert von array[1] subtrahierst den um den Wert in der ASCII Tabelle um auf den Wert der Ziffer zu kommen und addierst ihn zu der Interger Variable, dann nimmst du array[2] multiplizierst ihn mit 10 und addierst ihn zu der Integer Variable, dann nimmst du array[3]....
    Fertig.

  5. #5
    shedepe
    Gast
    Doch es hat schon was mit der Sprache zu tun. Unter .Net muss man sich mit sachen wie atoi, pointer oder der Dastellung von strings als char arrays relativ wenig rumschlagen.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Zitat Zitat von Del
    Mein Gebiet ist eher .NET/C#
    Glaub ich nich...
    Das hat doch mit der Sprache nichts zu tun!
    Du nimmst den ASCII Wert von array[1] subtrahierst den um den Wert in der ASCII Tabelle um auf den Wert der Ziffer zu kommen und addierst ihn zu der Interger Variable, dann nimmst du array[2] multiplizierst ihn mit 10 und addierst ihn zu der Integer Variable, dann nimmst du array[3]....
    Fertig.
    Danke schön Das werde ich dann wohl noch hinbekommen =)

    Zitat Zitat von shedepe
    Doch es hat schon was mit der Sprache zu tun. Unter .Net muss man sich mit sachen wie atoi, pointer oder der Dastellung von strings als char arrays relativ wenig rumschlagen.
    Richtig. Unter .NET hast du alles lästige was man bei C/C++ noch selbst machen muss entweder automatisiert oder eben sehr vereinfacht. Pointer z.B. tauchen normalerweise bei .NET überhaupt nicht auf.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    15.03.2010
    Beiträge
    94
    Richtig. Unter .NET hast du alles lästige was man bei C/C++ noch selbst machen muss entweder automatisiert oder eben sehr vereinfacht. Pointer z.B. tauchen normalerweise bei .NET überhaupt nicht auf.
    Nicht ganz richtig.
    C++ bietet auch sehr viel damit man sich um sowas nciht kümmern muss.
    Aber wie man jetzt gesehen hat fehlen durch diese "einfachen Sprachen" wichtige Grundlagen. Klar könnte man sagen das man es in diesen ganzen .NET Sprachen nicht mehr braucht, aber man kommt immer wieder an einen Punkt wo es halt doch nötig ist.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Auf der M32 gab es die Funktion "getBufferLength()". Damit konnte man prüfen, ob auf der UART-Schnittstelle Daten warten. Gibt es diese auch bei der M128?
    Die Funktion StrLen kennt er auch nicht... Gibt es dazu was passendes?

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    30.12.2009
    Ort
    Koblenz
    Alter
    44
    Beiträge
    78
    Streiche StrLen, setzte Str_Len. Das funktioniert. Sieht zwar einfach aus, aber auch auf sowas muss man erstmal kommen.

    P.S: Das war jetzt NULL böse gemeint

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress