2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TOPPERS/ASP - Arduino Mega2560版

Last updated at Posted at 2022-11-06

※この記事は、筆者自身のブログに連載していたものを読みやすく1ページにまとめたダイジェスト版です。無断転載などではありませんのでご了承ください。

概要

皆様おなじみの「Arduino」。

「Arduino IDE」という優れた開発環境を使って、手軽に組み込みソフトを作って動かせる安くて便利なボードとして、愛用されている方も多いのではないでしょうか。
私も長年、仕事で原理試作品をパパッと開発するために愛用しています。
でも、モノによってはどうしてもマルチタスクを使いたい案件もあり、Arduinoの本来の使い方では解決できないケースもあります。
そこで、「Arduino Mega 2560」に「μITRON4.0」準拠のRTOS(リアルタイムOS)であるTOPPERS/ASPを移植してみました。
普通Arduinoといえば、「Arduino UNO」という代表機種を指しますが、今回使うのはその上位版の「Arduino Mega 2560」です。
「Arduino UNO」に搭載されているCPUは、ATmega328P(ROM:32KB/RAM:2KB)というもの。
ROMはともかく、さすがにこのRAM容量ではOSが載りません。
一方の「Arduino Mega 2560」に搭載されているCPUは、ATmega2560(ROM:256KB/RAM:8KB)ですので、十分とは言えないまでも何とかなるかな~?と思いました。
さて、このATmega2560、なんと8ビットCPUです。
今どき8ビットってあ~た…。
しかしながら、レジスタの数が多くてアセンブラのニーモニックもRISCらしくキレイで、そのせいもあってか8ビットCPUとしては例外的にGCCコンパイラが提供されています。
クロックも16MHzで動作しますので、ちょっとしたIoT機器なら十分に開発できそうです。

必要なもの

まずは、今回のターゲットとなる「Arduino Mega 2560」です。
7,000円以上したら高いと思ってください。

次に、デバッガです。
Atmel-ICE」っていいます。
秋月電子さんで16,800円ですね。
高い!…と思われるかもしれませんが、これ一台あるとAtmel系は今回のAVRやSAM(ARM)シリーズのデバッグも出来ちゃうので、今回の「Arduino Mega 2560」に限らずArduinoシリーズを普段良くお使いの方は買っておいて損はないですよ。
まあ、安くはないわな…。

ダウンロード/GitHub

ソースコードの入手は、こちらからどうぞ。
なるべく定期的にメンテナンスするようにしていますので、動きがおかしいな?という場合は最新版に更新をお願いします。
それでもダメな場合はコメントください。

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

Arduino Mega2560版のTOPPERS/ASPを使って開発を行っていく上では、以下の方針を採ります。

1.コーディングとビルドは「Eclipse」を使う。
2.デバッガを使う場合のみ「Microchip Studio」を使う。

…面倒くさいですね。
何で2つのIDEを使い分けなきゃならんのか?
それは、以下の理由からです。

1.「Microchip Studio」はMicrosoftの「Visual Studio」をベースにしているため動作が重くて使いにくい。
2.TOPPERS/ASPはビルドに独自のMakefileを使うため「Microchip Studio」のGUIによるソースコード管理の利点が少ない。

もちろん、これは個人的な好みです。
パソコンのスペックの問題はさておき、「Microchip Studio」だけで全てを賄う方法もあるに違いありません。
(私は上手くいかなかったのですが。)
しかしながら、ここでは上記の方針に則り説明していきます。

では、まずは以下のページで「Microchip Studio」のダウンロードをしましょう。

Offline Installer」と「Web Installer」という2つの種類のインストーラーがあるかもしれません。
ここでは「Offline Installer」を例とします。
ダウンロードが完了すると「as-installer-x.x.xxxx-full.exe」のようなファイルが落とせます。
これをダブルクリックしてみましょう。
以下のようにインストーラーが起動します。
ここでは「I agree to the license terms and conditions.」のチェックボックスをクリックして、「Next」ボタンをクリックして先に進みましょう。

次は、開発ターゲットのアーキテクチャを選択します。
今回のArduino Mega2560は「AVR」というアーキテクチャですので、ディスク容量に余裕がない方は最悪「AVR」だけチェックすれば良いでしょう。
「Next」ボタンをクリックして先に進みましょう。

サンプルプログラムをインストールするかどうかを選択します。
こちらもディスク容量に余裕がない方はチェックしなくて良いです。
「Next」ボタンをクリックして先に進みましょう。

以下、特に何もせずに「Next」ボタンをクリックして先に進みましょう。

ようやくインストールが開始されました。

…と思って安心したのも束の間、「MPLAB XC8」というソフトウェアのセットアップが始まります。
この「XC8」というのは「PIC」というMicrochip社の看板マイコンのためのコンパイラなのですが、前の画面で特に選択してませんよね?
なんででしょう?
まあ、害にはならないと思いますのでインストールしてあげましょう。
「Next」ボタンをクリックして先に進みましょう。

お約束のライセンス画面です。
I accept the agreement」のラジオボタンを選択して、「Next」ボタンをクリックして先に進みましょう。

以下、特に何もせずにひたすら「Next」ボタンをクリックして先に進みましょう。

ようやく「XC8」のインストールが開始されました。

