PROGMEM especifica que la variable pertenece a la flash.
Podes definir asi:Código: C
const unsigned char sprite[] = { // 43210 0x0F, // A 01111 0x10, // B 10000 0x10, // C 10000 0x10, // D 10000 0x0F // E 01111 }; //.... despues te recorres el sprite... int i, msk; for(i=0; i<5; i++) { for(msk=1; msk<32; msk<<=1) { int bit = sprite[i] & msk? 1: 0; } }
const unsigned char sprite[] = {
// 43210
0x0F, // A 01111
0x10, // B 10000
0x10, // C 10000
0x10, // D 10000
0x0F // E 01111
}
int i, msk;
for(msk=1; msk<32; msk<<=1) {
for(i=0; i<5; i++)
int bit = sprite & msk? 1: 0;
}
}Hola, disculpa, deberia haber comentado las lineas de código.
El valor 32 es una máscara.
Si tengo por ejemplo una variable llamada dato, al realizar la operación
dato & 0x01
obtengo como resultado 0x01 si el bit menos significativo es 1, o cero en otro caso.
Para evaluar el segundo bit menos significativo, realizo la operacion
dato & 0x02
dato & 0x04 … para el tercer bit,
dato & 0x08 … el cuarto bit, y asi sigue...
Siempre obtento el valor de la máscara si el bit evaluado es 1, o cero en otro caso.
Los valores que va tomando la máscara en binario son:
0x01 → 0000 0001 → 1
0x02 → 0000 0010 → 2
0x04 → 0000 0100 → 4
0x08 → 0000 1000 → 8
0x10 → 0001 0000 → 16
0x20 → 0010 0000 → 32
Lo que se observa que el el uno se va desplazando a la izquierda.
Si evaluamos desde el bit 0 hasta el bit 4, la máscara tomara los valores 1, 2, 4, 8 y 16, de modo que iremos desplazando hacia la izquierda mientras la máscara sea menor que 32 (de ahí sale):
El FOR 'for(msk=1; msk<32; msk<<=1)' se podria leer así:
Para msk=1, mientras msk<32, desplazar msk a la izquierda.
En cuanto al último parametro del FOR, donde se suele incrementar la variable de control con el operador ++, en C se puede realzar cualquier operación e incluso se permite no hacer nada, cerrando el paréntesis inmediatamente después del punto y coma.
Un WHILE(expresion) es equivalente a FOR(;expresion;), lo que puedes hacer con un WHILE podras hacer con un FOR, y viceversa.