Array Pointer wird nicht korrekt an Funktion übergeben???



  • Hallo,

    irgendwie wird der Pointer "LedAni[c].LedDuty" nicht richtig an die Funktion übergeben, was mache ich falsch???

    Auszug aus main.c

    			do {
    				if (AnimationStepUp>=LedAni[c].Eventtime) {
    					can_write_frame(0x01, 0x40+&LedAni[c].LedChannel, LedAni[c].LedDuty, 1);
    					c++;
    				}
    			} while (AnimationTime);
    

    Auszug aus der Funktion:

    uint8_t can_write_frame(uint8_t devaddr, uint8_t memaddr, const uint16_t *data, uint8_t words_per_data)
    {
      uint8_t a, b, d, s, di;
      uint32_t wdata;
    ...
    wdata = wdata | ((uint32_t) data[a]<<b);
    

    *data kann von 1-16 words enthalten, Anzahl wird mit words_per_data übergeben!

    Hier noch die Datenstrucktur:

    typedef struct  Animation {   // Länge 5 Byte
        short Eventtime, LedDuty;
        char  LedChannel;
    } Led_Animation;
    
    Led_Animation LedAni[] = {    1,    0, SEG1_1,	 10,  100, SEG1_1,	 20,    0, SEG1_1,
    	    					 25,    0, SEG1_2,	 35,  100, SEG1_2,	 45,    0, SEG1_2,
    	    					 50,    0, SEG1_3,	 60,  100, SEG1_3,	 70,    0, SEG1_3,
    	    					 75,    0, SEG1_4,	 85,  100, SEG1_4,	 95,    0, SEG1_4,
    	    					100,    0, SEG1_5,	110,  100, SEG1_5,	120,    0, SEG1_5,
    	    					125,    0, SEG1_6,	135,  100, SEG1_6,	145,    0, SEG1_6,
    	    					150,    0, SEG1_7,	160,  100, SEG1_7,	170,    0, SEG1_7,
    	    					175,    0, SEG1_8,	185,  100, SEG1_8,	195,    0, SEG1_8,
    	    					200,    0, SEG1_9,	210,  100, SEG1_9,	220,    0, SEG1_9,
    	    					225,    0, SEG1_10, 235,  100, SEG1_10,	245,    0, SEG1_10,
    	    					250,    0, SEG1_11, 260,  100, SEG1_11,	270,    0, SEG1_11,
    	    					275,    0, SEG1_12, 285,  100, SEG1_12,	295,    0, SEG1_12,
    	    					300,    0, SEG1_13, 310,  100, SEG1_13,	320,    0, SEG1_13,
    };
    

    Fehler: Der Pointer zu jedem einzelnen LedAni[c].LedDuty wird anscheinend nicht richtig übergeben!?

    Gruß
    Jackson



  • @Jackson00
    Du übergibst doch an die Funktion überhaupt keinen Pointer ...



  • Fehler gefunden, hatte das &-Zeichen an der falschen Stelle...🤬
    Richtig:

    can_write_frame(0x01, 0x40+LedAni[c].LedChannel, &LedAni[c].LedDuty, 1);



  • Da ein short nicht unbedingt 16 Bits groß sein muß, warum verwendest du dann nicht uint16_t in der Struktur Animation?



  • @Jackson00 sagte in Array Pointer wird nicht korrekt an Funktion übergeben???:

    *data kann von 1-16 words enthalten

    wie das denn??


Anmelden zum Antworten