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 nichtuint16_t
in der StrukturAnimation
?
-
@Jackson00 sagte in Array Pointer wird nicht korrekt an Funktion übergeben???:
*data kann von 1-16 words enthalten
wie das denn??