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

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

ただいまの
回答率

90.34%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,858

Guamstreet

score 28

(補足させて頂きます)
どうしてもビルドが出来ず、もう一度最初から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)
と表示されます。

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

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

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

//【 ヘッダ設定 】
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <xc.h>
#include <htc.h>

// 【 PIC16F1938 Configuration Bit Settings 】
// コンフィギュレーション1の設定
#pragma config FOSC = INTOSC    // 内部クロックを使用する(INTOSC)
#pragma config WDTE = OFF       // ウオッチドッグタイマー無し(OFF)
#pragma config PWRTE = ON       // 電源ONから64ms後にプログラムを開始する(ON)
#pragma config MCLRE = OFF      // 外部リセット信号は使用せずにデジタル入力(RA5)ピンとする(OFF)
#pragma config CP = OFF         // プログラムメモリーを保護しない(OFF)
#pragma config CPD = OFF        // データメモリーを保護しない(OFF)
#pragma config BOREN = ON       // 電源電圧降下常時監視機能ON(ON)
#pragma config CLKOUTEN = OFF   // CLKOUTピンをRA6ピンで使用する(OFF)
#pragma config IESO = OFF       // 外部・内部クロックの切替えでの起動はなし(OFF)
#pragma config FCMEN = OFF      // 外部クロック監視しない(FCMEN_OFF)

// コンフィギュレーション2の設定
#pragma config WRT = OFF        // Flashメモリーを保護しない(OFF)
#pragma config PLLEN = OFF      // 動作クロックを32MHzでは動作させない(OFF)
#pragma config STVREN = ON      // スタックがオーバフローやアンダーフローしたらリセットをする(ON)
#pragma config BORV = HI        // 電源電圧降下常時監視電圧(2.5V)設定(HI)
#pragma config LVP = OFF        // 低電圧プログラミング機能使用しない(OFF)

// クロック周波数指定(__delay_ms()関数で使用する周波数)
#define _XTAL_FREQ 8000000

// 入力ポート(RAポート)
#define S_R_WAKE_UP_SIGNAL_OUT RB0// 音声認識ウエイクアップ信号。 RB0 指定!変更不可!

// #define RA0 // 
// #define RA1 // 
// #define RA2 // 
// #define RA3 // 
// #define RA6 // 
// #define RA4 // 
// #define RA5 // 
// #define RA7 // 

// 出力ポート(RBポート)
// #define LATB7 // 
// #define LATB6 // 
// #define LATB5 // 
// #define LATB4 // 
// #define LATB3 // 
// #define LATB2 // 
// #define LATB1 // 

// 出力ポート(RCポート)
// #define LATC0 // 
// #define LATC1 // 
// #define LATC2 // 
// #define LATC3 // 
// #define LATC4 // 
// #define LATC5 // 

#define TX_SENDING LATC6   // 送信。RC6指定!変更不可!
#define RX_RECEIVER LATC7  // 受信。RC7指定!変更不可!

// 【 シリアル送信時のTRMT確認 】 ======================
void TX_ONLY(unsigned char dat){
    while(TXSTAbits.TRMT==0){} // 送信BUSYになってないことを確認。
    TXREG=dat;
}

// 【 メ イ ン 関 数 】=============================
void main(void){

    // PICマイコン設定(PIC16F1938)
    OSCCON     = 0b01110010; // 内部クロックは8MHZとする
    OPTION_REG=  0b10000000; // デジタルI/Oに内部プルアップ抵抗を使用する
    ANSELA     = 0b00000000; // AN0-AN4は使用しない全てデジタルI/Oとする
    ANSELB     = 0b00000000; // AN8-AN13は使用しない全てデジタルI/Oとする
    TRISA      = 0b11111111; // RA0-7まで入力に割当てる(0:出力 1:入力)
    TRISB      = 0b00000001; // ピン(RB)はRB0のみ入力、他は全て出力に割当てる
    TRISC      = 0b00000000; // ピン(RC)は全て出力に割当てる
    WPUB       = 0b00000001; // RB0は内部プルアップ抵抗を使用しない
    OPTION_REGbits.nWPUEN=1; // RB0の内部プルアップ無効
    PORTA      = 0b00000000; // RA出力ピンの初期化(全てLOWにする)
    PORTB      = 0b00000000; // RB出力ピンの初期化(全てLOWにする)
    PORTC      = 0b00000000; // RC出力ピンの初期化(全てLOWにする)
    // USART機能の設定
    SPBRG      = 51;// 9600 通信速度設定
    TXSTA      = 0b00100100;// BRGH=1; 高速サンプル指定 TXEN=1; 送信許可指定
    RCSTA      = 0b10010000;// SPEN=1; シリアルポート有効 CREN=1; 連続受信許可 
    // 割り込み許可設定
    OPTION_REGbits.INTEDG=1;    // RB0 ポートの立ち上がり(L⇒H)エッジを検出する。
    INTCONbits.INTE=0b1;          // RB0 /INT割り込みを許可。
    INTCONbits.GIE=1;           // グローバル割り込みを許可。

    // BUZZER_SIGNAL_THREE_TIMES(RB0) に信号入力されるまで待機。 
    while(1){
        SLEEP();
        NOP();
    }
}    

// ※※※【 割り込みルーチン(実際のメインプログラム) 】※※※※※※※※※※※※※※※※※※※※※※※※※※※
static void interrupt isr (void){

    if(INTCONbits.INTF){
        INTCONbits.INTF = 0;// 割り込みフラグをクリアする。
    }

    // 6Fを受信するまで62を送信し続ける。
    while(RCREG!=0x6F){
        TX_SENDING = 1;// 最初にTXポートより通電出力しておく。
        TX_ONLY(0x62);// CMD_BREAK送信。
    }

    // 日本語設定作業
    TX_SENDING = 1;// 最初にTXポートより通電出力しておく。
    TX_ONLY(0x6C);// CMD_LANGUAGE送信。
    // TX_ONLY(0x43);// PAR_日本語(2)を送信。

    // 不特定話者フレーズ認識作業
    TX_SENDING = 1;// 最初にTXポートより通電出力しておく。
    TX_ONLY(0x69);// 不特定話者認識
    TX_ONLY(0x42);// 不特定話者認識
    return;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Guamstreet

    2017/11/18 23:40

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

    キャンセル

  • keicha_hrs

    2017/11/18 23:49 編集

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

    キャンセル

  • Guamstreet

    2017/11/18 23:55

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

    キャンセル

回答 1

checkベストアンサー

+1

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/19 23:39 編集

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

    キャンセル

  • 2017/11/20 12:32

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

    キャンセル

  • 2017/11/22 21:04

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

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る