Forum: Mikrocontroller und Digitale Elektronik STM32F4 Systick und Klassen


von Steffen H. (stef_fen)


Lesenswert?

Hallo Zusammen,

ich möchte gerne in der Systick die Funktion CountTime meiner Klasse 
aufrufen. Doch leider wird die Zeit nicht hochgezählt. Die Systick habe 
ich schon auf Funktion überprüft indem ich eine LED blinken lasse. Rufe 
ich CountTime in der Main auf so wird die Zeit hochgezählt. Was habe ich 
da Falsch gemacht?

Vielen Dank.
Gruß

Time.cpp:
1
#include "Time.h"
2
#include "LCD.h"
3
#include <stdio.h>
4
5
6
class_time::class_time()
7
{
8
  hundert = 0;
9
  sekunde = 0;
10
  minute = 0;
11
  lcd_write_line( 8, "Konstruktor start!");
12
}
13
14
class_time::~class_time()
15
{
16
  lcd_write_line( 8, "Destruktor start!");
17
}
18
19
void class_time::ShowTime()
20
{
21
  sprintf(timebuffer, "%d", hundert);
22
  lcd_write_line( 3, timebuffer);
23
  sprintf(timebuffer, "%d", sekunde);
24
  lcd_write_line( 4, timebuffer);
25
  sprintf(timebuffer, "%d", minute);
26
  lcd_write_line( 5, timebuffer);
27
}
28
29
void class_time::CountTime()
30
{
31
  hundert++;
32
  if(hundert == 100)
33
  {
34
    sekunde++;
35
    hundert = 0;
36
    if(sekunde == 60)
37
    {
38
      minute++;
39
      sekunde = 0;
40
      if(minute == 60)
41
      {
42
        minute = 0;
43
      }
44
    }
45
  }
46
}

Time.h:
1
#ifndef TIME_H_
2
#define TIME_H_
3
4
class class_time
5
{
6
   public:
7
      class_time(); //Konstruktor
8
9
    char timebuffer[20];
10
    volatile int hundert;
11
    volatile int sekunde;
12
    volatile int minute;
13
14
    void ShowTime();
15
    void CountTime();
16
17
    virtual ~class_time(); //Destruktor
18
19
   private:
20
      //blank
21
22
};
23
#endif /* TIME_H_ */

Systick.cpp:
1
#include "Time.h"
2
3
class_time A;
4
5
extern "C" void xPortSysTickHandler(void)
6
{
7
  
8
    A.CountTime();
9
}

Main.cpp:
1
#include "Systick.h"
2
#include "Time.h"
3
#include "LCD.h"
4
#include <stdio.h>
5
6
int main(void)
7
{
8
  SysTick_init();
9
  lcd_init();
10
11
  class_time A;
12
13
  while (1)
14
  {
15
      //A.CountTime();
16
      A.ShowTime();
17
  }
18
}

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Ganz einfach: Du hast zwei voneinander unabhängige Objekte namens A. In 
dem einen Objekt wird munter die Zeit gezählt, aber das andere wird 
angezeigt.

Vermutlich hast Du Warnungen des Compilers bzw. Linkers ignoriert.

von Steffen H. (stef_fen)


Lesenswert?

Wo muss ich denn dann das Objekt A deklarieren damit der Compiler es 
überall kennt?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Du hantierst munter mit Klassen herum, hast Dich aber noch nie mit der 
Sichtbarkeit von Variablen/Objekten beschäftigt? Das sind wirklich so 
elementare Grundlagen (nicht nur) in C/C++, dass Du Dir wirklich einmal 
ein gutes Lehrbuch durchlesen solltest.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Noch ein Hinweis: Du erzeugst auch schon Ausgaben auf Deinem LCD, bevor 
dieses überhaupt initialisiert wurde...

von Ben W. (ben_w)


Lesenswert?

um einfach einen fachbegriff zu nennen wonach du suchen kannst:

Singleton

von Roland R. (Gast)


Lesenswert?

hast schon mal geschaut wie die das lösen?

http://mystm32.de/

Gruß R.

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.