浜松市にいる組み込みおやじ-電子工作、回路設計、ファーム TIPS

このブログはビーコンの代表である菅原が、電気電子、電子工作、組み込みソフトウェアなどで、自分が苦労したところや面白い発見などを記事にしていきます。電子工作やマイコンに親しむ人が少しでも増えたらという思いでつづります。
やっぱり、電子工作が好きなんですよ。
割り込み関数は一つのファイルにまとめるべきではない
0
    こんにちは、ビーコンの菅原です。

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

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

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

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


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


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


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


    マイコンのプログラムサイズはあまり大きくならない場合も多いのでうるさく言うのも何なのですが、保守性をよくするという意味でも、このようなやり方がよいのではないかと思います。
    | ビーコン菅原 | 組込・software | 12:39 | comments(0) | trackbacks(0) |
    HEW(R8Cコンパイラ)でadlintを使ってみた
    0
      こんにちは、ビーコンの菅原です。

      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' のコメントの中で使われています。


      いろいろなオプションについては、今後検討しましょうというスタンスのようです。
      | ビーコン菅原 | 組込・software | 19:23 | comments(0) | trackbacks(0) |
      HEW R8C のウォーニング設定
      0
        こんにちは、ビーコンの菅原です。

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

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

        警告設定への行き方

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

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

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

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


        それでは、よい開発を!!
        | ビーコン菅原 | 組込・software | 03:32 | comments(0) | trackbacks(0) |
         123456
        78910111213
        14151617181920
        21222324252627
        28293031   
        << January 2018 >>
        + RECOMMEND
        + RECOMMEND
        + SELECTED ENTRIES
        + RECENT COMMENTS
        + RECENT TRACKBACK
        + CATEGORIES
        + ARCHIVES
        + つぶやき
        + MOBILE
        qrcode
        + LINKS
        + PROFILE