ну, или скорее это удар в поддых...
Ситуация такая. Пишу крупный прокт на CodeWizardAVR V1.25.3 Standard для mega2561.
Почти ООП. Почти самопальная ОСь. Сообщения, очереди, синхронизация... Проект разрастается быстро. Сегодня пришел к пониманию того, что сообщения нужно сделать не ввиде простох чисел
Код
typedef BYTE MSG;
, а как в виде структур
Код
typedef struct
{
BYTE code;
WORD param;
} MSG;
Предвижу Ваши соображения по поводу неизвестных BYTE и WORD. Где-то в хэдерных файлах у меня есть определение
Код
typedef unsigned char BYTE;
typedef unsigned int WORD;
так что все здесь срастается и работает.
Переделываю исходники на новый лад и ... получаю удар граблями со стороны CodeVision.
Угадайте с трех раз, откуда?
Подсказка
Цитата
Error: ... function must return a pointer to structure
раньше было красиво
msg = GetMessage();
Сейчас это уже не канает. Даже передать указатель на структуру, как это просит уважаемый CV, нельзя. Ну, не в том смысле что компилятор не пропустит, а в том, что на _какую_именно_структуру? -- Т.е. на ту, которая определяется в функции, -- нельзя. Ибо структура прекратит свое существоание в момент выхода из функции. Указатель невалиден. Значит остается, единственное решение -- наоборот, передавать указатель в функцию. Как-то это все не по-людски...

Я уже было усомнился в своих знаниях языка (1) по передаче структур из функций, а потом в самих компиляторах для микроконтроллеров. Но нет! Ни старый добрый Borland Turbo-C 2.0, ни IAR таких ограничений не налагают.
Знаит, это есть причуда CV. Читаем в хэлпах КоудВижина
Цитата
The old Kernighan & Ritchie style of writing function definitions is not supported.
и еще тут
Цитата
Because some AVR devices have a small amount of SRAM, in order to keep the size of the Data Stack small, it is recommended not to pass structures as function parameters and use pointers for this purpose.
Правда, про возврат структур тут прямо ничего не сказано. Но видимо, подрадумевается, что программер понимает, что если передавать структуру в функцию -- это вилы, то уж возврат из функции явно крах всей системы!
Народ, не наступайте на мои грабли

Больна-а...