Dein Problem hat nichts mit dem PROGMEM zu tun (würde im RAM genauso wenig funktionieren). Bei einem "extern type array[];" ist die Größe des Arrays nun mal unbestimmt, und daher funktioniert auch sizeof() nicht.
Du hast im Grunde drei Möglichkeiten:
1) Die konkrete Größe mit angeben:
extern type array[123];
2) Eine zusätzliche Variable für die Größe verwenden:
type array[] = {...};
const uint8_t array_size = sizeof(array);
...
extern type array[];
extern const uint8_t array_size;
3) Das Array mit einer eindeutigen Endkennung versehen (wie die Null-Terminierung bei Strings). Dann brauchst du die Größe in der Schleife nicht.
Ich persönlich favorisiere immer Variante 3, außer "type" ist wirklich richtig groß.
Lesezeichen