Hans Wilhelm wrote:
> hmm das ist anscheinend nicht implementiert...
Das ist auch kein Wunder.
new ist C++
Wir reden hier aber von C
> macht nix nimm halt
> malloc...
@Kai
Tu's nicht.
Das ist keine so gute Lösung.
> da sollte folgendes hin:
> Read_Data(data_rx);
>
> data_rx ist nämlich schon ein pointer...
Na ja. Nicht wirklich.
data_rx ist immer noch ein Array.
Aber Arrays werden in C übergeben, indem ein Pointer
auf das erste Array Element übergeben wird. Das heist
aber nicht, das data_rx ein Pointer ist.
1 | void Read_Data( uint8_t* data )
|
2 | {
|
3 | data[0] = 5;
|
4 | data[1] = 8;
|
5 | }
|
6 |
|
7 | void Command_Check(void)
|
8 | {
|
9 | ...
|
10 | uint8_t data_rx[3];
|
11 | ...
|
12 | Read_Data( data_rx );
|
13 | ...
|
14 | }
|
Wenn man möchte kann man auch eine alternative Syntax benutzen:
1 | void Read_Data( uint8_t data[] )
|
2 | {
|
3 | data[0] = 5;
|
4 | data[1] = 8;
|
5 | }
|
macht aber genau das gleiche. In Read_Data ist 'data' auch
nichts anderes als ein Pointer auf das erste Array Element.
Nur wird das durch diese Syntax etwas verschleiert.
Wie immer: Achtung: Read_Data hat keine Möglichkeit abzuklären,
ob es einen Array-Überlauf geben wird. Daher ist es oft
sinnvoll, in die Funktion auch die Länge das Arrays mit
hininzugeben:
1 | void Read_Data( uint8_t* data, int maxLen )
|
2 | {
|
3 | data[0] = 5;
|
4 | data[1] = 8;
|
5 |
|
6 | if( maxLen > 2 )
|
7 | data[2] = 9;
|
8 | }
|
9 |
|
10 | void Command_Check(void)
|
11 | {
|
12 | ...
|
13 | uint8_t data_rx[3];
|
14 | ...
|
15 | Read_Data( data_rx, 3 );
|
16 | ...
|
17 | }
|