mikrocontroller.net

Forum: PC-Programmierung Rechnen mit Makros


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich hab nur eine kurze Frage, die wahrscheinlich auch nur einer kurzen 
Antwort bedarf:

ich habe zwei Makros:
#define MAX_CYCLE_TIME 60  // a cycle can not last longer than 60s
#define LOG_CYCLE_POINTS_INTERVAL 0.01 // Log all system data every 10ms

Daraus berechne ich mir die benötigte Puffergröße (hier also 6000 = 60 
/0.01)

Ich wollte mir ein neues Makro einführen, ungefähr so:
#define LOGBUFFERSIZE  MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL

Geht das nicht? Geht´s anders? Ich bekomme kein Ergebnis.

Danke für eure Hilfe!

Grüße,

patrick

Autor: Andreas S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach es so:

#define LOGBUFFERSIZE  ((float)MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL)

Gruß

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

1. Makros aus mehr als einer Zahl sollte man immer klammern, damit man 
auch den gewünschten Effekt bekommt.

2. casting-probleme, weil der wohl (int) draus macht:
 printf("\n%i", (int)((float)60/(float)0.01));
so gehts.
Das zweite (float) kann man sich ev. sparen.


VG,
/th.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

da der Buffer später ein int möchte, hab ich´s so gemacht:

#define LOGBUFFERSIZE 
((int)((float)MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL))

double  Time_Buffer  [LOGBUFFERSIZE];

Es funktioniert!

Vielen Dank für eure schnellen Antworten!
Mit ein bisschen probieren hätt ich schon auch drauf kommen können!

Grüße,

Patrick

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick schrieb:

> #define MAX_CYCLE_TIME 60  // a cycle can not last longer than 60s
> #define LOG_CYCLE_POINTS_INTERVAL 0.01 // Log all system data every 10ms
>
> Daraus berechne ich mir die benötigte Puffergröße (hier also 6000 = 60
> /0.01)

Soweit so gut

> Ich wollte mir ein neues Makro einführen, ungefähr so:
> #define LOGBUFFERSIZE  MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL

Nicht 'ungefähr'
Hast du es so, oder hast du es nicht so

> Geht das nicht? Geht´s anders? Ich bekomme kein Ergebnis.

Was heißt 'kein Ergebnis'. In welchem Zusammenhang? Wo wird das Makro 
verwendet?


(Vergiss die Antworten, die sich um den cast drehen. So wie du das hast, 
passt das schon)

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

ich hab wieder mal nicht gut aufgepasst und alles viel zu umständlich 
gemacht!

Ich hatte es genau so geschrieben:

   #define MAX_CYCLE_TIME 60  // a cycle can not last longer than 60s
   #define LOG_CYCLE_POINTS_INTERVAL 0.01 // Log all system data every 
10ms
   #define LOGBUFFERSIZE  MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL

Das ist tatsächlich auch richtig so, danke Karl Heinz!

Aber:
In Hinsicht auf
   double Time_Buffer [LOGBUFFERSIZE];
muss aber dann doch noch gecastet werden:
   #define LOGBUFFERSIZE (int)(MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL)

Funktioniert einwandfrei!

Vielen Dank!

Grüße,

Patrick

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
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.

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