10

23

コメント

割り込み関数は一つのファイルにまとめるべきではない

こんにちは、ビーコンの菅原です。

最近はマイコンのプログラムを作ろるとき、たいてい New Project のウィザードで作ることになります。
マイコンの種類も多いしこれはこれでとても便利ですね。

昔はヘッダファイルも、C言語用、アセンブラ用の二種類を自分でイチから作っていたことを思うと隔世の感があります。っていうか隔世ですね。

さてさて、ここで問題なのですが、ウィザードが終わると、たいてい割り込み処理を全部まとめて intprg.c みたいな名前のファイルにまとめてあります。

intprg.cがあるプロジェクト(C言語)


これはこれでよろしいんですが、このファイルの中に割り込み処理をそのままプログラミングすることが多いのではないでしょうか?


こうすると、ペリフェラルを他のプロジェクトに移植するときにはペリフェラルのファイルと割り込みファイル、ヘッダなどを見ながら、どの変数を使っているかなどを考えながら作業しなくてはなりません。
また、割り込み処理のファイルに分けてあると、そのファイルに関数内の定義や宣言を公開しなくてはならないというのも、気持ちが悪い。


私は通常、自分で自由にファイルを作れる開発体制の場合には、ペリフェラルごとにファイルを作り、そのペリフェラルに割り込みがあれば、ペリフェラルのファイル内に記述するようにしています。
こうすることにより、別のプロジェクトを開発するときには、同じペリフェラルを使う場合には、そのファイルを移動するだけでよくなり、手間が少なくなります。
最近はありがたいことに、同一シリーズのマイコンであれば割り込みベクタも同一の場合が多いので、本当にファイルコピーだけで済むこともおおいので便利ですね。


マイコンのプログラムサイズはあまり大きくならない場合も多いのでうるさく言うのも何なのですが、保守性をよくするという意味でも、このようなやり方がよいのではないかと思います。

07

05

コメント

HEW(R8Cコンパイラ)でadlintを使ってみた

こんにちは、ビーコンの菅原です。

Adlintを使ってみたので、記事にします。

AdLint は、オージス総研が提供している、オープンソースで無償のソースコード静的解析ツールです。

オージス総研 adlint HP
http://www.ogis-ri.co.jp/product/1199335_6798.html

オージス総研のHPでは次のように案内されています。

オープンソースで無償のソースコード静的解析ツール
AdLint - Advanced Lint - は、オープンソースで無償のソースコード静的解析ツールです。コンパイラ等では検出できないソースコード内の潜在的な不具合の可能性を指摘し、定量的な品質メトリクスを出力します。 AdLint の活用は、ソフトウェア製品をより安全で品質の高い状態へ改良することを支援します。


ということです。
静的解析ツールを普通に購入すると数十万円かかります。
オープンソースとして公開されているので、是非利用したいところです。

説明書通りに実行すれば大体OKですが、R8Cのコンパイラで引っかかったところを二点報告します。


(1)adlint_traiits.yml

# Project specific additional include paths.
# Ex.
# include_path:
# - "include/foo"
# - "../include/bar"
# - "/opt/baz/include"
include_path:
- "C:/Program Files/Renesas/Hew_002/Tools/Renesas/nc30wa/v545r01/inc30"

ここで、コンパイラのインクルードファイルのパスを指定します。
私の開発環境だと

C:/Program Files/Renesas/Hew_002/Tools/Renesas/nc30wa/v545r01/inc30

でしたが、バージョンやインストールした条件で変わりますので、各自調べて書き込んでください。


(2)adlint_pint.h

#define _far
#define _near
#define __interrupt


と定義して、コンパイラ独自の予約語をキャンセルします。
これをしないと、独自の予約語に引っ掛かり解析を停止してしまいます。

これで adlint_all.bat を実行するとどんどん解析してきます。

adlint_gamen.png
といってもノートパソコンではけっこう時間がかかりました。


使った感想として
コメントとして // は警告を報告されます。
私は多用しているので、これが大量発生します。
さらに、日本語でコメントしていて、これについても警告されます。


つぎに、メーカ提供のヘッダファイルではレジスタ定義のために#pragmaを大量に使っていますが、これもいちいち警告を出します。

そんなわけで、コードの警告のほとんどが // と #pragma に関することとなっていました。



