Zeichen in Array aus WORD Elementen speichern



  • Hallo,

    ich versuche gerade ein

    #define BUILD_NR "49"

    welches automatisch von Subversion erzeugt wird in ein WORD array zu speichern.
    D.h. das WORD array befindet sich in einer Struktur.
    Die Struktur wird später ausgelesen und soll dann Version 49 anzeigen.

    Leider habe ich gerade keinen Ansatzpunkt, wie ich die 4 und die 9 als einzelne Elemente in das ARRAY aus WORD Elementen bekomme.
    Durch das Define habe ich ja nur eine Textersetzung. D.h. datentyplos.

    struct{
    BYTE bLength;
    BYTE bDscType;
    WORD string[10];
    }sd001={
    sizeof(sd001),USB_DESCRIPTOR_STRING,
    {'V','e','r','s','i','o','n',' ','hier soll die 4 stehen','hier soll die 9 stehen'
    }};

    Hat jemand einen Ansatzpunkt, wie ich dieses Problem lösen könnte?
    Habe google bereits ausgiebig gestresst. 😉

    Gruß MU45



  • mu45 schrieb:

    Durch das Define habe ich ja nur eine Textersetzung. D.h. datentyplos.

    Du hast ein Literal, und Literale haben einen Typ.

    {'V','e','r','s','i','o','n',' ',BUILD_NR[0],BUILD_NR[1]}
    


  • Habe es eben eingegeben. Und der Compiler läuft durch. 🙂
    Jetzt werde ich das ganze mal auf meinen uController flashen und sehen, ob die Version vom Controller auf mein Windows Programm übertragen wird.

    Vielen Dank für den Tipp.

    Gruß MU45



  • Aber warum WORD?

    Wenn das was anderes als char ist, vergeudest du nur Speicher (gerade auf einem µC)



  • WORD ist von Microchip vorgegeben.
    Leider funktioniert die Idee doch nicht.
    Hatte 'Build_Nr[0]' und 'Build_Nr[1]' in Hochkommas geschrieben.
    Dann lief der Compiler durch. Wenn ich die Hochkommas wegnehme, dann bekomm ich vom Compiler gesagt, dass ich nur mit Konstanten initialisieren darf.

    Siehe Meldungen compiler:
    --> constant expression expected in initializer
    --> extraneous initializer values

    D.h. so wie es aussieht, kann ich in die Initialisierung des Arrays in der Struktur keine Variablen angeben.

    Sehe ich das richtig, dass sd001 eine Instanz der Struktur ist und dann das WORD Array namens string mit den Konstanten werten initialisiert wird?

    Sollte ich dann nicht über sd001.string[23] und sd001.string[24] auf die einzelnen Elemente des string Arrays kommen und diese verändern können?

    Hat jemand ne Idee?

    Hier nochmals meine Idee welche leider nicht funktioniert: 😕

    //Manufacturer string descriptor
    ROM struct{BYTE bLength;BYTE bDscType;WORD string[29];}sd001={
    sizeof(sd001),USB_DESCRIPTOR_STRING,
    {'V','e','r','s','i','o','n',' ',NULL,NULL
    }};

    sd001.string[23] = BUILD_NR[0];
    sd001.string[24] = BUILD_NR[1];

    Hier bekomme ich dann einen Syntaxfehler!



  • Gewöhne dir mal an, hier C Codetags zu benutzen.
    Gewöhne dir mal, hier den kompletten Code zu zeigen, und nicht bloß immer Bruchstücke, die sich auch noch unterscheiden, mal schreibst du

    WORD string[29]
    mal
    WORD string[10]
    


  • Probiere mal

    #include <wchar.h>
    
    #define _T(A) L##A
    
    //Manufacturer string descriptor
    ROM struct{BYTE bLength;BYTE bDscType;wchar_t string[29];} sd001 =
    {
      sizeof(sd001),USB_DESCRIPTOR_STRING, _T("Version ", BUILD_NR)
    }};
    

    (falls dein Compiler wchar_t unterstützt)

    Vollständiger Code: http://ideone.com/GnHjTw


Anmelden zum Antworten