Frage zur Initialisierung

Gast #4082087
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
]
(Firma: Torrox.de) #4082095
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
Gast #4082111
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...

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