@ Mathias G. (motze)
>ich möchte gerne ein struct an einer Funktion übergeben. Leider>funktioniert das nicht so wie geplant.
Kann man machen, ist aber eher unüblich. Solche großen Massen an Daten
will man nicht kopieren, sondern übergibt Zeiger.
Da fehlt wohl ein typedef. Eher so.
erstmal ganz herzlichen dank für deine Hilfe leider bekomme ich noch
eine Fehlermeldung:
array type has incomplete element type
was möchte mir den der Compiler damit sagen?
Irgendwas in diese Richtung wird es aber sein!
OT: wie kommt man eigentlich auf die Idee, irgend einen Namen mit
Unterstrich[en] am Anfang zu versehen? Lass das...
jetzt habe ich leider ein anderes Problem der folgende Code Funktioniert
genau einmal danach nicht mehr woran kann das den liegen?
1
voidoutput_reset()
2
{
3
_delay_us(60);
4
}
5
6
voidoutput_alle(uint8_t_led[])
7
{
8
uint8_ti;
9
uint8_tk;
10
11
for(i=0;i<180;i++)
12
{
13
for(k=0;k<8;k++)
14
{
15
if(_led[i]&0x80)
16
{
17
output_eins();
18
}
19
else
20
{
21
output_null();
22
}
23
_led[i]<<=1;
24
}
25
}
26
}
27
28
uint8_tLed_60[180]=
29
{
30
0x00,0xFF,0xFF,//1
31
0x00,0xFF,0xFF,//2
32
0x00,0xFF,0xFF,//3
33
0x00,0xFF,0xFF,//4
34
0x00,0xFF,0xFF,//5
35
0x00,0xFF,0xFF,//6
36
0x00,0xFF,0xFF,//7
37
0x00,0xFF,0xFF,//8
38
0x00,0xFF,0xFF,//9
39
0x00,0xFF,0xFF,//10
40
41
0xFF,0xFF,0x00,//11
42
0xFF,0xFF,0x00,//12
43
0xFF,0xFF,0x00,//13
44
0xFF,0xFF,0x00,//14
45
0xFF,0xFF,0x00,//15
46
0xFF,0xFF,0x00,//16
47
0xFF,0xFF,0x00,//17
48
0xFF,0xFF,0x00,//18
49
0xFF,0xFF,0x00,//19
50
0xFF,0xFF,0x00,//20
51
52
0xFF,0xFF,0xFF,//21
53
0xFF,0xFF,0xFF,//22
54
0xFF,0xFF,0xFF,//23
55
0xFF,0xFF,0xFF,//24
56
0xFF,0xFF,0xFF,//25
57
0xFF,0xFF,0xFF,//26
58
0xFF,0xFF,0xFF,//27
59
0xFF,0xFF,0xFF,//28
60
0xFF,0xFF,0xFF,//29
61
0xFF,0xFF,0xFF,//30
62
63
0xFF,0xFF,0xFF,//31
64
0xFF,0xFF,0xFF,//32
65
0xFF,0xFF,0xFF,//33
66
0xFF,0xFF,0xFF,//34
67
0xFF,0xFF,0xFF,//35
68
0xFF,0xFF,0xFF,//36
69
0xFF,0xFF,0xFF,//37
70
0xFF,0xFF,0xFF,//38
71
0xFF,0xFF,0xFF,//39
72
0xFF,0xFF,0xFF,//40
73
74
0xFF,0xFF,0xFF,//41
75
0xFF,0xFF,0xFF,//42
76
0xFF,0xFF,0xFF,//43
77
0xFF,0xFF,0xFF,//44
78
0xFF,0xFF,0xFF,//45
79
0xFF,0xFF,0xFF,//46
80
0xFF,0xFF,0xFF,//47
81
0xFF,0xFF,0xFF,//48
82
0xFF,0xFF,0xFF,//49
83
0xFF,0xFF,0xFF,//50
84
85
0xFF,0xFF,0xFF,//51
86
0xFF,0xFF,0xFF,//52
87
0xFF,0xFF,0xFF,//53
88
0xFF,0xFF,0xFF,//54
89
0xFF,0xFF,0xFF,//55
90
0xFF,0xFF,0xFF,//56
91
0xFF,0xFF,0xFF,//57
92
0xFF,0xFF,0xFF,//58
93
0xFF,0xFF,0xFF,//59
94
0x00,0xFF,0x00//60
95
};
96
97
intmain(void)
98
{
99
DDRC|=(1<<PC0);
100
101
while(1)
102
{
103
output_alle(Led_60);
104
output_reset();
105
_delay_ms(5000);
106
}
107
}
ich weiß das mit den unterstrichen ist doof ich werde es mir auch
abgewöhnen.
Also die Leds leuchten genau 5 Sekunden auf und danach geht nix mehr.
Output_reset hat bei anderen Sachen immer hingehauen mit Timing.
vielen dank schonmal
Falk Brunner schrieb:> Solche großen Massen an Daten> will man nicht kopieren, sondern übergibt Zeiger.
Genau das tut er. Es gibt in C keine Array-Übergabe per Wert, nur per
Referenz. Sein
> void output_send_led(LED_t _led[], uint8_t _anzahl_led)
ist nur eine andere Schreibweise von deinem
> void output_send_led(LED_t *_led, uint8_t _anzahl_led)
Falk Brunner schrieb:> Da fehlt wohl ein typedef. Eher so.
Ob man
struct LED { ... }
schreibt und im weiteren Code stets
struct LED
verwendet, oder erst
typedef struct { ... } LED
und dann dafür
LED
ist gleich. Seine Variante wirkt nur etwas altbacken. Man kann auch
typedef struct LED { ... } LED
schreiben, und dann beides verwenden.
Vielen dank für die Hilfe jetzt geht es so wie ich es will. Manchmal ist
man echt blind. Klar wenn ich die alle Rausschifte das nur noch nullen
übrig geblieben sind.
vielen dank nochmal.