質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

7637閲覧

USART通信でXC8コンパイルエラーになります。

Guamstreet

総合スコア31

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2017/11/18 13:42

編集2017/11/19 05:34

(補足させて頂きます)
どうしてもビルドが出来ず、もう一度最初からmainページを作成し、改めて、コードを入力したあと、ビルドした際、エラー構文の所の青いリンクをクリックした所、添付イメージの様な質問窓が表示されました。YES、noを選択するようになっていますが、これは、今回のビルド出来ない原因の一つになっているのでしょうか?
YES、noともクリックしてみたのですが、状況は変わらず、ビルド出来ないままです。
これも踏まえた上で、ご回答、お待ち申し上げております。
どうぞよろしくお願い致します。
イメージ説明

(ここから本題の質問です)
USART通信プログラムについて質問させて下さい。
PIC(PIC16F1938)を使用して、市販されている音声認識モジュール(マイクロテクニカ製 SR-MOD100C URL:http://www.microtechnica-shop.jp/shopdetail/000000000005/)を操作したく、MPLAB_X IDE & XC8コンパイラを使ってプログラム作成しているのですが、ビルドが出来ないで困っています。

下記プログラムは、以前作成した自作プログラム(TX送信にてMP3プレーヤーを再生させるだけのプログラム)を流用して、送受信できるように直しているものです。

なんとか独学にて作成してきましたが、送受信プログラムは初めてで、なかなか上手くできません。

具体的に下記のプログラムをビルドさせるとエラーが発生します。
エラー文は、
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
nbproject/Makefile-default.mk:105: *** missing separator. Stop.
make[1]: Entering directory 'E:/SRS.X'
make: *** [.build-impl] Error 2
make[1]: Leaving directory 'E:/SRS.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
BUILD FAILED (exit value 2, total time: 57ms)
と表示されます。

なぜ、このプログラムでは、ビルドが出来ないのでしょうか?

色々調べてみたのですが、全く分からず、このサイトを最後の頼みの綱として、質問させて頂いた次第です。

具体的に下記のプログラムの何処をどの様に修正すれば、ビルドができるのでしょうか?
すいませんが、ご教示の方、どうぞよろしくお願い致します。

C

1 2//【 ヘッダ設定 】 3#include <stdio.h> 4#include <stdlib.h> 5#include <stdbool.h> 6#include <xc.h> 7#include <htc.h> 8 9// 【 PIC16F1938 Configuration Bit Settings 】 10// コンフィギュレーション1の設定 11#pragma config FOSC = INTOSC // 内部クロックを使用する(INTOSC) 12#pragma config WDTE = OFF // ウオッチドッグタイマー無し(OFF) 13#pragma config PWRTE = ON // 電源ONから64ms後にプログラムを開始する(ON) 14#pragma config MCLRE = OFF // 外部リセット信号は使用せずにデジタル入力(RA5)ピンとする(OFF) 15#pragma config CP = OFF // プログラムメモリーを保護しない(OFF) 16#pragma config CPD = OFF // データメモリーを保護しない(OFF) 17#pragma config BOREN = ON // 電源電圧降下常時監視機能ON(ON) 18#pragma config CLKOUTEN = OFF // CLKOUTピンをRA6ピンで使用する(OFF) 19#pragma config IESO = OFF // 外部・内部クロックの切替えでの起動はなし(OFF) 20#pragma config FCMEN = OFF // 外部クロック監視しない(FCMEN_OFF) 21 22// コンフィギュレーション2の設定 23#pragma config WRT = OFF // Flashメモリーを保護しない(OFF) 24#pragma config PLLEN = OFF // 動作クロックを32MHzでは動作させない(OFF) 25#pragma config STVREN = ON // スタックがオーバフローやアンダーフローしたらリセットをする(ON) 26#pragma config BORV = HI // 電源電圧降下常時監視電圧(2.5V)設定(HI) 27#pragma config LVP = OFF // 低電圧プログラミング機能使用しない(OFF) 28 29// クロック周波数指定(__delay_ms()関数で使用する周波数) 30#define _XTAL_FREQ 8000000 31 32// 入力ポート(RAポート) 33#define S_R_WAKE_UP_SIGNAL_OUT RB0// 音声認識ウエイクアップ信号。 RB0 指定!変更不可! 34 35// #define RA0 // 36// #define RA1 // 37// #define RA2 // 38// #define RA3 // 39// #define RA6 // 40// #define RA4 // 41// #define RA5 // 42// #define RA7 // 43 44// 出力ポート(RBポート) 45// #define LATB7 // 46// #define LATB6 // 47// #define LATB5 // 48// #define LATB4 // 49// #define LATB3 // 50// #define LATB2 // 51// #define LATB1 // 52 53// 出力ポート(RCポート) 54// #define LATC0 // 55// #define LATC1 // 56// #define LATC2 // 57// #define LATC3 // 58// #define LATC4 // 59// #define LATC5 // 60 61#define TX_SENDING LATC6 // 送信。RC6指定!変更不可! 62#define RX_RECEIVER LATC7 // 受信。RC7指定!変更不可! 63 64// 【 シリアル送信時のTRMT確認 】 ====================== 65void TX_ONLY(unsigned char dat){ 66 while(TXSTAbits.TRMT==0){} // 送信BUSYになってないことを確認。 67 TXREG=dat; 68} 69 70// 【 メ イ ン 関 数 】============================= 71void main(void){ 72 73 // PICマイコン設定(PIC16F1938) 74 OSCCON = 0b01110010; // 内部クロックは8MHZとする 75 OPTION_REG= 0b10000000; // デジタルI/Oに内部プルアップ抵抗を使用する 76 ANSELA = 0b00000000; // AN0-AN4は使用しない全てデジタルI/Oとする 77 ANSELB = 0b00000000; // AN8-AN13は使用しない全てデジタルI/Oとする 78 TRISA = 0b11111111; // RA0-7まで入力に割当てる(0:出力 1:入力) 79 TRISB = 0b00000001; // ピン(RB)はRB0のみ入力、他は全て出力に割当てる 80 TRISC = 0b00000000; // ピン(RC)は全て出力に割当てる 81 WPUB = 0b00000001; // RB0は内部プルアップ抵抗を使用しない 82 OPTION_REGbits.nWPUEN=1; // RB0の内部プルアップ無効 83 PORTA = 0b00000000; // RA出力ピンの初期化(全てLOWにする) 84 PORTB = 0b00000000; // RB出力ピンの初期化(全てLOWにする) 85 PORTC = 0b00000000; // RC出力ピンの初期化(全てLOWにする) 86 // USART機能の設定 87 SPBRG = 51;// 9600 通信速度設定 88 TXSTA = 0b00100100;// BRGH=1; 高速サンプル指定 TXEN=1; 送信許可指定 89 RCSTA = 0b10010000;// SPEN=1; シリアルポート有効 CREN=1; 連続受信許可 90 // 割り込み許可設定 91 OPTION_REGbits.INTEDG=1; // RB0 ポートの立ち上がり(L⇒H)エッジを検出する。 92 INTCONbits.INTE=0b1; // RB0 /INT割り込みを許可。 93 INTCONbits.GIE=1; // グローバル割り込みを許可。 94 95 // BUZZER_SIGNAL_THREE_TIMES(RB0) に信号入力されるまで待機。 96 while(1){ 97 SLEEP(); 98 NOP(); 99 } 100} 101 102// ※※※【 割り込みルーチン(実際のメインプログラム) 】※※※※※※※※※※※※※※※※※※※※※※※※※※※ 103static void interrupt isr (void){ 104 105 if(INTCONbits.INTF){ 106 INTCONbits.INTF = 0;// 割り込みフラグをクリアする。 107 } 108 109 // 6Fを受信するまで62を送信し続ける。 110 while(RCREG!=0x6F){ 111 TX_SENDING = 1;// 最初にTXポートより通電出力しておく。 112 TX_ONLY(0x62);// CMD_BREAK送信。 113 } 114 115 // 日本語設定作業 116 TX_SENDING = 1;// 最初にTXポートより通電出力しておく。 117 TX_ONLY(0x6C);// CMD_LANGUAGE送信。 118 // TX_ONLY(0x43);// PAR_日本語(2)を送信。 119 120 // 不特定話者フレーズ認識作業 121 TX_SENDING = 1;// 最初にTXポートより通電出力しておく。 122 TX_ONLY(0x69);// 不特定話者認識 123 TX_ONLY(0x42);// 不特定話者認識 124 return; 125} 126

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/11/18 14:05

コードは```で囲ってください。'''じゃないので注意
Guamstreet

2017/11/18 14:15

すいませんでした。修正させて頂きました。どうぞよろしくお願い致します。
keicha_hrs

2017/11/18 14:38

そうではなく、```の行で挟み込むようにしてください。
Guamstreet

2017/11/18 14:40

すいません、どの様にすればいいのでしょうか?質問初心者なので、よく理解出来ません。なにか一つ、例を挙げて頂ければ、直ぐに修正させて頂きます。どうぞよろしくお願い致します。
keicha_hrs

2017/11/18 14:49 編集

質問入力のフォームにある<code>というボタンを押すと、「```ここに言語を入力」という行、「コード」という行、「```」だけの行の3行が出てくるはずです。「コード」の部分にソースコードを配置し、「```ここに言語を入力」を「```C」に書き換えてください。右側のプレビューを見ながらソースコード用修飾がされるのを確認して投稿完了してください。
Guamstreet

2017/11/18 14:55

仰られている事がやっとわかりました。どうもありがとうございました。修正させて頂きましたので、引き続き、どうぞよろしくお願い申し上げます。
guest

回答1

0

ベストアンサー

MPLAB X IDE v4.05
XC8 v1.44

の環境で試しにプロジェクトを作成し、記されたソースコードを丸写ししてビルドしてみましたが、何の問題もなく通ります。ですからソースコードの問題ではありません。

missing separatorというエラーメッセージは、一般的にはMakefileでインデントにタブ文字ではなく空白文字を用いるミスで発生するメッセージのように思います。インデントはタブ文字でなければなりません。空白文字とタブ文字が混じるのも許容されないはずです。

エラーが出ているのはnbproject/Makefile-default.mkの105行目ですから、このファイルを開いて当該行を調べてみて、行頭に誤って空白文字を入れていないかとか、調べてみてはどうでしょうか。


(2017/11/19 17:37追記)

ちょっと話が噛み合わないようなので。

Makefile-default.mkやMakefile-impl.mkとは、このような場所に存在するファイルのことです。

この中にあるMakefile-default.mkをダブルクリックして開き、105行目付近を見るとこのようになっているはずです。

ここで106行目の行頭に故意に空白文字を1文字挿入し、保存してビルドすると、下図のようなエラーになりました。

ただ、106行目のようなインデントがついている行を操作することで意図的に同類エラーを起こすことはできるのですが、105行目で同じエラーを意図的に発生させる操作についてはわかりませんでした。

投稿2017/11/18 16:11

編集2017/11/19 09:00
keicha_hrs

総合スコア6766

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Guamstreet

2017/11/19 02:33

keicha_hrsさん、早速のご回答、本当に、どうもありがとうございます。 また、私からの返信が遅くなりまして、大変、申し訳ありません。 早速、仰って下さった『行頭の空白文字を入れてないか』について、確認しましたが、一つも入っておりませんでした。 やっぱりビルドエラーになってしまいます。 keicha_hrsさんがテストして下さった環境は、私と全く同じで、なぜ、keicha_hrsさんはビルド出来て、私はビルド出来ないと言うのが、全く理解出来ずにいます。 もし、私の方に行頭の空白スペースがあるとしたら、それを丸写したkeicha_hrsさんの方は、何故にビルドできたのか? ここも不思議でなりません。 試しに私の他のプログラムについて、ビルドを行ってみますと、こちらは正常にビルドできております。 何か他に原因を追及できるようなトリガーを頂けないかと、ワラをも縋る思いでございます。 何か、気が付いたことなどありましたら、なんでも結構なので、引き続き、どうぞよろしくお願い申し上げます。
keicha_hrs

2017/11/19 07:55 編集

ソースファイルは丸写ししましたが、mkファイルは丸写ししていません。プロジェクト新規作成されたときのそのままです。『行頭の空白文字を入れてないか』についても、C言語ソースファイルを調べたのでしょうか?それは全然話が違います。Makefile(mkファイル)が何かというところから話が通じていない・・・?
Guamstreet

2017/11/19 09:30

keicha_hrsさん、ご返信下さってありがとうございます。 また、頂いた内容について、理解出来ず、勘違いして、大変、申し訳ありませんでした。 補足させて頂いた窓でYESを選択し、そのあと、ビルドして、エラーになってから、再度、青いエラーコードをクリックすると、Makefile-default.mkと、Makefile-impl.mkが表示されて、ここがいけないよ、と言う様な警告マークが表示されるので、そこを修正してみたのですが、やっぱりダメでした。 更なる、ご指摘を頂く前にその作業は既にやっておりまして、修正したあと、警告マークは一旦は、消えるのですが、ビルドするとエラーとなり、再び、警告マークが現れる次第です。それを思い出し、そうか、keicha_hrsさんは、この事を仰られていたのだなと、この時点で理解致しました。 申し訳ございません。 それにしても、何が原因なのか?全く分かりません。 せっかく、いろいろと、ご指導して下さっているのに、大変に申し訳ない限りです。 今まで、結構、色々とプログラムを作成してまいりましたが、今回の様な事象は初めてです。
keicha_hrs

2017/11/19 17:57 編集

質問に補足された画像で、Makefile-default.mkを開こうとしているときに出ているメッセージが奇っ怪ですね。これは「UTF-8では認識できない文字が存在するファイルをUTF-8として開こうとしている」という警告のように思います。しかし、自動生成されるMakefile-default.mkにあるのはASCII文字だけですから、何も編集されていない状態であれば「UTF-8では認識できない文字」は存在しないはずです。 そのような現象を起こすには、Makefile-default.mkを外部エディターで開き、マルチバイト文字を加える編集(例えば全角空白を1文字だけ加える)を行い、「UTF-8以外の文字コード」(例えばShift_JIS)で保存する、といったところでしょうか。実際にやってみましたが、この作業後にMPLABでMakefile-default.mkを開こうとすると、同じ警告ダイアログが表示されることは確認しました。 他にも方法はあるかもしれませんが、いずれにせよ何かしら外的要因がなければ起こせない現象だと思います。
keicha_hrs

2017/11/19 17:58 編集

上記も奇妙ではありますがそれはそれとして、「新しくプロジェクトを作成して、C言語ソースファイルだけコピーしてビルドしてみる」ということは行われたのでしょうか?それでも同じ現象が起きるのでしょうか?
Guamstreet

2017/11/20 03:32

keicha_hrsさん、返信下さってありがとうございます。 また、私からの返信が遅くなりまして、申し訳ありません。 最後の、ご返信の内容、早速やって見ることに致します。 また、ご報告申し上げます。 いろいろと、ほんとにありがとうございます。
Guamstreet

2017/11/22 12:04

keicha_hrsさん、ご連絡おそくなりまして大変に申し訳ありません。 あれから、すぐにアドバイス頂いた『新しくプロジェクトを作成して・・・』をやってみました所、今までのがウソの様に、あっさりコンパイル出来てしまいました。 なんで、今まで、全く出来なかったコンパイルが出来たのだろう?と、その原因を私なりに、時間掛けて色々やってみたのですが、あの忌々しいコンパイルエラーを再現させる事は出来ませんでした。 元々、別の自作プログラムを、使用PICが一緒と言う事で、そのまま流用し、一部変更し、そしてコンパイルした所、エラーから抜け出せなくなったと言う経緯があるのですが、それをそのままもう一度やっても、今回は、問題無くコンパイルする事ができました。 全く以て、不思議としか良い様がありません。 しかし、結果的に、意外と思いつかなかった事を、アドバイスくださったおかげで、今回の問題を解決する事ができましたので、keicha_hrsさんには、非常に感謝しております。 改めて、長々と問題解決まで、お付き合い頂き、ほんとうにありがとうございましたm(_ _)m これで、私の問題は解決しましたので、本質問を終了させて頂きます。 この先、多分、このプログラムの製作に置いて問題が発生してくるやもしれないので、その時は、また、ご助力頂けますと、非常に嬉しいです。 重ね重ね、今回は、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問