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

このところ、ブログの更新をさぼりっぱなしのゆってぃです(コラー!!!)

仕事でFM3に携わる機会があって、自己申告的にはもうFM3ネタはバッチリなんですよ!(汗)
マルチファンクションシリアルに関する記事とか、クロックに関する記事を書きたいんですよ!(大汗)
・・・え?そんなの信じないって?
そんなこと言わないで下さいよ~本当ですよ~(涙)
もう富士通の人も真っ青なくらい詳しくなりましたよ~(大嘘)

・・・本当にごめんさない。ごめんさない。

ボーナスが出たらオシロを買うので、そしたらガンガン記事を書いていきますから!!

さて、今日は組み込み現場におけるdefineの使い方を。

みなさんは、いつもdefineをどのように使われていますか?

たとえば、

#define BUF_MAX  (256)

みたいにして

unsigned char array[BUF_MAX] = {0};

みたいに使われることが多いのではないでしょうか?

あるいは

#define NELEMS(array) ((sizeof(array))/(sizeof(array[0])))

みたいなマクロ関数を作られる場合も多いでしょう。



組み込みソフトでは、レジスタ名にその役割を示すためにdefineを用いることが少なくありません。

たとえば、以前の記事でLEDの点滅は以下のように書きました。

FM3_GPIO->PDORF_f.P3 ^= 1;

確かにこれでもよいのですが、この記述方法では「ポートFの3ビット目」が何を目的として反転しているのかわかりません。
そこで

#define LED_PORT (FM3_GPIO->PDORF_f.P3)

とすれば

LED_PORT ^= 1;

と書けるので、ソースコードがずいぶん読みやすくなります。
また、仮に回路変更が入ってポートが変更になったとしても、define内を訂正すればそれですみます。
たとえば

FM3_GPIO->PDORF_f.P3 = 0;
FM3_GPIO->PDORF_f.P3 = 1;
FM3_GPIO->PDORF_f.P3 = 0;
FM3_GPIO->PDORF_f.P3 = 1;

というコードがあった場合、もしも回路でP3がP4になった場合、4行も直さなければなりません。

FM3_GPIO->PDORF_f.P4 = 0;
FM3_GPIO->PDORF_f.P4 = 1;
FM3_GPIO->PDORF_f.P4 = 0;
FM3_GPIO->PDORF_f.P4 = 1;

これはたまたま4行が並んでいたからよかったものの、複数のファイルであっちこっちに修正箇所があった場合、ちょっとばかしめんどうくさい作業が必要になりますね。

でも、もしもdefineでマクロ化されていたら、define内のみの修正ですみます。
たった1箇所変えるだけで、修正は完了です。

#define LED_PORT (FM3_GPIO->PDORF_f.P4)

LED_PORT = 0;
LED_PORT = 1;
LED_PORT = 0;
LED_PORT = 1;

ですので、レジスタ名はその役割毎にマクロ化することをオススメします。

今日はほとんど内容はありませんでしたが、ここまでにしましょう(汗)
最後までお読みいただいて、ありがとうございました!(感謝)
関連記事
スポンサーサイト
コメント
コメントの投稿
トラックバック URL
トラックバック
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク


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