今日はPIC18F45K20のLesson1のプログラムのヘッダーについて確認してみた。
(01 Hello LED.cのLED点灯 XC8 Cプログラムのコンパイルが通るヘッダーがどれかをシラミつぶしにやってみた。)
《エラー画像の一部を載せました。》
エラーは:0: error: undefined symbols: シンボルの_TRISDが定義されないエラーのようだ。
全て一個ずつのヘッダーを有効にしてコンパイルしてゆくやり方です。やってみた結果は 下記の通りでした。
/** I N C L U D E S **************************************************/
//#include "p18f45k20.h"//NG このLesson1でのオリジナルのヘッダーはNG
//#include <p18f45k20.h>//ok
//#include <xc.h>//ok
//#include "xc.h"//ok
//#include <pic18f45k20.h>//ok
//#include "pic18f45k20.h"//ok
//#include <pic.h>//NG
//#include <pic18.h>//ok
//#include "pic18.h"//ok
//#include <htc.h>//ok
//#include "htc.h"//ok
// 上記のokはコンパイルエラーなし Warning※1があるが問題なし
《コンパイルが通った時のOutput表示》
(※1:画像は省略したのでありませんが出ているWarningはコンフィグの不足でのWarningなので後から先のConfig Bits Sourceの吐き出しをコピペし全部準そろえればWarningはなくなるので、問題はありません。フリーモードでのエラーはバージョンアップしないとなくなりません。)ちなみ最新のMPLAB X IDEとXC8コンパイラ処理系でのコピペしたconfigのなかでのインクルードは#include <xc.h>でした。なお、1個一行ずつのコンフィグ表記なのでやたらと長いのでマルチに書かないとプログラムが長くなりそうだ。)
インクルードの表記での””と<>の違いがあまり無いかもしれない。通常のC言語の場合と、このMPLAB X IDE XC8コンパイルを比較するとXC8が区別がないように見える。IDE設定上の処理なのかはわからない。<>は標準で処理系が準備したプリプロセッサでのファイル読み込みで、””はユーザー作成のプリプロセッサのファイル読み込みの違いがあるが、XC8のIDE上結果は上記のとおりなんでもOK的な感がある。ですが、上記の結果よりインクルードは#include <xc.h>にしておくのが無難ではないか思います。
xc.hのヘッダーを開いてみると処理系がXC8の場合は#include<htc.h>を読み込み追加している。なので上記の#include<htc.h>単独でもOKなのだ。なおこのhtc.hでは使用するコンパイラ毎のインクルードファイルの定義を行っている。表記をみるとコンパイラの種類はHI-TECH PICC/PICC-Lite compiler,HI-TECH PICC-18 Compiler,MPLAB C18 CompatibilityHeader,HI-TECH dsPICC compiler,HI-TECH C for PIC32 などが表記されている。
内容が先になってしまったが、ヘッダーファイルを見るためのMPLAB X IDEの便利な機能を使って簡単にヘッダーファイルをナビゲートし閲覧できるのです。やり方は以下の通りです。
ナビゲートしたいコードを選択し右クリックのNavigateを選び出てきたメニューのGo to Declarationをクリックするだけで、対象のファイルが存在すれば読み込まれ表示されます。
以上がヘッダーについてでした。オリジナルのインクルードではコンパイルエラーで動かないようになっている理由のひとつが少しわかったということでしょうか?
プログラミングも大事だが、確認作業はもっと大事だぁー!