ラベル TOPPERS/ASP(Arduino MEGA2560版) の投稿を表示しています。 すべての投稿を表示
ラベル TOPPERS/ASP(Arduino MEGA2560版) の投稿を表示しています。 すべての投稿を表示

2022年11月5日土曜日

TOPPERS/ASP - Arduino Mega2560版 目次

Arduino Mega2560版に関する記事の目次です。

ブログの性質上、どうしても日付が新しい順となってしまって読み難いんですよね…。


■TOPPERS/ASP - Arduino Mega2560版 その1

TOPPERS/ASP - Arduino Mega2560版 概要

必要なもの

ダウンロード/GitHub


■TOPPERS/ASP - Arduino Mega2560版 その2

開発環境の構築(Microchip Studio編)


■TOPPERS/ASP - Arduino Mega2560版 その3

開発環境の構築(Eclipse編)


■TOPPERS/ASP - Arduino Mega2560版 その4

プロジェクトの作成(Eclipse編)

プロジェクトの作成(Microchip Studio編)


■TOPPERS/ASP - Arduino Mega2560版 その5

デバッガとArduinoの配線

AVRマイコンのヒューズ設定

プログラムの転送とデバッグ


■TOPPERS/ASP - Arduino Mega2560版 その6

サンプルプロジェクトの説明

Arduino Mega2560版カーネルについて

参考資料

ライセンスについて



なお、Qiitaにも上記の記事を1ページにまとめたダイジェスト版を投稿しました。

こっちの方が読み易いです。

是非参考にしてください。

Qiita

TOPPERS/ASP - Arduino Mega2560版 - Qiita

2022年10月16日日曜日

TOPPERS/ASP - Arduino Mega2560版 その6

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


サンプルプロジェクトの説明

このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトで遊ぼう)を参照してください。


Arduino Mega2560版カーネルについて

以下、このカーネルにおける備考です。


●ArduinoIDEやライブラリは使用不可

このカーネルを使った時点で、ArduinoはArduinoでなくなります。

当然、便利なArduinoIDEや、それに付随する豊富なライブラリは使用できなくなります。

但し、「ATMega2560」チップのペリフェラル用のデバイスドライバなどは「Microchip Studio」導入時にサンプルプログラムのインストールを選択していれば、豊富なサンプルコードが手に入るはずです。

少々手間ですが、これらをカーネル上で動くように移植することは難しくないと思います。

また、TOPPERS/ASPカーネルで動作しながらArduinoのライブラリを使えるような「TOPPERS/R2CA」(凄い!)という実装も存在します。

この場合はターゲットが「Arduino Mega2560」ではなく、ARMコアの「Arduino M0」になりますが、極めて有意義な実装です。


●割り込み優先度の設定不可

このカーネルでは、割り込み優先度の設定はできません。

コンフィグレーションファイルなどにおいて、他のアーキテクチャからの移植性を考慮して、-1(優先度最低)から-6(優先度最高)を設定してもエラーが起きないようになっていますが、実際の動作に反映しません。

これは「ATMega2560」チップに搭載されている割り込みコントローラーがシンプルな設計であり、割り込み優先度を変更する機能が存在しないためです。

「ATMega2560」チップにおける割り込み優先度は、割り込み番号が若いほど優先度が高くなるように固定されています。


●多重割り込みには未対応

デフォルトでは、割り込みハンドラやタスクコンテキスト以外のプログラムのための(非タスクコンテキスト用)スタック領域は、0x200(512バイト)としています。

これは「..\target\arduino_mega2560_gcc\target_config.h」の以下の箇所で「DEFAULT_ISTKSZ」という名前で定義されています。

  1. /*
  2.  * デフォルトの非タスクコンテキスト用のスタック領域の定義
  3.  */
  4. #define DEFAULT_ISTKSZ  0x200U
  5. #define DEFAULT_ISTK    (void *)(0x00002200U - DEFAULT_ISTKSZ - 1)


