Pointer Problem

Gast #2159815
Lesenswert?
• ▲
▼
Hallo habe ein kleines Problem was mein leider recht dürftiges 
Verständnis von Pointern überschreitet.Ich habe folgenden Code 
geschrieben der auch soweit funktioniert.
1
int WritePICData(Uint8 *pData, Uint8 len, Uint8 SlaveAddr )
2
{
3

4
   Uint8 Res =0;
5
   Uint8 i = 0;
6

7
   struct I2CMSG SerMes;  
8
 
9
   GI2CMsgStatus = I2C_MSGSTAT_SEND_NOSTOP;
10

11

12
   SerMes.SlaveAddress = SlaveAddr<<1;
13
   SerMes.MasterAddress = I2C_MASTER_ADDR;
14
   SerMes.Offset= 0x80;
15
   SerMes.NumOfRcvBytes = 2;
16
   SerMes.NumOfSendBytes = 0x0B;
17
   
18
   for (i =0; i <len ;i++)
19
   {
20
      SerMes.MsgSendBuffer[i] = *(pData++);
21
   }
22
   
23
   SerMes.MsgSendBuffer[len]  = Checksum( (Uint8*)&SerMes, 15 );
24

25
   Res = I2CMTransceive( SlaveAddr, SerMes.NumOfSendBytes+DEFAULT_MESS_BYTES, (Uint8*)&SerMes.MasterAddress,
26
         SerMes.NumOfRcvBytes, (Uint8*)&SerMes.MsgRcvBuffer );  
27
           
28
   if (Res == I2C_NO_SLAVE)
29
   {
30
      return PCK_WRITE_DATA_ERROR;
31
   }
32
          
33
   return PCK_WRITE_DATA_OK;      
34
}
So jetzt soll ich aber meinen Pointer nicht dirket im Funktionsaufruf 
übergeben. Sondern der Pointer soll erst später übergeben werden.Dies 
soll über einen funktion geschehen. Weis nur nicht wie ich das nun 
realisieren soll?
Soetwas habe ich noch nicht gemacht. Hab die Pointer bisher immer direkt 
übergeben.
#2159829
Lesenswert?
• ▲
▼
Andi79 schrieb:
> So jetzt soll ich aber meinen Pointer nicht dirket im Funktionsaufruf
> übergeben. Sondern der Pointer soll erst später übergeben werden.Dies
> soll über einen funktion geschehen. Weis nur nicht wie ich das nun
> realisieren soll?
Was heißt "später"? Meinst du das du WritePICData() aufrufst und die 
Funktion dann solange mit dem Daten versenden wartet bis über eine 
andere Funktion der Pointer geladen wurde?

Oder soll es die ganze Zeit senden und du aktualisierst halt irgendwann 
mal den Pointer?

Oder soll die Funktion selbst nach einem pointer fragen?

Es ist aus deiner Fragestellung nicht ganz klar was du willst.
#2159845
Lesenswert?
• ▲
▼
Ok, nur damit ich es richtig verstanden habe:
- Du rufst WritePICData() auf, aber ohne einen pointer zu übergeben.
- Innerhalb von WritePICData() rufst du dann eine Funktion (ich nenne 
sie mal GetPointer) auf, die dir einen Pointer zurückliefert.
- Nach erhalt dieses Pointers läuft WritePICData weiter

Habe ich deinen Plan so richtig verstanden? Dann wäre der einfachste Weg 
den Pointer in einer static/globalen Variable zu speichern die nur 
GetPointer() kennt. Zusätzlich noch ein Flag dazu um festzustellen ob 
der Pointer den GetPointer() kennt auch gültig ist.
Durch irgendeine andere Funktion wird dann dieser Pointer geladen. Oder 
GetPointer selbst frägt woanders nach einem gültigen Pointer und dient 
somit nur als Interface.
#2159882
Lesenswert?
• ▲
▼
Könnte bsw. so aussehen:

MyCode.h
1
#ifndef _MY_CODE_H
2
#define _MY_CODE_H
3

4
extern Uint8* GetPointer(void);
5
extern void SetPointer(Uint8* pPointer);
6

7
#endif

MyCode.c
1
#include "MyCode.h"
2

3
Uint8* pData=NULL;  //pointer for Data
4

5
//Funktion die Pointer auf Daten ausliest
6
Uint8* GetPointer(void){
7
   
8
  return pData;
9
}
10

11
void SetPointer(Uint8* pPointer){
12
    pData = pPointer;
13
}

Das wäre die eifnachste Variante für das ganze. In WritePICData() musst 
du dann nur noch prüfen ob der zurückgegebene pointer ungleich NULL ist.

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.