前提・実現したいこと
リンク内容
こちらのサイトを参考にprintf関数を使おうとしたらビルドの段階で以下のエラーが出ます。
error: (1098) conflicting declarations for variable "_putch"
関数の名前を変更すると(putch→putcなど)変更した名前に合わせて「” ”」内が変わりエラーになります。
インターネットで検索しても英語の質問サイトがほとんどで、プログラミング初心者の私では理解することができませんでした。
マクロについてあまりしっかりと理解できていません。
初心者にもわかりやすく教えていただけると助かります。
発生している問題・エラーメッセージ
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf make[1]: Entering directory 'C:/Users/*****/MPLABXProjects/887function_UART.X' make -f nbproject/Makefile-default.mk dist/default/production/887function_UART.X.production.hex make[2]: Entering directory 'C:/Users/*****/MPLABXProjects/887function_UART.X' "C:\Program Files (x86)\Microchip\xc8\v2.05\bin\xc8-cc.exe" -mcpu=16F887 -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -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=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/test.p1 test.c "C:\Program Files (x86)\Microchip\xc8\v2.05\bin\xc8-cc.exe" -mcpu=16F887 -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -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=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/source.p1 source.c ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries "C:\Program Files (x86)\Microchip\xc8\v2.05\bin\xc8-cc.exe" -mcpu=16F887 -Wl,-Map=dist/default/production/887function_UART.X.production.map -DXPRJ_default=default -Wl,--defsym=__MPLAB_BUILD=1 -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -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=c99 -gdwarf-3 -mstack=compiled:auto:auto -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/887function_UART.X.production.elf build/default/production/test.p1 build/default/production/source.p1 ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries C:\Program Files (x86)\Microchip\xc8\v2.05\pic\sources\c90\common\doprnt.c:553:4: warning: implicit declaration of function 'putch' is invalid in C99 [-Wimplicit-function-declaration] pputc(c); ^ C:\Program Files (x86)\Microchip\xc8\v2.05\pic\sources\c90\common\doprnt.c:471:19: note: expanded from macro 'pputc' #define pputc(c) (putch(c) INCR_CNT) ^ 1 warning generated. C:\Program Files (x86)\Microchip\xc8\v2.05\pic\sources\c90\common\doprnt.c:553:: error: (1098) conflicting declarations for variable "_putch" (source.c:155) (908) exit status = 1 make[2]: *** [dist/default/production/887function_UART.X.production.hex] Error 1 make[1]: *** [.build-conf] Error 2 nbproject/Makefile-default.mk:153: recipe for target 'dist/default/production/887function_UART.X.production.hex' failed make[2]: Leaving directory 'C:/Users/*****/MPLABXProjects/887function_UART.X' nbproject/Makefile-default.mk:90: recipe for target '.build-conf' failed make[1]: Leaving directory 'C:/Users/*****/MPLABXProjects/887function_UART.X' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed make: *** [.build-impl] Error 2 BUILD FAILED (exit value 2, total time: 4s)
該当のソースコード
C
1#include <xc.h> 2#include <htc.h> 3#include <stdio.h> 4#include <stdlib.h> 5#define RSset RE0 6 7void send4(char data) 8{ 9LCDdata = (LCDdata & 0xf0) | (data & 0x0f); 10 11__delay_ms( 10 ); 12 13Eset = 1; 14__delay_ms( 10 ); 15Eset = 0; 16__delay_ms(10); 17 18//データクリア 19LCDdata = (LCDdata & 0xf0); // 下位4bitをクリア 20} 21 22void sendD(char d){ 23 RSset = 1; //データを送る 24 __delay_ms(10); 25 send4((d & 0xf0) >> 4); //上位4ビットを送る 26 __delay_ms(10); 27 send4((d & 0x0f)); //下位4ビットを送る 28} 29 30//***************************************************************************** 31// Function : lcd_putc 32// Description : LCDに1文字出力 33//***************************************************************************** 34void lcd_putc( char c ){ 35RSset = 1; 36__delay_us( 5 ); // 40nSec以上 37 38sendD(c); 39} 40 41 42////////////printf関数の出力先のスタブ関数を定義する//////////// 43void putch(unsigned char ch){ 44lcd_putc(ch); 45} 46
試したこと
「__delay_ms」の時間はわざと長めにとってあります。
「send~」の関数は全て動作を確認済みです。
自作関数でLCDに1文字ずつ文字を表示することはできています。
今回はprintf関数を使いたいのと、以前別の関数でも同じエラーが出たことがあったので質問に来ました。
補足情報(FW/ツールのバージョンなど)
MPLAB X IDE v5.20
CX8(v2.05)
PICkit3
PIC16F887
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。