Hallo zusammen,
ich bin dabei ein Grafik-Display anzusteuern - was auch wunderbar geht.
Jetzt bin ich dabei ein Bitmap aus einem Array auszugeben
Das Array ist wie folgt aufgebaut:
Wenn ich die Funktion aufrufe mit der auskommentierten Zeile
(display_write(Logo[zhl++],DATA)) dann zeigt er mir das Logo auch an...
Nur wenn ich die Funktion aufrufe und als Parameter das Logo angebe,
dann kommt vom CCS-Compiler die Fehlermeldung "Attempt to create a
pointer to a constant".
Der Aufruf erfolgt so:
1
display_bitmap(Logo,0,0,128,25);
Kann mir da jemand auf die Sprünge helfen?
Gruß,
Tobias
Peter schrieb:
> test mal mit:>> void display_bitmap( const int16 *bitmap, ...
Dann gibt es eine ganze Reihe von Fehlermeldungen vom Compiler...
"Expecting a close paren"
neben char* wie erwähnt wirst du ja nicht den Zeiger ausgeben wollen,
sondern das, worauf er zeigt, oder?
Also ein Sternchen dazu (vermute ich): display_write(*bitmap++,DATA)
Klaus Wachtler schrieb:
> neben char* wie erwähnt wirst du ja nicht den Zeiger ausgeben wollen,> sondern das, worauf er zeigt, oder?> Also ein Sternchen dazu (vermute ich): display_write(*bitmap++,DATA)
Das ist korrekt ;-)
Leider kommen dann auch nur wirre Zeichen am LCD an...
wieso klappt es mit "display_write(logo[zhl++])" und nicht mit pointer?
Gruß,
Tobias
Oliver schrieb:
>>const int8 Logo[]> und>>display_bitmap(int16 *bitmap...>> passt nicht zusammen.>> Was sagt er denn zu>
1
display_bitmap(constint8*bitmap...
>> Wenn es mit dem const Probleme gibt, lass es halt weg.>> Oliver
Das const einfach weglassen? Das ist ja auch keine Lösung, dann habe ich
unnötig RAM verschwendet - der sowieso schon sehr klein ist.
>Das ist ja auch keine Lösung, dann habe ich>unnötig RAM verschwendet - der sowieso schon sehr klein ist.
Aha...
Ich kenne den CCS-Compiler und dessen Umgang mit der
AVR-Harvard-Architektur nicht, aber das könnte eine Ursache des Problems
sein (abgesehen vom sowieso falschen Pointer-Typ). Was sagt den die
Compiler-Doku, wie man mit FLASH-Pointern umzugehen hat? Landet jedes
const automatisch im FLASH?
Oliver
Sehe ich das richtig, dass der CCS keine Pointer auf Werte im Flash kann
da er die Zugriffe auf den Flash zur Compilezeit erkennt und
entsprechend umsetzt, womit obige Lösung nicht möglich wäre?
Das gleiche habe ich auch gerade im Manual gelesen...
dort steht aber noch folgendes:
1
PlacingastringintoROM
2
constcharcstring[6]={"hello"}
3
Creatingpointerstoconstants
4
constchar*cptr;
5
cptr=string;
Leider funktioniert das bei mir nicht...
Er sagt für die Zeile "const char *cptr" immer "Expecting ="
Sollte eine Lösung meines Problems wirklich nicht möglich sein?
Tobias John schrieb:
> Sobald ich das "const" vor "int8 *bitmap" schreibe bekomme ich über 40> Fehlermeldungen "Expecting a close paren" vom CCS
Was ist mit
Karl heinz Buchegger schrieb:
> Tobias John schrieb:>> Sobald ich das "const" vor "int8 *bitmap" schreibe bekomme ich über 40>> Fehlermeldungen "Expecting a close paren" vom CCS> Was ist mit>
1
>voiddisplay_bitmap(constunsignedchar*bitmap,
2
>unsignedcharx,unsignedchary,
3
>unsignedchardx,unsignedchardy)
4
>{
5
>...
6
>}
7
>
> um mal die 'Unbekannte' int8 wegzubekommen.
Gibt genau die gleichen Fehler...
Die Funktion "display_write" übernimmt die fraglichen Daten "by value"
wie das Funktionieren der auskommentierten Zeile zeigt.
In der Zeile
display_write(bitmap++,DATA);
wird der Zeiger einfach weitergeschaltet, ohne Arraydaten an die
Funktion zu übergeben. Wie schon erwähnt, sollte die Zeile
display_write(*bitmap++,DATA);
lauten.
Falls das Problem weiterhin besteht, ist es einen Versuch wert, mit
einem
temporären Zeiger zu arbeiten:
void display_bitmap(int16 *bitmap,....)
{ int16 *t;
.
.
t=bitmap;
.
display_write(*t++, DATA);
.
usw
}
mfg
Tobias schrieb:
> Hat niemand eine Idee wie ich ein Bitmap mit dem CCS-Compiler aus dem> ROM auslesen kann? Das muss doch gehen!
Doku lesen.
Du verlässt hier den Pfad dessen, was mit Standard-C Mitteln abgedeckt
wird. Laut C-Standard ist
> void display_bitmap( const unsigned char *bitmap,> unsigned char x, unsigned char y,> unsigned char dx, unsigned char dy)> {> ...> }
richtig.
Allerdings dürfte dein Compiler const irgendwie speziell behandeln. Also
bleibt dir nichts anderes übrig als die Doku zu studieren, was sich die
Compilerbauer dabei gedacht haben.
Oder aber es findet sich zufällig jemand, der diesen Compiler benutzt
und da schon mal durchgegangen ist.
>Hat niemand eine Idee wie ich ein Bitmap mit dem CCS-Compiler aus dem>ROM auslesen kann? Das muss doch gehen!
Das Problem ist ja nicht das bitmap im Rom, sondern dessen Übergabe als
Funktionsparameter.
Was sagt der Comiler denn hierzu:
Oh mann...
Die CCS-Doku ist ja unterirdisch. Jede Menge Text, aber nicht zu
verstehen, und sinnlose Minimal-Beispiele. Das oben gezeigte ist so
eins, Schreibfehler drin (string != cstring), und anscheinend lässt es
sich ja noch nicht mal kompilieren.
Egal, vermutlich geht das mit dem Rom-Zugriff über ein Kombination von
label_adress(...) und read_program_memory(...). Vielleicht aber auch
ganz anders, die Doku ist da mehr als kryptisch.
Oliver