Pointer nur einmal übergeben

Gast #2162575
Lesenswert?

Hallo ich habe folgende Funktionen geschrieben.Jetzt möchte mein 
Ausbilder das ich den Pointer auf die PicData nur einmal übergebe und 
dann immer in Pic.c verwenden kann. Wie mache ich das wenn die der Type 
in Main.c definiert ist.In der Funktion setPicData soll der Pointer 
nicht mehr auftauchen. Innerhalb der Funktion in Pic.c soll ich aber die 
Werte verändern können und später soll ich mit den veränderten Werten in 
der Main weiter arbeiten können.
Main.c
1
Main()
2
{
3
struct  PIC_DATA PIC_DATA[MAX_SLAVE];
4

5
SetPicFirstData(PIC_DATA);
6

7
setPicData(PIC_DATA,LoadVoltage,LoadCurrent,activeBattCharger); 
8
}
1
Pic.c
2
void setPicData(PicData *pPicData,Uint16 voltage,Uint16 current,Uint8 activeBattCharger)
3
{
4
  Uint8 Count =0;
5
  
6
  for(; Count < activeBattCharger; Count++)
7
  {
8
    pPicData[Count].config  =  0x00;
9
    pPicData[Count].Usoll_2 =  voltage / 100; 
10
    pPicData[Count].Usoll_1 =  (((voltage % 100) *10) /4);             pPicData[Count].Isoll_2 =  current / 1000;
11
    pPicData[Count].Isoll_1 =  ((current % 1000) / 4);    pPicData[Count].NewData ++;
12
  }
13
}
14

15
void SetPicFirstData(PicData *pPicData)
16
{  
17
   
18
  Uint8 Count =0;
19

20
  for(; Count < MAX_SLAVE; Count++)
21
  {
22
    pPicData[Count].config   =  0x00;  
23
    pPicData[Count].Usoll_1  =  0x00;
24
     pPicData[Count].Usoll_2  =  0x00;
25
    pPicData[Count].Isoll_1  =  0x00;
26
    pPicData[Count].Isoll_2  =  0x00;
27
    pPicData[Count].Psoll_1  =  0x08;
28
    pPicData[Count].Psoll_2  =  0x07;
29
    pPicData[Count].TempKor  =  0x00;    
30
                  pPicData[Count].BatTemp  =  0x14;    
31
                  pPicData[Count].LSKor    =  0x00;
32
    pPicData[Count].UsollRed =  0x00;
33
    pPicData[Count].NewData  =  0x00;
34
  }
35
}
Gast #2162603
Lesenswert?

Er will sicher etwas in der Richtung ( siehe unten ) sehen.

Würde ich mir aber nochmal überlegen.
Du kannst dann die Funktion setPicData nur noch für genau das eine 
PicData array benutzen, dass Du in SetPicFirstData angibst.
Sollte es später mal eine weiteres Array mit anderen PicData's geben, 
dann kannst Du je kein Ptr auf das andere Array mehr übergeben und somit 
nicht mit dem anderen Array arbeiten.

Ausserdem könntest Du nocht eine Fehlerbehandlung einbauen, wenn 
setPicData aufgerufen wird,SetPicFirstData aber nocht nicht aufgerufen 
wurde.


----   pic.c

static PicData *picDataPtr;


void setPicData(Uint16 voltage,Uint16 current,Uint8 activeBattCharger)
{
  Uint8 Count =0;

  for(; Count < activeBattCharger; Count++)
  {
    picDataPtr[Count].config  =  0x00;
    picDataPtr[Count].Usoll_2 =  voltage / 100;
    picDataPtr[Count].Usoll_1 =  (((voltage % 100) *10) /4);
    picDataPtr[Count].Isoll_2 =  current / 1000;
    picDataPtr[Count].Isoll_1 =  ((current % 1000) / 4);
    picDataPtr[Count].NewData ++;
  }
}





void SetPicFirstData(PicData *pPicData)
{

  Uint8 Count =0;
  picDataPtr = pPicData;  // Statischen Datenpointer belegen.

 for(; Count < MAX_SLAVE; Count++)
  {
    picDataPtr [Count].config   =  0x00;
    picDataPtr [Count].Usoll_1  =  0x00;
    picDataPtr [Count].Usoll_2  =  0x00;
    picDataPtr [Count].Isoll_1  =  0x00;
    picDataPtr [Count].Isoll_2  =  0x00;
    picDataPtr [Count].Psoll_1  =  0x08;
    picDataPtr [Count].Psoll_2  =  0x07;
    picDataPtr [Count].TempKor  =  0x00;
    picDataPtr [Count].BatTemp  =  0x14;
    picDataPtr [Count].LSKor    =  0x00;
    picDataPtr [Count].UsollRed =  0x00;
    picDataPtr [Count].NewData  =  0x00;
  }
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren