Знову LPC17xx та Peripheral Driver Library

Продовжую набігами знайомитися з мікроконтролерами LPC17xx.
При цьому продовжую лізти на кактус: «щоби швидше», підключаю файли зі стандартної периферійної бібліотеки від NXP. І в черговий раз отримую помилку компіляції. На цей раз — з глибин <sys/reent.h>, який включається до <stdio.h>, якого, своєю чергою, потягнув debug_frmwrk.c з LPC1700 Peripheral Driver Library:

--- compiling ./src/NXP/LPC17xx/Drivers/source/debug_frmwrk.c...
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 в своїх програмах…

2 Responses to “Знову LPC17xx та Peripheral Driver Library”

  1. dor says:

    > the same, як сказали б англомовні
    це таки вони в нас:
    http://lvivil.livejournal.com/117087.html

    :О)

Leave a Reply

[flagcounter image]