「XC8」のインストールが終了すると、以下のように「Your Host ID is:」という記述の後にパスワードらしきものが表示されています。
「XC8」を使用する際にはアクティベーションが必要であり、その登録のために必要なIDなのだそうです。
今回のAVRだけではなく、将来的にPICも使いたいよ~という方は、メモしておいた方が良いでしょう。
メモしたら「Next」ボタンをクリックして先に進みましょう。

「XC8」のインストールはこれで終了のようです。
「Finish」ボタンをクリックして先に進みましょう。

「Microchip Studio」のインストーラー画面に戻ってしばらくすると、お待ちかね(?)の「Visual Studio」のインストールが始まります。
このフェーズは今までのように色々聞いてこないので楽ちんです。
…なまら時間が掛かりますが。
「Visual Studio」のインストールが終了すると、自動的に消えて再び「Microchip Studio」のインストーラー画面に戻ります。

この後のインストールの過程で、以下の画面が表示されることがあります(3回位)。
これは、各種デバッガのデバイスドライバのインストールの許可を求めています。
その中には、今回使用する「Atmel-ICE」のデバイスドライバもあるはずです。
「インストール」ボタンをクリックしましょう。

かなりの時間が掛かりますが、以下の画面が表示されると全てのインストール作業は終了となります。
「Close」ボタンをクリックします。

「Microchip Studio」が起動するはずです。
以下のような画面が見られれば「Microchip Studio」のインストールは成功です。
お疲れ様でした!

開発環境の構築(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」のインストールを行います。
基本的には「gcc-core」、「make」、「diffutils」、「perl」と「git」の5つのパッケージを含むようなCygwin環境を構築すれば良いです。
もしよろしければ、私のブログのページ(TOPPERS/ASPのビルドからデバッグまで~Cygwinの導入)を参考にしてください。
「Cygwin」がインストールできたら、ここまでの作業が上手くいっているかどうか確認しておきましょう。
次のページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのビルド)を参照してください。
ただし、今回使用するソースコードはこのページの冒頭の「NUCLEO-F401RE STM32 Nucleo-64」開発ボード用のTOPPERS/ASPカーネル簡易パッケージではなく、「Arudino MEGA2560」用のものを使います。
以下のコマンドでソースコードのクローンを行います。

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

「asp_arduino_mega2560_gcc」というディレクトリの名前を「asp_1.9.2」などと改名すると、上記のページと同じ状況になります。
また、今回は「OBJ」ディレクトリを作成する必要はありません。
これは既に用意されていますので、そのまま「OBJ」ディレクトリに移動し「make~」コマンドを実行してください。

コマンドライン環境で正しくビルドができることを確認したら、いよいよ「Eclipse」のインストールを行います。
あまりにも古すぎるものを除けば、好きなバージョンの「Eclipse」をインストールしてください。
よろしければ、このページ(TOPPERS/ASPのビルドからデバッグまで~Eclipseの導入)を参考にしてください。

プロジェクトの作成(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」も、こうやって作りました。
一からプロジェクトを作るときの参考にしてください。

デバッガと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のビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「サンプルプログラムのデバッグ」の項目を参考に最適化を解除しましょう。

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

興味のある方は、このページ(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」という名前で定義されています。

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

このスタックサイズは、Arduino Mega2560に搭載されている「ATMega2560」チップのRAMのサイズがわずか8KBであることを考えれば、妥当と考えています。
しかし、これにより多重割り込みのサポートを諦めています。
0x200(512バイト)というスタックサイズでは、割り込みをネストするのには十分ではなく、あっという間に暴走してしまう危険性が高くなりますので、そのリスクを避けました。
もっとも、多重割り込みが必要なほどの処理がシビアなアプリケーションには、このターゲットは使われないだろうと判断した結果です。

例外ハンドラは未対応

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

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

割り込みIDを指定して、これを有効/無効化するための「ena_int()」と「dis_int()」サービスコールはサポートしていません。
これは「ATMega2560」チップに搭載されている割り込みコントローラーがシンプルな設計であり、割り込み要因ごとに有効/無効化するためのフラグを設けていないためです。
どうしても一時的に割り込みを有効/無効化したい場合は、各ペリフェラルのレジスタを設定するか、CPU全体の割り込みを一括で設定しても良いのであれば、以下のような処理で代用してください。

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

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

参考資料

Arduino Mega2560に搭載されている「ATMega2560」チップに関する詳細な情報は、メーカーであるMicrochip社のWebページはもちろんのこと、「AVR日本語情報サイト」をご覧頂くことをお勧めします。
特に後者のページは、ディスパッチャやデバイスドライバの実装の際に大変にお世話になりました。
こんな場で恐縮ですが、心より感謝を申し上げたい。
ありがとうございました!
このページは、日本におけるAVRマイコンのシェアを大きく伸ばしたものと思います。
但し、条項が厳しいため(相当イヤな目に遭ったみたい…)、こちらのサイトへの直接リンクを張ることはできませんので、お手数ですが検索してお読みください。

ライセンスについて

このカーネルは「TOPPERSライセンス」で配布しております。
無償ですが、使用に関しては自己責任です。
まず居ないとは思いますが…万が一、このカーネルを商用利用するような無茶をやる場合は、このリンク先の条項に従ってください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?