Arrays und Pointer



  • Ich habe folgendes Problem:

    Bei meinem Programm muss ich alle Zeichen dieses Arrays EINZELN nacheinander über die serielle schnittstelle senden:

    char RPI2C[] = {'#','R','P','I','2','C',' ','A',' ','0',' ','0','0',0x00};
    

    Zum senden brauche ich einen Pointer auf ein Zeichen dieses Arrays, senden möchte ich das ganze über eine for-schleife

    for (int i=0;i<13;i++)
    					{
    						str_ptr = &RPI2C[0];
    						int nBytesSent = serial.SendData(str_ptr,sizeof(str_ptr));
    					}
    

    NEED HELP 😕



  • str_ptr = &RPI2C[i];
    oder
    str_ptr = RPI2C+i;

    Will SendData wirklich die Größe des Pointers?



  • serial.SendData(const char *,int);

    const char * ist pointer auf zu schreibende zeichen und int die grösse der zu schreibenden zeichen, muss dann wenn man jeweils ein zeichen schreibt auch auf 1 gesetzt werden



  • die beiden vorschläge funktionieren beide nicht...

    bei

    str_ptr = &RPI2C[i]
    

    wird jeweils das ganze Feld gesendet,

    bei

    str_ptr = RPI2C+i
    

    erst das ganze Feld, und bei jedem weiteren Senden das jeweils erste Zeichen nicht, als #RPI2C..., dann RPI2C... dann PI2C... usw



  • chRis`- schrieb:

    char RPI2C[] = {'#','R','P','I','2','C',' ','A',' ','0',' ','0','0',0x00};
    
    for (int i=0;i<13;i++)
    					{
    						str_ptr = &RPI2C[0];
    						int nBytesSent = serial.SendData(str_ptr,sizeof(str_ptr));
    					}
    
    char RPI2C[] = "#RPI2C A 0 00";
    int nBytesSent = serial.SendData(RPI2C,sizeof(RPI2C));
    


  • Das Problem ist, das die letzten drei Nullen Variablen sind, die übergeben werden.. so kann die einzelne 0 zw 0 und 7 liegen ( ist die i²c adresse) und acuh die letzten beiden Nullen müssen änderbar sein, da hier die Speicheradresse übergeben wird... ein Feld wie vorgeschlagen lässt sich ned über

    RPI2C[9]
    

    zb an 9ter Stelle ändern, oder irre ich?



  • chRis`- schrieb:

    Das Problem ist, das die letzten drei Nullen Variablen sind,

    ok.

    char RPI2C[] = {'#','R','P','I','2','C',' ','A',' ','0',' ','0','0',0x00};
    int nBytesSent = serial.SendData(RPI2C,sizeof(RPI2C));
    

    es kam ja nur auf die zweite zeile statt der langen schleife an.



  • chRis`- schrieb:

    die beiden vorschläge funktionieren beide nicht...

    bei

    str_ptr = &RPI2C[i]
    

    wird jeweils das ganze Feld gesendet,

    bei

    str_ptr = RPI2C+i
    

    erst das ganze Feld, und bei jedem weiteren Senden das jeweils erste Zeichen nicht, als #RPI2C..., dann RPI2C... dann PI2C... usw

    versuch es mal mit

    str_ptr = RPI2C[i]
    

Log in to reply