PIC : USB関連のライブラリでコンパイルエラー

開発環境

  • MPLAB X IDE v5.05
  • コンパイラ XC8 v2.00
  • MPLAB Code Configurator v3.0

Device ResourcesからUSB(MLA USB Device Lite)を追加してビルドすると、コンパイルエラーが発生する。

pic_mcc_usb01

自動追加されるUSB関連のソースコードを見ると、MLA(Microchip Libraries for Applications)のソースコードがそのままコピーされているような感じ。

このままコンパイルを実行すると、以下のようなエラーが発生する。

pic_mcc_usb02

In file included from mcc_generated_files/usb/usb_device.c:53:
In file included from mcc_generated_files/usb/usb.h:52:
mcc_generated_files/usb/usb_device_cdc.h:779:26: warning: duplicate 'const' declaration specifier [-Wduplicate-decl-specifier]
void putrsUSBUSART(const const char *data);
                         ^
mcc_generated_files/usb/usb_device.c:174:40: error: expected ';' after top level declarator
volatile BDT_ENTRY BDT[BDT_NUM_ENTRIES] BDT_BASE_ADDR_TAG;
                                       ^
                                       ;
mcc_generated_files/usb/usb_device.c:179:33: error: expected ';' after top level declarator
volatile CTRL_TRF_SETUP SetupPkt CTRL_TRF_SETUP_ADDR_TAG;
                                ^
                                ;

このあたりは海外掲示板等見ると、最新のコンパイラバージョン(C99)に対応してない?ようなので、プロジェクトのプロパティを開いてコンパイラのオプションでC90を選択することで、回避できる。

pic_mcc_usb03

再度ビルドを実行すると、今度は違うエラーが発生する。

"C:\Program Files (x86)\Microchip\xc8\v2.00\bin\xc8-cc.exe"  -mcpu=16F1455 -Wl,-Map=dist/default/production/pic16f1455_mcc2.X.production.map  -DXPRJ_default=default  -Wl,--defsym=__MPLAB_BUILD=1  -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -Wa,-a -msummary=-psect,-class,+mem,-hex,-file  -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -std=c90 -gdwarf-3 -mstack=compiled:auto:auto      -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/pic16f1455_mcc2.X.production.elf  build/default/production/mcc_generated_files/pin_manager.p1 build/default/production/mcc_generated_files/eusart.p1 build/default/production/mcc_generated_files/mcc.p1 build/default/production/mcc_generated_files/device_config.p1 build/default/production/mcc_generated_files/interrupt_manager.p1 build/default/production/main.p1 build/default/production/mcc_generated_files/usb/usb_descriptors.p1 build/default/production/mcc_generated_files/usb/usb_device_events.p1 build/default/production/mcc_generated_files/usb/usb_device.p1 build/default/production/mcc_generated_files/usb/usb_device_cdc.p1 build/default/production/mcc_generated_files/usb/example_mcc_usb_cdc.p1     
make[2]: *** [dist/default/production/pic16f1455_mcc2.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

上記エラーはプロジェクトを作り直したりすると、出たりでなかったりしていたのだが、どうもコンパイラオプションを変更した後は、再度MCCでGenerateボタンを押して、再作成するとコンパイルエラーが解消される。
(オプション等の内容も生成されている?)

pic_mcc_usb05

make[2]: Leaving directory 'C:/temp/src/MPLabProjects/pic16f1455_mcc2.X'
make[1]: Leaving directory 'C:/temp/src/MPLabProjects/pic16f1455_mcc2.X'

BUILD SUCCESSFUL (total time: 4s)
Loading code from C:/temp/src/MPLabProjects/pic16f1455_mcc2.X/dist/default/production/pic16f1455_mcc2.X.production.hex...
Loading completed