Moin!
Vielleicht weiss ja ein Spezi, wie man so ein Problem am besten löst?
Ich möchte in Ansi C für ARM für mein Display ein universelles Histogram
Objekt erstellen. D.h. verschiedene Messwerte wie Druck, Feuchte,
Temperatur werden von ein und derselben Routine erledigt. Sieht später
so aus wie in Histogramm bei der Bildbearbeitung.
Also wurstel ich mir erstmal die Grundstruktur hin, nur ein Entwurf.
Prinzip soll sein, dass das Hauptprogramm einen Struct mit Werten
vollpackt, dann eine InitRoutine aufruft, die einen Zeiger auf das neue
Diagramm enthält, d.h. nur die Eckdaten und Werte. Halt so wie in der
StdperiphLib auch.
Diagramm_t myDiagramm;
myDiagramm.blabla = Wert
myDiagramm.blubb = Wert
ZeigeraufNeues Diagramm = CreateDiagramm(&myDiagramm);
Womit ich etwas rumeier und noch nicht weiss, wie lösen ist der Umstand
dass die Werte diverse Datentypen haben. Druck ist float, Temperatur ist
int8 usw. Ich kann bei 20k nicht mit dem Speicher herumasen, also muss
ich schon sparen. Klar kann man alle max 200 Elemente float machen aber
dass sind dann eben 200 x 4 Bytes = 1 kByte. Zzgl noch 1 "valid Byte",
da ich 0 brauche und 0 nicht als ungültigen Datensatz deklarieren kann.
Also versuche ich für jedes erzeugte Diagramm den Datentyp mit zu geben
an die Create Routine.
Gibt es da vielleicht etwas Eleganteres als das was ich verbrochen habe?
1
/* Datenformate */
2
typedefenum{t_float,
3
t_int8,
4
t_uint8,
5
t_uint16}
6
DF_t;
7
8
typedefunion{
9
int8_tzahl_8t;
10
uint8_tzahl_u8t;
11
int16_tzahl_16t;
12
uint16_tzahl_u16t;
13
floatzahl_f;
14
}werte_t;
15
16
17
typedefstruct{
18
uint16_tx_pxLen,// X Ausdehnung in Pixel /2 teilbar
In C? Igitt.... Für meinen Reflow Ofen habe ich gerade ähnliches
angefangen und brauche da auch ein Chart für T Soll und Ist. Ich dachte
sowas findet man mäßig auf Github aber nach einiger Suche dachte ich das
man sowas doch selbst hinbekommt.
Ich baue das in C++, basierend auf der Adafruit Grafik Lib. Die trennt
sauber den HW Layer von den Grafik Primitiven, dadurch konnte ich die
Grafik schon als Simu auf dem PC erstellen. Ist noch in den Grundzügen,
aber kann ich bei Interesse hier vorstellen. Das basiert auf mbed und
ist damit per Export einfach für Bluepill und EmBitz zu generieren.
So sieht das als Anfang aus bisher aus, einmal die Darstellung auf dem
µC und das mit dem exaktamente gleichen Code erzeugte Bild in der PC
Simu. Auf dem PC ist die Entwicklung einfach bequemer, auch wenn das
Debuggen auf den Cortexen schon easy ist.
Der Text in der Simu fehlt noch weil die Grafik in mbed von der mbed
Stream Klasse abgeleitet ist und putc/puts/printf zur Verfügung stellt,
das wäre der nächste Schritt diese in der Simu zu implementieren. Bei
den Arduinos wird ist das von einer vereinfachten printf abgeleitet,
aber die Arduinos haben für mich eine untergeordnete Priorität.
Der Code für das Chart sieht bisher so aus:
Das ist wie gesagt noch nicht zu Ende modelliert und es fehlt noch die
Anbindung von Skalen und Datenserien. Ist eigentlich 'nur' Fleissarbeit,
aber ich muss mich gerade ziemlich teilen.
ooops, jetzt sind die Bilder doppelt. Beim Ändern des vorherigen Posts
gabs Mecker, deshalb habe ich die noch nochmal angehängt. Könnte ein Mod
im vorherigen Post löschen wenn er mag. Ist schon spät...
PS: angehängte Bilder kann man bei Editieren nicht wieder löschen?
Johannes S. schrieb:> In C? Igitt....
Du Johannes.... das nennt man auch "einen Thread kapern" ;-)
Mir fällt bisher nichts ein, wie ich den Datentyp allgemeingültig halten
kann. GNU CC ist doch so mächtig, vielleicht gibts da ja doch noch was.
Naja, das Aufgabe hört sich zumindest gleich an, aber wenn ich dich
nicht mit c++ überzeugen kann...
In C kann man Objektfunktionalität natürlich auch bauen. In C++ kann man
dem Chart ein 'addDataSeries(DataSeries)' verpassen und die DataSeries
kann eine virtuelle Funktion 'draw()' haben die dann ihren Datentyp in
Pixel umrechnet.
In dein C Beispiel übersetzt heisst das in Diagram_t Funktionspointer zu
definieren für dass Speicherhandling und die Zeichenfunktion. Dann
kannst du auch ein drawFloat oder drawInt8 bauen das eben die Daten
entsprechend interpretiert.
pegel schrieb:> Kennst du den?
Es macht wenig Sinn ein komplett neues Setup zu benutzen, was mehr
braucht als einen Editor, wenn man bereits alles selbst gemacht hat.
Ich habe da mal reingeschaut.... bisher noch keinen Plan wie man das
einsetzt, wenn man ein SPI Display vom Typ ILI9341 an einen STM32103
gepappt hat. Da muss dann ja auch der LL Layer geschrieben werden. Das
schreckt mich von solchen Libs auch immer ab.
Ok, es gibt Hoffnung, wenn ich so ein Demoprojekt irgendwie in Embitz
reinkriege und die tausende Pfade zu den Libs richtig gesetzt habe...
Vielleicht kannst Du mir mal Starthilfe geben, wie sowas grundsätzlich
eingerichtet wird.
Das erzeugt mir das Tool, wie ich sehe... und wie wird das eingebunden?
Welche Hardware brauche ich zum Testen? Möglichst ein Demoboard mit
Display.
Ich arbeite mit EmBitz IDE, basiert auf CodeBlocks, kennt aber kein
cmake.
Im Bild mein Projekt. Mein Code, der auf der SPL und TMLIB (Tilen
Majerle) basiert, beides Middlewares. zB enthält die grundlegenede
Grafikfunktionen und eine Kapselung fast aller Pripherie. Ich habe nur
das Interface für mein Display geschrieben.
Wenn das mit diesem Grafikwunder auch so geht wäre das schon gut....
Hast schon Recht.
Wenn dein Board nicht in der Lib ist, wird schon einiges an Anpassung
benötigt.
Da die Lib komplett im Quellcode vorliegt, im Gegensatz zu anderen wie
STemWin, kann man aber vielleicht einige Ideen "ausleihen".