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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.