スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


PICアセンブラコードのファイルを分割する ~番外編:インクルードファイル~

この文章は前回の話
http://blogs.yahoo.co.jp/gomisai/1662572.html
の続きです。今回は必須ではありませんが、コードを分割したときに複数のファイルで共通の定数を定義するときに便利な擬似命令INCLUDEと、定数の定義に使うDEFINE擬似命令やEQU擬似命令について書きたいと思います。

インクルードファイルと言えば、ほとんどの人がMPLAB IDEをインストールするとついてくる標準のインクルードファイルのお世話になっていると思います。ソースコードのはじめのほうに書き込んでいる

        INCLUDE "P16F84A.INC"

とかのことです。

INCLUDE擬似命令
はじめてPICのプログラムを書き方を習ったときにはおまじないと覚えた人も多いINCLUDEですが、いま、ちゃんと意味を確認しておきましょう。MPASM Assembler Helpには次のように書かれています。

#include - Include Additional Source File
Syntax
Preferred:
#include include_file
#include "include_file"
#include <include_file>

Supported:
include include_file
include "include_file"
include <include_file>

Description
The specified file is read in as source code. The effect is the same as if the entire text of the included file were inserted into the file at the location of the include statement. Upon end-of-file, source code assembly will resume from the original source file. Up to 5 levels of nesting are permitted. Up to 255 include files are allowed.

If include_file contains any spaces, it must be enclosed in quotes or angle brackets. If a fully qualified path is specified, only that path will be searched. Otherwise, the search order is:

* current working directory
* source file directory
* MPASM assembler executable directory

 ~ 後略 ~

正確な意味は自分で原文を訳してもらうとして、要点はINCLUDEで指定したファイルの内容がINCLUDEを書いた場所に書き込まれているのと同様にアセンブルしてくれると言うことです。

ただし、指定するインクルードファイルは
* current working directory
* source file directory
* MPASM assembler executable directory
のいずれかにおきます。自分の作ったインクルードファイルの場合source file directoryつまり、INCLUDEで呼び出す側のファイルと同じディレクトリに置くのが普通でしょう。

このようにインクルードファイルに分離したいものとはいったいどんなものがあるでしょうか?さしあたって私がインクルードファイルにまとめて書いているのは以下のようなものです。
* 各ファイルで共通する定数
* 各ファイル中で各回路ごとに編集する部分
* マクロ

各ファイルで共通する定数
真っ先に思い浮かぶのは使っているクロックの周波数でしょうか?タイミングを作る必要のあるルーチンを書く際にクロック周波数を参照するように書いておくと後々使い回しが楽です。
後は電源電圧かなぁ・・・ADCのリファレンスに電源電圧を使っているときや、R-2Rラダー抵抗によるDACとか・・・どちらにしろ精度がいるときには、ちゃんと外部にリファレンスを準備しないといけないから・・・うーん。

各ファイル内で各回路ごとに編集する部分
ケースバイケースかもしれませんが、ひとつのファイル内でしか使わない定数もインクルードファイルにまとめてしまったほうが面倒ごとが減るかも知れません。具体的に言うと外部回路と接続する端子名などです。例えば電子工作の定番であるキャラクタLCD
http://akizukidenshi.com/catalog/items2.php?p=1&q=%22P-00038%22
を接続する場合、

#DEFINE         LCD_E   PORTA,D'0'
#DEFINE         LCD_RS  PORTA,D'1'
#DEFINE         LCD_RW  PORTA,D'2'

のように端子の配置を#DEFINEで定義してしまえば、回路が変わってもこの定義部分だけを変更すれば対応できます。分割したファイルの先頭で定義してもよいのですが、この部分だけを取り出したファイルをひとつ作れば編集しなければならない部分が減ります。

マクロ
マクロと言うのはMACRO擬似命令で作成するマクロのことです。
頻繁に使うマクロはライブラリにしてひとつのインクルードファイルにすると便利でしょう。



comment

Secret

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRScilabmachikaneyamaKKRPSoCCPAOPアンプPIC強磁性モンテカルロ解析常微分方程式トランジスタodeインターフェース状態密度DOSecalj定電流PDS5022スイッチング回路半導体シェルスクリプト乱数レベルシフトHP6632A温度解析ブレッドボードI2CR6452A分散関係トランジスタ技術可変抵抗確率論数値積分反強磁性セミナー非線形方程式ソルバ絶縁バンドギャップ熱設計偏微分方程式バンド構造GW近似カオス三端子レギュレータLEDフォトカプラシュミットトリガISO-I2CA/DコンバータLM358USBカレントミラーTL431マフィンティン半径PC817C数値微分アナログスイッチ発振回路サーボ直流動作点解析74HC40532ちゃんねる標準ロジックチョッパアンプLDAアセンブラFFTbzqltyイジング模型ブラべ格子開発環境補間量子力学電子負荷BSchパラメトリック解析単振り子基本並進ベクトル熱伝導繰り返しGGAMaximaTLP621ewidthSMP相対論抵抗位相図ランダムウォークスピン軌道相互作用六方最密充填構造不規則合金FETコバルト失敗談QSGWcygwinスレーターポーリング曲線スイッチト・キャパシタラプラス方程式gfortranキュリー温度状態方程式条件分岐格子比熱TLP552LM555TLP521三角波NE555過渡解析FXA-7020ZRWriter509テスタ詰め回路MCUマントルダイヤモンドQNAPデータロガーガイガー管自動計測UPS井戸型ポテンシャルawk第一原理計算仮想結晶近似ブラウン運動差し込みグラフ平均場近似fsolve起電力熱力学OpenMPスーパーセル固有値問題最適化最小値VCAシュレディンガー方程式VESTAubuntu最大値面心立方構造PGAOPA2277L10構造非線型方程式ソルバ2SC1815fccフェルミ面等高線ジバニャン方程式ヒストグラム確率論マテリアルデザイン正規分布結晶磁気異方性interp1フィルタ初期値ウィグナーザイツ胞c/aルチル構造岩塩構造スワップ領域リジッドバンド模型edeltBaOウルツ鉱構造重積分SIC二相共存ZnOquantumESPRESSOCapSensegnuplotmultiplot全エネルギー固定スピンモーメントFSM合金ノコギリ波フォノンデバイ模型ハーフメタル半金属TeXifortTS-110不規則局所モーメントTS-112等価回路モデルパラメータ・モデルヒストグラムExcel円周率GimpトラックボールPC直流解析入出力文字列マンデルブロ集合キーボードフラクタル化学反応三次元Realforce縮退日本語最小二乗法関数フィッティング疎行列シンボル線種ナイキスト線図陰解法負帰還安定性熱拡散方程式EAGLECrank-Nicolson法連立一次方程式P-10クーロン散乱Ubuntu境界条件MBEHiLAPW軸ラベルトランスCK1026MAS830L凡例PIC16F785LMC662AACircuit両対数グラフ片対数グラフグラフの分割specx.f

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。