Stimmt eigentlich!

es müsste zumindest heißen:

volatile unsigned char *data[];

Und ich glaube, den Typecast auf char* kann man sich sparen.

Bitte jetzt nicht mit malloc() etc. anfangen, dann krieg ich die Krise