Die zwei verschiedenen Structs kann man ja beibehalten. Allerdings weiß man ja bereits von vornherein, ob man ein Icon vom Typ icon_t oder iconElement_t verwenden möchte. Und da macht es bezüglich der Übersichtlichkeit des Codes keinen Sinn, den Typ mit einem Makro zu definieren. In der entsprechenden .h Icondatei ist es nicht ersichtlich, welchen Typ das Icon denn hat.
Das du sparsam mit den Ressourcen umgehen möchtest, dagegen ist ja nicht einzuwenden. Allerdings hat dir hier der Compiler beim Testdialog einen Strich durch die Rechnung gemacht.
Bei einem dieser Bilder vom Typ iconElement_t währe die theoretische Größe der Struct 54 Bytes. Da die Structs allerdings immer auf einer Adresse eines vielfachen von 32Bit abgelegt werden, ist die tatsächliche Größe aufgrund von Füllbytes 56Bytes. Ein icon_t währe hier auch nicht größer.
Da zudem der Aufruf für ein iconElement_t
drawIconExt (ix, LCD_SIZE_Y-1 - h,
iconList [i]->data,
iconList [i]->width, iconList [i]->height, ICON_GRAY,
LCD_COLOR_B, DRAW_NORCU);
aufgrund von mehr übergebenen Parametern länger ist als der entsprechende icon_t Aufruf
drawIcon (ix, LCD_SIZE_Y-1 - h, iconList [i], LCD_COLOR_B, DRAW_NORCU);
wird der Code im Endeffekt um 12 Bytes größer.
Wohlgemerkt, in diesem speziellen Fall. Wären die Bilder nur 1bpp bei gleichen Abmessungen, sähe die Sache wieder anders aus.