このスタックサイズは、Arduino Mega2560に搭載されている「ATMega2560」チップのRAMのサイズがわずか8KBであることを考えれば、妥当と考えています。

しかし、これにより多重割り込みのサポートを諦めています。

0x200(512バイト)というスタックサイズでは、割り込みをネストするのには十分ではなく、あっという間に暴走してしまう危険性が高くなりますので、そのリスクを避けました。

もっとも、多重割り込みが必要なほどの処理がシビアなアプリケーションには、このターゲットは使われないだろうと判断した結果です。


●例外ハンドラは未対応

コンフィグレーションファイルなどにおいて、他のアーキテクチャからの移植性を考慮して、例外ハンドラの作成はできるようになっているものの動作はしません。

理由は「ATMega2560」チップに例外処理が存在しないためです。


●一部サービスコールは未対応

割り込みIDを指定して、これを有効/無効化するための「ena_int()」と「dis_int()」サービスコールはサポートしていません。

これは「ATMega2560」チップに搭載されている割り込みコントローラーがシンプルな設計であり、割り込み要因ごとに有効/無効化するためのフラグを設けていないためです。

どうしても一時的に割り込みを有効/無効化したい場合は、各ペリフェラルのレジスタを設定するか、CPU全体の割り込みを一括で設定しても良いのであれば、以下のような処理で代用してください。

  1. /* すべての割込みの許可 */
  2. Asm("sei");
  1. /* すべての割込みの禁止 */
  2. Asm("cli");


また、性能評価用システム時刻取得のための「get_utm()」サービスコールは未実装です。


参考資料

Arduino Mega2560に搭載されている「ATMega2560」チップに関する詳細な情報は、メーカーであるMicrochip社のWebページはもちろんのこと、「AVR日本語情報サイト」をご覧頂くことをお勧めします。

特に後者のページは、ディスパッチャやデバイスドライバの実装の際に大変にお世話になりました。

こんな場で恐縮ですが、心より感謝を申し上げたい。

ありがとうございました!

このページは、日本におけるAVRマイコンのシェアを大きく伸ばしたものと思います。

但し、条項が厳しいため(相当イヤな目に遭ったみたい…)、こちらのサイトへの直接リンクを張ることはできませんので、お手数ですが検索してお読みください。


ライセンスについて

このカーネルは「TOPPERSライセンス」で配布しております。

無償ですが、使用に関しては自己責任です。

まず居ないとは思いますが…万が一、このカーネルを商用利用するような無茶をやる場合は、このリンク先の条項に従ってください。

あと、その場合は必須ではありませんが、当方に連絡いただければ、ちゃんとソースコード見直します。

…怖いから!


<終わり>

2022年10月9日日曜日

TOPPERS/ASP - Arduino Mega2560版 その5

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


デバッガとArduinoの配線

結論から言いましょう。

なまら面倒くさいです!

デバッガの「Atmel-ICE」と「Arduino Mega 2560」の間で、こんな感じの配線をしなければなりません。


「Atmel-ICE」には2種類のケーブルが同梱されているはずです。

そのうちの6ピンのものは、Arduinoの「ICSP」というピンにそのまま挿すだけです。

出っ張り部分をCPU側にして、こんな感じ。


問題はもう一方のケーブル、10ピンがバラバラに出てるやつです。

それをこのように配線しなければならないのが大変なんです。


ピン配は「Arduino --- 10ピンケーブル・ピン番」で以下の通り。


RESET --- 8ピン

5V --- 4ピン

GND --- 2ピン

A4 --- 1ピン

A5 --- 5ピン

A6 --- 3ピン

A7 --- 9ピン


以上、計7ピン。

面倒だけど仕方ない、繋ぐか~…と思った矢先に更なる試練が!

どっちもメスじゃん!?

こういうケースで私がよくやる手は以下の通りです。

まず、工具箱の底の方に転がっている、こんな感じのピンヘッダ。


