Forum: Compiler & IDEs Frage zur Initialisierung


von Dilettant (Gast)


Lesenswert?

Ich spiel gerade ein bissel mit einer Bibliothek rum und bekomme mit 
gcc-arm-none-eabi-4.8.3-2014q1

Member '__p1' was not initialized in this constructor   UTFT.cpp 
/Test_4_Calibration/Libraries/UTFT

Insgesamt sind es 53 dieser Art an Warnungen. Gleichzeitig hatte ich 
große Probleme dieses Projekt ans Laufen zu bekommen (weil scheinbar 
immer wieder Werte falsch ausgewertet werden?), mit einer anderen IDE + 
möglicherweise anders eingestellten Compiler-Schaltern gings.

Was meinen die Experten?
Welche Gedanken sollte man sich dabei machen?

1
UTFT::UTFT()
2
{
3
}
4
5
UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER)
6
{ 
7
  word  dsx[] = {239, 239, 239, 239, 239, 239, 175, 175, 239, 127, 127, 239, 271, 479, 239, 239, 239, 0, 0, 239, 479, 319, 239, 175, 127, 239, 239, 319, 319, 799, 127, 127};
8
  word  dsy[] = {319, 399, 319, 319, 319, 319, 219, 219, 399, 159, 127, 319, 479, 799, 319, 319, 319, 0, 0, 319, 799, 479, 319, 219, 159, 319, 319, 479, 479, 479, 159, 159};
9
  byte  dtm[] = {16, 16, 16, 8, 8, 16, 8, SERIAL_4PIN, 16, SERIAL_5PIN, SERIAL_5PIN, 16, 16, 16, 8, 16, LATCHED_16, 0, 0, 8, 16, 16, 16, 8, SERIAL_5PIN, SERIAL_5PIN, SERIAL_4PIN, 16, 16, 16, SERIAL_5PIN, SERIAL_5PIN};
10
11
  disp_x_size =      dsx[model];
12
  disp_y_size =      dsy[model];
13
  display_transfer_mode =  dtm[model];
14
  display_model =      model;
15
16
  __p1 = RS;
17
  __p2 = WR;
18
  __p3 = CS;
19
  __p4 = RST;
20
  __p5 = SER;
21
           .
22
           .
23
           .
24
]

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Die Syntax für Initialisierung eines Members wäre:
1
UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER)
2
  : __p1( RS )
3
  , __p2( WR )
4
  ...
5
{
6
}

Der Compiler meint aber wahrscheinlich den Default c'tor. Wird der 
wirklich benötigt? Wenn nein, nimm ihn raus, wenn ja, dann initialisiere 
die member, dass würde dann zumindest zu besserer Reproduzierbarkeit 
führen.

Welchen Sinn haben die lokalen Variablen dsx, dsy und dtm?

Alle Bezeichnet, die mit einem doppelten Unterstrich beginnen, gehören 
dem Compiler und sollten nicht verwendet werden.

mfg Torsten

: Bearbeitet durch User
von Dilettant (Gast)


Lesenswert?

>Alle Bezeichnet, die mit einem doppelten Unterstrich beginnen, gehören
>dem Compiler und sollten nicht verwendet werden.
Unten geht's so weiter:
1
void UTFT::InitLCD(byte orientation)
2
{
3
  orient=orientation;
4
  _hw_special_init();
5
6
  pinMode(__p1,OUTPUT);
7
  pinMode(__p2,OUTPUT);
8
  pinMode(__p3,OUTPUT);
9
  if (__p4 != NOTINUSE)
10
    pinMode(__p4,OUTPUT);
11
  if ((display_transfer_mode==LATCHED_16) or ((display_transfer_mode==1) and (display_serial_mode==SERIAL_5PIN)))
12
    pinMode(__p5,OUTPUT);
13
  if (display_transfer_mode!=1)
14
    _set_direction_registers(display_transfer_mode);
15
  .
16
  .
17
  .
18
}
19
C-Code
Alles sehr merkwürdig...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.