Такая же фигня в исходниках, которые шли с AVR-студией. Долго не мог понять почему программа так хаотично падает. Оказалось, что функции чтения по барабану размер буфера, передаваемый мной. Просто копирует все данные, что есть в буфер.
Интересно, какие это компиляторы так делают. Я бы не хотел, чтобы вызов был невиртуальным, т.к. весь смысл виртуальных функций пропадает. И если тип переменной struct AAAAA*, то это не значит, что надо вызывать AAAAA::process(). Переменная может указывать на struct BBBBB*.
Как-то погрустнело от кода с исключениями. И это код, не делающий ничего полезного. Если бы я писал под МК на С++, то мой проект, переделанный на С с исключениями, занял бы 2 MБайта и влезал бы наверное в притирку.
P.S. Напишите исходный размер, а то непонятно во сколько раз увеличение происходит.
>ТЗ — не воспринимается как документ, которому желательно следовать.
Не всё так однозначно. Мне приходилось делать такой жуткий интерфейс. С нелепыми действиями, с лишними кликами. Даже ведущий был согласен со мной, что реализовывать интерфейс по такому ТЗ не следует. Но ТЗ такое ТЗ. Всё было задокументировано и принято. Спасали некоторые пробелы, которые не были оговорены в ТЗ и которые я сделал по-своему.
data_len = (uint16)head[4];
data_len = (data_len << 8) + (uint16)head[5];
А так читает:
wiz_read_buf(s, buf, data_len+(data_len & 0x01));
P.S. Столько пафоса было при регистрации, а сами какие-то детские ошибки делают. Неужели нельзя было сделать парсер чуточку умнее?
data_len = (uint16)head[6];
data_len = (data_len
uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port)
{
uint8 head[8];
uint16 data_len=0;
if ( len > 0 )
{
switch (IINCHIP_READ(Sn_MR(s)) & 0x07)
{
case Sn_MR_UDP:
wiz_read_buf(s, head, 0x08);
// read peer's IP address, port number.
addr[0] = head[0];
addr[1] = head[1];
addr[2] = head[2];
addr[3] = head[3];
*port = head[4];
*port = (*port
P.S. Напишите исходный размер, а то непонятно во сколько раз увеличение происходит.
Может лучше будет так: «Мы, российские пользователи сети Интернет,...»?
Не всё так однозначно. Мне приходилось делать такой жуткий интерфейс. С нелепыми действиями, с лишними кликами. Даже ведущий был согласен со мной, что реализовывать интерфейс по такому ТЗ не следует. Но ТЗ такое ТЗ. Всё было задокументировано и принято. Спасали некоторые пробелы, которые не были оговорены в ТЗ и которые я сделал по-своему.
www.youtube.com/watch?v=sDA1HUmuuJo