この金属のピンの部分をラジオペンチで樹脂から引き抜きます。

そして、引き抜いたピンを以下のようにピンソケットに挿しておきます。


これで擬似的にオスーメスの状況を作れますが、嵌合は緩く接触不良の懸念がありますので、あまりオススメしません。

これをやる場合は、配線したらマスキングテープで留めておきましょう。


AVRマイコンのヒューズ設定

「Arduino Mega 2560」に搭載されているAVRマイコン。

このシリーズには、ヒューズ設定というものがあります。

例えば、クロックは何処から取るのか?そのクロックの分周比はどのくらいか?ウォッチドッグを使うかどうか?…などといった、CPUの基本的な動作を設定するレジスタのようなものです。

その中の設定の一つに「JTAGを使うかどうか?」というものがあります。

今回、デバッガとして「Atmel-ICE」を使うことを前提に記事を書いていますが、この「Atmel-ICE」にはターゲットに対して2つの接続モードがあります。


1つ目は、ヒューズの設定やプログラムの書き込みなど、比較的シンプルな操作を行うための「ISP」モード

2つ目は、「ISP」モードの機能に加え、ブレークポイントを仕掛けてプログラムをデバッグするなどの高度な操作を行うための「JTAG」モード


配線の時に、2つケーブルを接続したでしょう?

6ピンの方は「ISP」モード用、バラバラ10ピンの方は「JTAG」モード用の配線なのです。

問題なのは「Arduino Mega 2560」(というかAVRマイコン全般)はデフォルトのヒューズ設定では「JTAG」モードを使用できないということです。

但し「ISP」モードは使えますし、これでヒューズの設定を変えることもできます。

ですので、これを使って「JTAG」モードを使えるようにヒューズ設定を変更しましょう。

「Atmel-ICE」高いんだから、最大限に役に立ってもらわなければ!

早速、「ISP」モードでパソコンと「Atmel-ICE」をUSBで繋ぎましょう。

「Atmel-ICE」に接続するケーブルは、6ピンの方です。

バラバラ10ピンの方は、とりあえず放置。

同時に「Arduino Mega 2560」もUSBでパソコンに繋ぎます。

(「Atmel-ICE」側は「SAM」ではなくて「AVR」の方のコネクタに接続してください。)


次は、ソフトウェア側の操作です。

「Microchip Studio」でプロジェクトを作成した前回の状況から始めます。

以下の画面が表示されたら、上部にある「ATmega2569」というタブをクリックしてください。


すると、以下の表示に切り替わりますので、すかさず左のリストから「Tool」をクリックしてください。


以下のような画面に切り替わります。

Selected debugger/programmer」のコンボボックスに接続中の「Atmel-ICE」がID番号付きで表示されていますか?

(「J41800113804」というIDは私のですね。)

表示されていない場合は、コンボボックスをクリックして、あなたの「Atmel-ICE」(「J41800113804」以外のもの)を選択してください。

加えて「Interface」は必ず「ISP」を選択してください。


この設定を保存しましょう。

画面上部の保存アイコンをクリックしてください。

(いいよね~フロッピーディスクのアイコン。)


次に、「Microchip Studio」のメニューから「Tools」->「Device Programming」をクリックします。


以下のような画面が表示されたら、「Tool 」は Atmel-ICE、「Device」はATmega2560、「Interface」はISP、それぞれの設定を確認の上「Apply」をクリックしてください。


以下のような画面が表示されたら、左側のリストから「Fuses」をクリックします。


以下のような画面が表示されれば、「ISP」モードにより正常にCPUからヒューズ設定を読み出せた証です。

これが現在のヒューズ設定です。


ここから、以下のようにヒューズ設定を変更します。

これらを変更すると、画面下部の「HIGH」の値が変わります。

この値は、各々のヒューズ設定をビット化し、それをHEXで表したものだからです。

・「HIGH.JTAGEN」のチェックを入れる

・「HIGH.EESAVE」のチェックを入れる

