Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C++] Beste methode opslaan keyframes met traject

Pagina: 1
Acties:

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-11 14:21

LauPro

Prof Mierenneuke®

Topicstarter
Ik heb een editor gemaakt waar de gebruiker op zijn scherm keyframes kan zetten op een tijd. Een keyframe is eigenlijk niets anders dan een waarde in de tijd, bijvoorbeeld:

0s - 0%
10s - 50%
20s - 100%

Vervolgens teken ik in die GUI lijntjes tussen deze punten en kan de gebruiker dus een traject uitzetten. Deze keyframes gelden voor meerdere kanelen bijvoorbeeld 10.

Wat ik vervolgens wil doen is de tussenliggende tijdwaardes interpoleren, dit werkt allemaal goed, geen probleem. Hierbij worden keyframes eerst gesorteerd op tijd en dan geplot. Voor de snelheid zit ik te denken om deze plot in een array te gaan zetten. De waardes worden uiteindelijk over een soort DMX-bus verzonden op 38400 BAUD. Uiteindelijk moet het systeem naar 250000 BAUD gaan maar daar heb ik nog geen apparatuur voor.

Het apparaat dat deze commando's ontvangt moet deze gaan uitvoeren, en ik wil dat de delay in de hele cyclus zo kort mogelijk is. Het systeem is echter wel bidirectioneel en het is RS485 dus verzenden en ontvangen zit op dezelfde bus, ik zit eraan te denken om dit toch nog om te zetten naar RS422 zodat het verzenden door kan gaan (af en toe komt er een statusbericht terug).

Stel ik hou 44 Hz aan (DMX snelheid), dan moet ik om de 23ms een waarde opslaan. Bij 10 minuten zit ik dan per kanaal (16 bit) op 52 kB geheugen, niets dus. De zenderroutine hoeft dan alleen maar met een positiepointer door deze array te wandelen en dan de actuele waarde uit te sturen.

Op dit moment gebruik ik een QMap en heb het gevoel dat dit hopeloos veel extra geheugen gebruikt. En ik ben er ook achter gekomen dat deze soms 0-pointers uit stuurt als je bijvoorbeeld bij een iterator -- gebruikt ipv ++. Daarom zit te denken om alles gewoon lekker in een array te zetten.

Eigenlijk te simpel voor woorden, zie ik nog iets over het hoofd?

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-11 13:12
Op dit moment gebruik ik een QMap en heb het gevoel dat dit hopeloos veel extra geheugen gebruikt. En ik ben er ook achter gekomen dat deze soms 0-pointers uit stuurt als je bijvoorbeeld bij een iterator -- gebruikt ipv ++. Daarom zit te denken om alles gewoon lekker in een array te zetten.
Dat lijkt me een bug in je software, nauwelijks iets wat je QMap kunt aanrekenen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Bij zo goed als elke class in C++ geldt dat misbruik leidt tot ongelukken. Iterators bijvoorbeeld zijn unchecked. Maar zelfs bij een array is operator-- ongedefinieerd op de eerste pointer. Niet zo gek: array pointers zijn iterators.

De overhead van QMap is inderdaad aanzienlijk, relatief dan. In absolute zin past de hele QMap voor 52kB aan ruwe data nog steeds in je CPU cache.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein