Цитата(Aesthete Animus @ Jan 20 2008, 22:42)

Может стоит попытаться оптимизировать?
Стоит, хотя бы для того, чтобы научится

Но ест сомнения, что все уместится на самом деле
Цитата(Aesthete Animus @ Jan 20 2008, 22:42)

Мне к примеру не ясно, зачем вот это:
Не поясните, какие структуры и зачем они нужны?
Удобный пережиток, если можно так сказать

Пользовался 7-сегментниками, которые были распинованы по-разному, но вешал их на одну шину. Пришлось писать структуру, в которую просто в нужном порядке передавались ноги. Тогда с помощью функции можно было в любой разряд записать любой символ.
Выглядело это примерно так:
Код
#define SEG_7_UP 0 //Верхний сегмент
#define SEG_7_MID 1 //Серединка
#define SEG_7_BOT 2 //Нижний сегмент
#define SEG_7_UPLEFT 3 //Верхний левый
#define SEG_7_UPRIGHT 4 //Верхний правый
#define SEG_7_BOTLEFT 5 //Нижний левый
#define SEG_7_BOTRIGHT 6 //Нижний правый
#define SEG_7_DOT 7 //Точка (минус)
//#define SEG_7_SYNCBIT
typedef struct
{
unsigned char volatile * p_ucPort; //Адрес порта
unsigned char volatile * p_ucPulsePin; //Куда выдавать импульс синхронизации
// char cPulseBit; //маска
unsigned char volatile Data[8];
} seg7;
Также существовали
void Seg7_Init( seg7 & Segment,
unsigned char volatile * p_ucPort,
char * p_cSegArr, //Массив, где по порядку сложены биты сегментов
);
и
void Seg7_Echo(char cSymbol, bool dot, seg7 & Segment);
Далее можно было использоват
Seg7_Echo ( 'A', 0, &seg[0]);
Болшим код становится из-за доволно громоздкого Seg7_Echo(), в котором внутри просто стоит switch. Иначе не смог придумать вывода на 7-сегментники

а далше просто ползовался тем, что уже было