・「HIGH.BOOTRST」をチェックを外す


画面下部の「HIGH」の値が「0x91」になればOKです。

Program」ボタンをクリックして、新しいヒューズ設定をCPUに書き込みましょう。


以下の警告が出ます。

「JTAGEN」のチェックを外すとJTAG使えなくなるぞ!…って、知ってるし、今回チェックしたし、デフォルトで使わせてくれないからこうやって余計な作業をしているわけだが…。

Continue」をクリックです!


以下のように、画面最下部に「Verify registers ... OK」の表示が出れば、無事ヒューズ設定の更新は完了です。

Close」ボタンをクリックして、画面を閉じましょう。


これで「Atmel-ICE」で「JTAG」モードを使える設定になっているはずです。

確かめてみましょう。

「JTAG」モードでパソコンと「Atmel-ICE」をUSBで繋ぎましょう。

「Atmel-ICE」に接続するケーブルは、バラバラ10ピンの方です。

「ISP」モード用の6ピンのケーブルと繋ぎ替えてください。


「Microchip Studio」の方は、以下の画面に戻りましょう。

この画面の「Interface」のコンボボックスには、今度は「JTAG」を選択します。


おっと、保存もお忘れなく!


「Microchip Studio」のメニューから「Tools」->「Device Programming」をクリックします。

今度は「JTAG」を選択して「Apply」!


以下のように「JTAG」モードでも先程設定した通りのヒューズ設定が表示されれば大成功!

これでデバッガが使えるようになりました!


プログラムの転送とデバッグ

さて、JTAGが使えるようになったので、早速サンプルプログラムを転送して実行してみましょう。

その前に「TeraTerm」のご用意を。

インストールしていない方は、このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「TeraTermの導入」の項目を参考にしてください。

もちろん、シリアル通信のターミナルであれば、他のものもお使いいただけます。

「Arduino Mega 2560」はパソコンにUSB接続すると、擬似的なシリアルポートとして認識されます。

今回のTOPPERS/ASPのサンプルプログラムは、シリアル通信のメッセージを出力しますので、認識されたシリアルポート番号でターミナルを立ち上げておきましょう。

設定は、こんな感じです。

ボーレートは「9600」です。

(私のパソコンは、Arduinoをポート10として認識していますね。)


さて、「Microchip Studio」に戻りましょう。

プログラムのビルドと実行を行います。

画面上部の「」ボタンをクリックします。


しばらくすると、立ち上げておいたターミナルに以下のような表示が出ていると思います。

TOPPERS/ASPカーネルとそのサンプルプログラムの転送と実行に成功です。


ブレークポイントを試してみましょう。

動作中のプログラムを停止します。

画面上部の「」ボタンをクリックします。



ブレークポイントを仕掛けましょう。

画面右の「Solution Explorer」のソースコードリストの中から「sample1.c」をダブルクリックし、ソースコードを表示します。

このソースコードの丁度中盤くらい、メインタスクの始めに仕掛けましょうか。

ブレークポイントは、ソースコードビューの左端をクリックすると赤丸が表示され、セットされていることを表します。

仮に、これを再びクリックするとブレークポイントが解除され赤丸も消えます。


では、ブレークポイントを仕掛けた状態で、プログラムを再び実行してみます。

上手く引っかかってくれるでしょうか…。


以下のようにプログラムが停止すれば成功です!

ここからは、「F10」キーでステップオーバー、「F11」キーでステップインなど、おなじみの操作が使用できます。

因みに、ステップオーバーやステップインなどを行っている時に命令が飛んでしまったり前後したりする場合は、最適化のせいです。

デバッグ時は、このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「サンプルプログラムのデバッグ」の項目を参考に最適化を解除しましょう。


ここまでの作業、本当にお疲れさまでした。

さて、次回はサンプルプログラムの動きの説明や、今回のArduino MEGA2560用ASPカーネルのちょっと込み入った情報を書いていきます。


<続く>

2022年10月2日日曜日

TOPPERS/ASP - Arduino Mega2560版 その4

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


プロジェクトの作成(Eclipse編)

前回までの作業で、開発環境をインストールし、Arduino Mega2560版TOPPERS/ASPのソースコードをダウンロードし、それをコマンドラインでビルドするまでを行いました。

このままずっとコマンドラインで作業するのもシンドいので、Eclipse上でビルドが行えるようにプロジェクトを作成しましょう。

このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「プロジェクトの作成」および「プロジェクトのクリーンとビルド」の項目を参考にプロジェクトを作成してください。

デバッガの登録」の項目は読み飛ばしてください。

今回はデバッグ作業をこのEclipse上で行わず、次にプロジェクトを作成する「Microchip Studio」上で行う方針なので、この作業は必要ありません。

Eclipseの画面右側に以下のようなアイコンが表示されて、これらをダブルクリックすることによりビルドができるまでを確認してください。


これでEclipse上でのプロジェクトの作成は完了です。

Eclipseを閉じる前に、次の作業のために「realclean」を実行しておいてください。


プロジェクトの作成(Microchip Studio編)

さて、もう一方のIDEである「Microchip Studio」用のプロジェクトも作りましょう。

とはいえ、既にこのプロジェクトはソースコードの「OBJ」ディレクトリ内に用意してあります。

(いやいや、ちゃんと自分で一から作りたい!という方は下記<補足>を参照のこと。)

asp.atsln」というファイルがそれです。

これをダブルクリックすると「Microchip Studio」が起動します。

(初回はじられないくらい起動が遅いです。

これだから極力使いたくないんですよね…。)


起動の途中に以下のようなダイアログが表示されるかもしれません。

開こうとしている「Microchip Studio」のバージョンが、このプロジェクトファイルが作られた時と違うじゃないか!って怒って(?)ます。

問題ないので「Yes」をクリックします。


さらにしばらく待つと、ようやく以下のようにIDEが起動します。

画面右上の「VA Outline」というウィンドウの下の「Solution Explorer」タブをクリックしてください。


Solution Explorer」タブにTOPPERS/ASPのソースコードが表示されているのを確認してください。


さて、この「Microchip Studio」でもTOPPERS/ASPをビルドしてみましょう。

画面上部の「Build」メニューから「Build Solution」の項目をクリックします。


ビルドが開始され、今までコマンドラインやEclipdeで見たようなビルドメッセージが画面下部に表示されれば、「Microchip Studio」上でのプロジェクトの作成は完了です。


<補足>

TOPPERS/ASPは独自のMakefileを使用してビルドします。

「Microchip Studio」で普通にプロジェクトを作成した際に自動的に生成されるMakefileではビルドができません。

したがって、TOPPERS/ASP用のプロジェクトを「Microchip Studio」で作成する場合は、TOPPERS/ASP用の既存のMakefileを指定してプロジェクトを作成する必要があります。

「Microchip Studio」でこれを行う場合は、プラグインをインストールする必要があります。

画面上部の「Tools」メニューから「Extentions and Updates...」の項目をクリックします。


以下のようなウィンドウが表示されたら、左のリストから「Online」をクリックします。


以下のようなウィンドウが表示されます。

多くのプラグインがあります。

既存のMakefileからプロジェクトを作成するためのプラグインは「Create Project from Makefile」という名前なので、このウィンドウの右上の検索ボックスに入力しましょう。



あった、これだ!

Download」ボタンをクリックしてプラグインをインストールします。


お約束のライセンス画面。

Install」をクリック。


インストールが完了したプラグインを使用するためには、「Microchip Studio」を再起動する必要があるみたいです。

Restart Now」をクリックします。


再起動後に画面上部の「Tools」メニューを見てみると、「Create Project from Makefile」が追加されているのが確認できるはずです。



これを実行するとウィザード形式で既存のMakefileから「Microchip Studio」のプロジェクトが作成できます。


