Знову LPC17xx та Peripheral Driver Library
Продовжую набігами знайомитися з мікроконтролерами LPC17xx.
При цьому продовжую лізти на кактус: «щоби швидше», підключаю файли зі стандартної периферійної бібліотеки від NXP. І в черговий раз отримую помилку компіляції. На цей раз — з глибин <sys/reent.h>
, який включається до <stdio.h>
, якого, своєю чергою, потягнув debug_frmwrk.c
з LPC1700 Peripheral Driver Library:
In file included from /opt/klen/arm-kgp-eabi/201109/bin/../lib/gcc/arm-kgp-eabi/
4.7.0/../../../../arm-kgp-eabi/include/stdio.h:45:0,
from ./src/NXP/LPC17xx/Drivers/source/debug_frmwrk.c:41:
/opt/klen/arm-kgp-eabi/201109/bin/../lib/gcc/arm-kgp-eabi/4.7.0/../../../
../arm-kgp-eabi/include/sys/reent.h:469:10: error: #if без виразу
Причому що в збірці arm-kgp-eabi від Klen, що в CodeSourcery — те саме (the same, як сказали б англомовні). Тільки номери рядків відрізняються та CodeSourcery, на відміну від Klen-ового пакету, зібрано без підтримки локалізацій і він каже #if with no expression
а не #if без виразу
.
Лізу дивитися sys/reent.h
468 469 470 471 472 473 474 | /* Only built the assert() calls if we are built with debugging. */ #if DEBUG #include <assert.h> #define __reent_assert(x) assert(x) #else #define __reent_assert(x) ((void)0) #endif |
Рядок як рядок. Звичайний такий рядок для C-шного препроцесора…
Єдиний спосіб примусити компілятор видати оте «#if без виразу» — це визначити десь слово DEBUG
як порожній рядок.
Причому це має бути десь в моєму проекті. В моєму… grep -r DEBUG *
…
Знайшлося. Все там же — у периферійній бібліотеці від NXP. У файлах lpc17xx_libcfg_default.h
та lpc17xx_libcfg_default.с
. Якраз в такому вигляді:
44 45 46 47 48 | /************************** DEBUG MODE DEFINITIONS *********************************/ /* Un-comment the line below to compile the library in DEBUG mode, this will expanse the "CHECK_PARAM" macro in the FW library code */ #define DEBUG |
Зробив в цих двох файлах від NXP заміну на LPC_DEBUG і справа пішла.
p.s. Автори бібліотеки NXP в даному випадку не дуже і винні — в стандартах C та C++ згадується лише макрос NDEBUG (використовуєтсья в assert.h
). Тому наче і нема обмежень на використання ідентифікатора DEBUG в своїх програмах…
> the same, як сказали б англомовні
це таки вони в нас:
http://lvivil.livejournal.com/117087.html
:О)
«Мдя…»™
За пасаж про Дніпро та Ганг можна надавати звання табачника другого ступеня.