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
mach es so: #define LOGBUFFERSIZE ((float)MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL) Gruß
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:
1 | printf("\n%i", (int)((float)60/(float)0.01)); |
so gehts. Das zweite (float) kann man sich ev. sparen. VG, /th.
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
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)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.