最初から入っている「OBJ」ディレクトリの中の「asp.atsln」も、こうやって作りました。

一からプロジェクトを作るときの参考にしてください。


次回は、いよいよビルドしたTOPPERS/ASPを実際のハードウェアに転送して実行・デバッグを行うまでを見ていきましょう。


<続く>

2022年9月28日水曜日

TOPPERS/ASP - Arduino Mega2560版 その3

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


開発環境の構築(Eclipse編)

さて、デバッガを使うための「Microchip Studio」のインストールに続き、コーディングとビルドを行うための「Eclipse」をインストールします。

まずは、今回使う「AVR」用のツールチェーンの環境変数の設定を行います。

ツールチェーンは、「Microchip Studio」のインストールにより既に以下のディレクトリにセットアップされているはずです。


C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin


普通にGCCを含むGNUツールチェーンですね。


ディレクトリの名前で「Atmel」って何?と思われた方もいらっしゃるでしょう。

Atmel社は、かつてはAVRマイコンを始めとする半導体メーカーでした。

ホビー用途に使える手軽なマイコンとして、AVRマイコンは、PICマイコンと人気を二分するライバルでした。

だからかどうかは知りませんが、PICマイコンのメーカーであるMicrochip社が、あろうことかAtmel社を買収しちゃったんですね。

というわけで、ちょっと前まで「Microchip Studio」は「Atmel Studio」という名前であり、このディレクトリの名前はその名残りでしょう。

さて、話を戻して…。

環境変数の設定方法は、このページ(TOPPERS/ASPのビルドからデバッグまで~GNUツールチェーンの導入)の「環境変数の設定」の項目を御覧ください。

ただし、パスは…


C:\Program Files (x86)\GNU Tools ARM Embedded\7 2017-q4-major\bin


…となっているところを…


C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin


に置き換えてください。

こんな感じ…。


また、このページの「パスの確認」の項目で打ち込むコマンドも、以下のように変わります。


> avr-gcc --version


続きまして「Cygwin」のインストールを行います。

このページ(TOPPERS/ASPのビルドからデバッグまで~Cygwinの導入)を参考にしてください。


「Cygwin」がインストールできたら、ここまでの作業が上手くいっているかどうか確認しておきましょう。

次のページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのビルド)を参照してください。

ただし、今回使用するソースコードはこのページの冒頭の「NUCLEO-F401RE STM32 Nucleo-64」開発ボード用のTOPPERS/ASPカーネル簡易パッケージではなく、「Arudino MEGA2560」用のものを使います。

ソースコードのダウンロードはこちらからどうぞ。

また、「Github」を使いたい方は以下のコマンドでソースコードのクローンを行います。


$ git clone https://github.com/RyutaroMorita/asp_arduino_mega2560_gcc.git


ダウンロードとGithub、いずれの場合も「asp_arduino_mega2560_gcc」というディレクトリの名前を「asp_1.9.2」などと改名すると、上記のページと同じ状況になります。

また、今回は「OBJ」ディレクトリを作成する必要はありません。

これは既に用意されていますので、そのまま「OBJ」ディレクトリに移動し「make~」コマンドを実行してください。


コマンドライン環境で正しくビルドができることを確認したら、いよいよ「Eclipse」のインストールを行います。

例のごとく、このページ(TOPPERS/ASPのビルドからデバッグまで~Eclipseの導入)を参考にしてください。


さて、以上でEclipseのセットアップは終了です。

これで「Microchip Studio」と「Eclipse」の2つのIDEを使用する準備が整いました。

次回は、それぞれのIDEでプロジェクトの作成を行います。


<続く>

TOPPERS/ASP - Arduino UNO R4版 その7

前回からの続き です。 このテーマを最初からご覧になる場合は こちら からどうぞ。 プログラムの転送とデバッグ ターゲットの「Arduino UNO R4」とデバッガの「E2 emulator Lite」を 前々回 作成したケーブルで接続します。 こんな感じ。 これからTOPPE...