Hallo zusammen, ich hätte eine kleine Frage. Ich habe mir aus LEDs mal ein Display gebastelt und wollte damit ein wenig spielen. Jetzt kam mir die Idee darauf ein Tetris zu programmieren und des weiteren möchte ich eventuell nachher "Bilder" vom PC auf das "Display" schicken. Mir fällt es etwas schwer das Tetris direkt auf der Hardware zu programmieren, da es immer ewig dauert bis alles auf dem Chip ist. Außerdem kann ich nur daran arbeiten wenn die Hardware neben mir steht. Ich wollte mir jetzt möglichst schnell ne Gui zusammenschustern und dann das Tetris ausprobieren (andere Sachen gehen ja leider nicht, Schnittstellen etc.) Eventuell kann ich das dann auch noch für den zweiten Anwendungszweck nutzen. Fragen: Ist QT dafür geeigent? Wird das normalerweise so gemacht? Danke. Max
Max S. schrieb: > Mir fällt es etwas schwer das Tetris direkt auf der Hardware zu > programmieren, da es immer ewig dauert bis alles auf dem Chip ist. Warum? Bei drücke ich F9 und 1-10 Sekunden später (je nach Programmgröße, meistens 3-5) läuft das Programm schon auf der Hardware. Mal ein Beispiel (Bürolaptop mit 2.3Ghz Dualcore und 3GB RAM auf Linux (Elementary OS)):
1 | simon@simon-TravelMate-5735Z:~/Documents/Laminator/src$ wc -l *.c *.h |
2 | 73 ADC.c |
3 | 49 BUTTON.c |
4 | 160 LCD.c |
5 | 140 main.c |
6 | 48 ADC.h |
7 | 31 BUTTON.h |
8 | 22 GLOBAL.h |
9 | 60 LCD.h |
10 | 583 total //<<<<<<<<<<<<<<<< Gesamtquellcodezeilen (zugegeben nicht sooo viel ;-) ) |
11 | simon@simon-TravelMate-5735Z:~/Documents/Laminator/src$ time make clean |
12 | |
13 | -------- begin -------- |
14 | |
15 | Cleaning project: |
16 | rm -f main.hex |
17 | rm -f main.eep |
18 | rm -f main.obj |
19 | rm -f main.cof |
20 | rm -f main.elf |
21 | rm -f main.map |
22 | rm -f main.obj |
23 | rm -f main.a90 |
24 | rm -f main.sym |
25 | rm -f main.lnk |
26 | rm -f main.lss |
27 | rm -f main.o LCD.o ADC.o BUTTON.o |
28 | rm -f main.lst LCD.lst ADC.lst BUTTON.lst |
29 | rm -f main.s LCD.s ADC.s BUTTON.s |
30 | rm -f main.d LCD.d ADC.d BUTTON.d |
31 | rm -f .dep/* |
32 | Errors: none |
33 | -------- end -------- |
34 | |
35 | |
36 | real 0m0.075s |
37 | user 0m0.004s |
38 | sys 0m0.004s |
39 | simon@simon-TravelMate-5735Z:~/Documents/Laminator/src$ time make program |
40 | |
41 | Compiling: main.c |
42 | avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=4000000 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst -std=gnu99 -Wp,-M,-MP,-MT,main.o,-MF,.dep/main.o.d main.c -o main.o |
43 | |
44 | Compiling: LCD.c |
45 | avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=4000000 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=LCD.lst -std=gnu99 -Wp,-M,-MP,-MT,LCD.o,-MF,.dep/LCD.o.d LCD.c -o LCD.o |
46 | |
47 | [BLABLABLA] |
48 | |
49 | avrdude done. Thank you. |
50 | |
51 | |
52 | real 0m3.187s |
53 | user 0m0.224s |
54 | sys 0m0.040s |
55 | simon@simon-TravelMate-5735Z:~/Documents/Laminator/src$ |
(Bei meinem Editor liegt "make program" auf F9, also normal gebe ich keinen Befehle ein) Und Programmer ist ein selbstgebastelter USBasp, also nicht gerade high-end. Das Programmieren dauert damit auch am längsten, Kompilieren macht von den 3.187s gerade mal 0.345s aus. Also dein Argument mit der Zeit kann ich nicht so ganz nachvollziehen.. Dass du dann immer die Hardware brauchst ist schon klar, aber das war bisher bei mir kein Problem.. Und die Hardware als Simulation nachzuprogrammieren ist doch ein wahnsinns Aufwand?!
:
Bearbeitet durch User
Max S. schrieb: > Fragen: > Ist QT dafür geeigent? > Wird das normalerweise so gemacht? Welches Betriebssystem verwendest du? Wenn du mit Windows arbeitest, ist QT (ich rede von QT für C/C++) viel zu groß und unhandlich (meine Erfahrung). Da ist dir mit C#, Java und Co. deutlich besser geholfen. Wenn du Python kannst, ist PyQt noch ne alternative zum "normalen" QT. C#, Java und Co., und PyQt sind besser geeignet, weil du schneller erste erfolge erzielst. Grüße
Hallo, danke für die Antworten. Ich habe die Hardware nicht immer verfügbar wenn ich Zeit habe. Der Prozessor ist ein LPCXXXX und da dauert es schon eine Weile bis der das rübergeschoben hat. Außerdem kann ich das ja auch noch später verwenden (um Bilder rüberzuschieben) und außerdem wollte ich mal was lernen. Die Frage war also ehr ob es sinnvollere Alternativen gibt. Privat bin ich eigentlich nur unter Windows unterwegs. Ich kann ein bisschen Pascal, C++ ist gut und reines C habe ich sehr gut drauf. Was meinst du mit unhandlich? Bei C wollte ich schon gerne bleiben, das kann ich und damit wird auch der µC programmiert. Der MinGW Kompiler ist ja nicht schlecht.
Das kommt auf deine SW-Architektur an. Beispiel: Tetris ist deine Applikation. Diese benutzt zum Zeichnen aufs Display Funktionen wie drawLine(), drawRectangle() etc. die vom Kernel zur Verfügung gestellt werden. Der Kernel wiederum setzt oder löscht nur Bits in einem internen Framebuffer, wenn eine dieser Funktionen aufgerufen wird. Eine Timer-ISR oder ein schneller, hochpriorisierter Task laufen im Hintergrund und schieben den Framebuffer zyklisch ins Display. Dein Tetris selbst muss so keine Ahnung haben wie das Display genau angesteuert wird, ob da irgendwie gemultiplext wird, oder gar welche I/O-Pins in die Ansteuerung des Displays involviert sind. Dein Tetris benutzt einfach nur hochlevelige Zeichenfunktionen. So, jetzt soll dein Tetris unverändert auf dem PC laufen und anstatt auf ein LED-Display soll in eine Windows-Form gezeichnet werden. Aus "Tetris-Sicht" hat sich nichts geändert. Tetris benutzt immer noch fleissig drawRectangle() etc. Nur werden diese nicht mehr vom Kernel zur Verfügung gestellt sondern von einer von dir zu schreibenden Lib. Im einfachsten Fall ist dies einfach ein Wrapper um irgendwelche Qt-Funktionen. Ich kenn Qt nicht im Detail, aber so könnte das aussehen: void drawRectangle(int x, int y, int width, int height) { myForm.drawRectangle(x, y , width, height) } Bevor dein Tetris ausgeführt wird musst du natürlich noch dein Fenster initialisieren, also myForm anlegen usw. Wenn deine Software eher Wildwuchs ist und deine Tetris-Applikation munter irgendwelche Pins toggelt um das Display anzusteuern, dann seh ich schwarz. Um deine Applikation in eine Simulationsumgebung einzubetten musst du sauber abstrahieren.
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.