Forum: PC-Programmierung Getter funktion für Struktur funktioniert nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Felix (Gast)


Lesenswert?

guten morgen,
ich habe ein Simulink modell, welches mir eine output struktur gibt.
diese kann ich in meinem code einlesen

Simulink.h
1
typedef struct
2
{
3
 output_member_1;
4
 output_member_2;
5
 output_member_3;
6
 ...
7
 ...
8
}SLOutput_ts;

file1.c
1
static SLOutput_ts* output_ps;
2
...
3
value1 = output_ps->output_member_1;

Das funktioniert auch. Jetzt möchte ich diese Werte aber auch mit einer 
getter funktion anderen files zur verfügung stellen
file1.h
1
const SLOutputs_ts* getSimulinkOutput_ps(void)
file1.c
1
const SLOutputs_ts* getSimulinkOutput_ps(void)
2
{
3
 return &output_ps;
4
}
file2.c
1
value = getSimulinkOutput_ps()->output_member_1;
2
...
3
...
Allerdings bekomme ich hier immer nur müll raus (meistens 0).
output_ps kann ich aber im Debugger sehen, dass dort die richtigen Werte 
drinn stehen.

Wie bekomme ich die Werte den anderen dateien zur verfügung gestellt?

von Oliver S. (oliverso)


Lesenswert?

Felix schrieb:
>const SLOutputs_ts* getSimulinkOutput_ps(void)
>{
> return &output_ps;
>}

Das solltest du dir nochmals ganz genau ansehen.

Oliver

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Oliver S. schrieb:
> Das solltest du dir nochmals ganz genau ansehen.

Und die Compilerwarnungen einschalten und lesen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Felix schrieb:
> static SLOutput_ts* output_ps;
> ...
> value1 = output_ps->output_member_1;

Wo allokierst Du überhaupt den Speicherplatz für output_ts? Ich sehe da 
nur einen Pointer.

Wenn, dann:
1
static SLOutput_ts output_ps;  // kein Pointer!
2
...
3
value1 = output_ps.output_member_1;

Dann wäre auch das Zurückgeben des Pointers in file1.c okay.

von Felix (Gast)


Lesenswert?

Habe nochmal genauer im Code nachgesehen und gesehen, dass ich was 
vergessen habe.
file1.c
1
static SLOutput_ts* output_ps;
2
3
function()
4
{
5
  static SLCode_ExternalOutputs  rtwY_s;
6
  output_ps = &rtwY_s.Output
7
8
  value = output_ps->output_member_1;
9
}
Simulink.h
1
typedef struct {
2
  SLOutputs_ts Output;
3
} SLCode_ExternalOutputs

von Oliver S. (oliverso)


Lesenswert?

Je nun, der Fehler liegt neben dem oben angespochenen immer noch in 
Zeile 42.

Oliver

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.