こういうツールを使うと、C言語の得意技である一行に複数の意味を持たせた「粋」な書き方ができなくなってしまいます。

その昔はメモリもすくなく、処理速度が遅く、画面も小さかったので、そういう書き方が良かったのですが、今の時代はなんでもパワーがあるので、ダサくても確実なコードにするべきですね。

長くプログラマーをやっていると、自分が慣れている記述をしてしまいがちですが、解析ツールでチェックすることにより、安全でメンテナンス性の良いコードにすることができます。


報告ファイルは CSV形式でしたが、エディタのマクロを作り、タグジャンプできる形式にしました

◆元のファイル
W,cstartdef.h,14,32,W0511,C++ コメント `//' が使われています。
W,cstartdef.h,15,1,W0511,C++ コメント `//' が使われています。
W,cstartdef.h,15,1,W0576,基本ソース文字集合に含まれない文字が、ソースファイル `cstartdef.h' のコメントの中で使われています。

◆変換したファイル
cstartdef.h(14),W,32,W0511,C++ コメント `//' が使われています。
cstartdef.h(15),W,1,W0511,C++ コメント `//' が使われています。
cstartdef.h(15),W,1,W0576,基本ソース文字集合に含まれない文字が、ソースファイル `cstartdef.h' のコメントの中で使われています。


いろいろなオプションについては、今後検討しましょうというスタンスのようです。

05

31

コメント

HEW R8C のウォーニング設定

こんにちは、ビーコンの菅原です。

HEW R8C(M16)で開発をする場合、デフォルトてウォーニングの設定がほとんどされていません。

特にファイルが増えていき、コード量が多くなってくると目視チェックでは追いつかないので、必ずチェックしておくようにします。

警告設定への行き方

[ビルド]⇒[Renesas M16C Standard Toolchain]
[コンパイラ タブ]⇒カテゴリーで[警告]を選択します。

HEWのウォーニング設定
クリックで拡大

私のお勧めは以下のオプションです。

[-WNP]プロトタイプが宣言されていない関数を使用した場合、警告を出す
[-WNUA]引数を持つ関数を定義した場合に、使用していない引数に対してウォーニングを出力する
[-WNUF]リンク時に未使用のグローバル関数を表示する
[-WNUSF]コード生成が不要なstatic関数を表示する。


それでは、よい開発を!!

02

21

コメント

HEWのテンプレート機能(プロジェクトタイプ)

renesas HEWでプロジェクトを作って後、プロジェクト自体の名前を変えたり、プロジェクト内のディレクトリ内の名前を変えるのはなかなか厄介。

そんなときには、プロジェクトタイプを作り、再度新規作成します。

プロジェクト -> プロジェクトタイプの作成(P)

で任意の名前を付けます。


次に新規ワークスペースの作成します。

ファイル -> 新規ワークスペース

するとプロジェクトタイプのなかに先ほど作成したプロジェクトファイルの名前がありますので、これをクリックします。

ここで好きなプロジェクト名とフォルダを選べばOKです。
カンタンカンタン

11

24

コメント

ビットフィールドはコンパイラによって違う

こんにちは。ビーコン菅原です。


ビットフィールドっていうのは、パソコンのソフト開発なんかの場合あんまり使わないのではとおもいますが、組み込みではよく使います。
レジスタたたいたりするのに便利なので。

また、1バイトでもメモリを節約したいときにも大活躍となるわけです。

ただし、コンパイラによってビットフィールドの割りつけが異なりますので注意が必要です。

例をあげると
H8コンパイラのマニュアルの一部(クリックで拡大)

bitfieldh8.gif

M16コンパイラのマニュアルの一部(クリックで拡大)
bitfieldR8.gif


と同じルネサスなのにビットフィールドの割り付け方が違います。


元日立と元三菱なので当たり前なのですが。


参考までにこちらもご覧ください
Wikipedia:ビットフィールド 

では。

プロフィール

ビーコン菅原

Author:ビーコン菅原
組み込み始めてそろそろ25年。マイコンとか電子回路が大好きなんですよー

メールフォーム

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

Twitter

カウンター(UV)

月別アーカイブ

07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  03  02  01  12  11  10  09  07  05  02  12  10  09  08  07  05  04  03  11  09  08  07  06  03  02  01  12  11  10  09  08  07  06  05  04  02  12  11  10  08  02  12 

QRコード

QRコード

Designed by

Ad