Hallo,
ich hatte vor kurzen schon einmal hier geschrieben.
Display Controller ist der folgende:
UC1698
Glaube aber es ist ein semantisches Problem. Habe jetzt folgende
Funktionen erfolgreich realisiert:
1 | unsigned char shadow_RAM[3840];
|
2 |
|
3 |
|
4 | void put_pixel(unsigned char zeile, unsigned char spalte) // 1,0
|
5 | {
|
6 | unsigned char zahl = fmod(spalte,8);
|
7 | unsigned int hilf = spalte/8;
|
8 |
|
9 | shadow_RAM[hilf + zeile * 240/8] |= bitMask[zahl];
|
10 |
|
11 | }
|
12 |
|
13 |
|
14 | void delete_pixel(unsigned char zeile, unsigned char spalte) // 1,0
|
15 | {
|
16 | unsigned char zahl = fmod(spalte,8);
|
17 | unsigned int hilf = spalte/8;
|
18 |
|
19 | shadow_RAM[hilf + zeile * 240/8] &= ~(bitMask[zahl]);
|
20 |
|
21 |
|
22 | }
|
23 |
|
24 | void clear_window(unsigned start_zeile, unsigned start_spalte, unsigned end_zeile, unsigned end_spalte)
|
25 | {
|
26 | unsigned int i,k;
|
27 | for(k = start_zeile; k < end_zeile; k++)
|
28 | {
|
29 | for(i = start_spalte; i < end_spalte; i++)
|
30 | {
|
31 | delete_pixel(k,i);
|
32 | }
|
33 | }
|
34 | }
|
Funktioniert wunderbar. Ich würde jetzt gerne eine Funktion schreiben,
die den derzeitigen Pixel überprüft und diesen dann negiert:
1 | void negiere_pixel(unsigned char zeile, unsigned char spalte) // 1,0
|
2 | {
|
3 | unsigned char zahl = fmod(spalte,8);
|
4 | unsigned int hilf = spalte/8;
|
5 |
|
6 | if(shadow_RAM[hilf + zeile * 240/8] & (1 << zahl))
|
7 | delete_pixel(zeile, spalte);
|
8 | else
|
9 | put_pixel(zeile, spalte);
|
10 |
|
11 | }
|
12 |
|
13 | void negiere_window(unsigned start_zeile, unsigned start_spalte, unsigned end_zeile, unsigned end_spalte)
|
14 | {
|
15 | unsigned int i,k;
|
16 | for(k = start_zeile; k < end_zeile; k++)
|
17 | {
|
18 | for(i = start_spalte; i < end_spalte; i++)
|
19 | {
|
20 | negiere_pixel(k,i);
|
21 | }
|
22 | }
|
23 | }
|
In der negiere_pixel Funktion frage ich das jeweilige Bit ab. Wenn es
gesetzt ist wird es gelöscht, ansonsten gehe ich davon aus, dass es
nicht gesetzt ist und setze es.
Was ich jetzt beobachte, wenn ich ein ganzes Fenster negiere, dass immer
nur die ersten 4 Bits negiert werden und die darauffolgenden nicht.
Sieht jemand wo sich der Fehlerteufel eingeschlichen hat?
Danke