zHz00 Untitled

среда, 04 июля 2018
23:59 Болгарский код и теория де Бройля -- Бома
Изучаю чужой проект. Немножко говнокода...

bool IsDeviceReady(void)
{
if(LOW_LEVEL_REGISTER&BIT_READY)
return true;
else
return false;
}

bool TestIfDeviceIsReady(void)
{
while(!IsDeviceReady())
if(Timeout())
return true;
return false;
}


Как легко заметить, первая функция возвращает истину, если устройство готово и ложь, если нет. Тут всё хорошо. А вот вторааая функция возвращает ЛОЖЬ, если устройство готово и истину, если произошёл тайм-аут ожидания готовности. Мдаа. При этом по смыслу названия функций совпадают. И вторая, кстати, вызывает первую.

***

#define DMAxREG (*(struct dma_reg_struct*)(DMA_BASE_ADDRESS+DMA_SPACING*nNumDMA))
//...
void func(void)
{
int nNumDMA=0;
DMAxREG|=BIT_FLAG;
//...
}


Тут контринтуитивно, что макрос DMAxREG на самом деле параметризованный, но параметр не виден. При взгляде на текст складывается впечатление, что DMAxREG ни от чего не зависит. Но это не так. Кроме того, если попытаться использовать данный макрос в функции, где не об'явлена переменная nNumDMA, программа просто не соберётся! Конечно же, надо было делать так:

#define DMAxREG(X) (*(struct dma_reg_struct*)(DMA_BASE_ADDRESS+DMA_SPACING*(X)))

@темы: Говнокод

URL
Пьяные, пряные, праздничные дети. Сколько нам еще осталос...
Алюминиевый крестик сохранит, защитит, Алюминиевый крес...
Sprcial thanks for Gas 13 Иногда знание дает очень м...
Яркое солнце, живое, весенее, дразняшее, слепяшее глаза. ...
Не имейте дела со скучными людьми, не умеющими наслаждать...
http://yellow.spider.ru/gloom/ban_468.jpg
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail