Всем доброго времени суток!
Не стал создавать новую тему потому как мож у меня моск под утро двинулся.
IAR C/C++ Compiler for ARM 5.40.1.51558 (5.40.1.51558). Код:
Код
...
INT i, sw_size, cnt, i_head, free;
...
/* Get SW FIFO fields */
ptr = p_eps->data;
sw_size = p_eps->sw_size;
i_head = p_eps->i_head;
free = sw_size - p_eps->len; /* Calculate size for new data payload */
...
while(free--) /* Read new data */
{
ptr[i_head++] = AT91C_BASE_UDP->UDP_FDR[ep];
if(i_head >= sw_size)
i_head = 0;
}
переменная free не может быть меньше нуля, так как sw_size не может быть меньше len.
Поясню - sw_size - это размер FIFO буфера, len- количество полезных данных в пакете.
При очередном зависоне торможу программу и вижу, что sw_size равно len, при этом free в минусе
Если вместо while(free--) ставлю for(i = 0; i < free; i++) все работает прекрасно.
Вот такая ботва. Тока не пойму, у меня в голове или баг компилятора.