Ich wollte die nobobeelib mal mit -Werror kompilieren, in der aktuellen Version (SVN Rev. 59) bin ich dabei über folgendes gestoßen:
void bgx1_drawBitmap(uint8_t width, uint8_t height, const uint8_t bitmap[]) {
const uint8_t * data = bitmap;
uint8_t row_size = ((width-1)/8+1);
uint8_t rows_per_tile = BITMAP_MAX/row_size;
uint8_t x = bgx1_y;
uint8_t y = bgx1_x;
while (height) {
bgx1_move(x, y); <<<<<<<< In dieser Variante wird bgx1_move aufgerufen
uint8_t h = (height>rows_per_tile)?rows_per_tile:height;
bgx1_drawTile(width, h, data);
while (h--) {
data += row_size;
height--;
y++;
}
}
}
void bgx1_drawBitmap_P(uint8_t width, uint8_t height, PGM_P bitmap) {
PGM_P data = bitmap;
uint8_t row_size = ((width-1)/8+1);
uint8_t rows_per_tile = BITMAP_MAX/row_size;
uint8_t x = bgx1_y; <<<<<< Warnung, unbenutzte Variable x
uint8_t y = bgx1_x;
while (height) {
<<<<<<<< Hier nicht
uint8_t h = (height>rows_per_tile)?rows_per_tile:height;
bgx1_drawTile_P(width, h, data);
while (h--) {
data += row_size;
height--;
y++;
}
}
}
Eigentlich sollten wohl beide Varianten bis auf die Herkunft der Bitmap das gleiche machen, aber nur die nicht-_P Variante macht vorm dem Zeichnen ein bgx1_move, die _P-Variante aber nicht, weswegen es die Warnung nach der unbenutzten Variable gibt. Ich tendiere dazu in die _P Variante das bgx1_move einzubauen, binmir aber nicht 100%ig sicher, ob das dem Sinn der Bib entspricht. In der Doku steht, dass die Funktion an der aktuellen Positionen zeichnen soll. Wenn ich den Code richtig verstehe, nimmt die nicht _P variante die aktuelle Position nach einer Zeichenoperation (move gehört da nicht dazu), wäährend die _P Variante immer dann richtig ist, wenn vorher die Startposition mit move explizit gesetzt wurde?
Wenn das so sit würde ich bgx1_x/y in der bgx1_move ebenfalls setzen und in beiden drawBitmaps Variante das bgx1_move durchführen.