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年11月1日火曜日

DEVKIT-MPC5744Pという評価ボードを発掘!?

会社のデスクの下に置いてあるダンボール。

この中には、色々なマイコンの評価ボードやデバッガーが入っています。

大概は、いつかOSでも載せてやろうと思って買っておいたものです。

OSを載せるのは、そのマイコンのアーキテクチャを根本から理解しないといけませんが、その過程が面白くて、ちょっとしたゲームみたいなものです。

ましてや、マイナーなものになってくると、インターネット上で拾える情報も限られていて、ほとんど無理ゲーみたいなマイコンもありますが、そういうマイコンほど攻略に時間がかかり、長い時間楽しめるのでお得です。

貧乏性ともいう…。

とはいえ、本業をおろそかにしてはいけないので、こういった楽しみに使う時間も限られており、そのくせ気になった評価ボードは頻繁に買ってしまうものだから、このダンボールが一杯になってしまいました。

買っただけで開封もせずに積み上げているテレビゲームを「積みゲー」とか言いますが、アレと同じですね。

そんな私の「おもちゃ箱」ですが、そろそろ中身を整理するか~と思い立ち、ダンボールの中を整理していると…。

まったく買った覚えのない評価ボードを発見!


なんだコレ?


ヤバい、本当に買った記憶がない...。


この型番をネットで調べてみると、どうもNXP製のPowerPC系のマイコンの評価ボードみたいです。

私の場合、公式でサポートされていないようなアーキテクチャのマイコンにRTOSをムリクリ載せて動かすことに喜びを覚えるタイプの変態プログラマーなので、なぜこれを買ったのか不思議です。

というのも、確かPowerPCのTOPPERSって既にあったよな?

...と思って調べてみると、ああなるほど。

TOPPERS/JSPという一世代古い実装は存在しますが、TOPPERS/ASPは公式ではリリースされていないんですね。

それを知って衝動的にポチってしまったのでしょう。

両者の違いはそれほど大きくありませんが、時間を作ってこの評価ボードにもTOPPERS/ASPを移植してみましょうか。

コイツの後くらいに…。

TOPPERS/JSPを参考にすればそれほど長い期間は楽しめませんが、古くからのMacintosh使いの私としては、PowerPCというアーキテクチャには多少の興味とご縁もあることですし。

失礼な言い方ですが大成功とは言えないアーキテクチャで、もはや需要は少ないかもしれませんが、公開できればブログのネタにもなります。

また、ウィキペディアを読んでみると、なかなかにその誕生の経緯も熱い!


思わぬ所から暇潰し(今はそれほど暇じゃないけど!)のネタを発掘してしまいましたというお話。

ちょっと得した気分です。

2022年10月25日火曜日

TOPPERS/ASP - MSP430版 その3

前回からの続きです。

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


開発環境の構築(IDE編)

続きまして、MSP430用のIDEのインストールを行います。

IDEは、TI社純正の「Code Composer Studio」というものを使用します。

以下のページでダウンロードします。


https://www.ti.com/tool/ja-jp/CCSTUDIO

右上の「ダウンロード」というボタンをクリックすると…


以下の場所まで移動しますので、「CCSTUDIO - Code Composer Studio 統合開発環境」の右の「ダウンロードオプション」ボタンをクリックしましょう。


以下の表示が出たら、目的のタイプのコンパイラを選択します。

このブログでは「Windows single file (offline) installer for Code Composer Studio IDE (all features, devices)」をダウンロードしたものとして説明します。


ダウンロードが完了すると「CCS12.x.x.xxxxx_win64.zip」というファイルが生成されますので、これを解凍します。

解凍されて生成された「CCS12.x.x.xxxxx_win64」ディレクトリの中に「ccs_setup_12.x.x.xxxxx.exe」というファイルがあります。

これがインストーラー本体ですので、ダブルクリック!


以下のように、インストーラーが起動しますので「Next」ボタンをクリックです。


以下の表示は、もはや儀式。

I accept the agreement」を選択して「Next」ボタンをクリックします。


この画面は、特に何もする必要がなく「Next」ボタンをクリック。


ここで以下の警告、「ペンディングされた再起動があるから、続けるならPCを再起動してけろ…」って、よく分からないが…とりあえず「OK」ボタンをクリックしましょう。


自動的に再起動食らうのでは?と思いましたが、そういうこともなく以下の表示が出ます。

続けて良いんだよな?

ならば「Next」ボタンをクリックしましょう。


この画面も、特に何もする必要がなく「Next」ボタンをクリック。


以下の表示は、このIDEで使用するマイコンのアーキテクチャを選択する画面です。

今回は、MSP430で使用しますので「MSP430 ultra-low power MCUs」のみをチェックして「Next」ボタンをクリックしましょう。


その後は、特に何もする必要がないので「Next」ボタンを連打です。



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

完了までは、かなりの時間がかかります(序盤は順調にプログレスバーが進むが、終盤にグズグズする)。


インストールが完了すると、再び以下の警告が!

何やら「このインストールを完了するには再起動してけろ…」だって。

よっぽど再起動して欲しいらしい…わかったよ。

とりあえず「OK」ボタンをクリック。


以下の表示が出れば、インストールは完了です。

Finish」ボタンをクリックしてください。


さて、インストールされた「Code Composer Studio」をすぐにでも起動させてみたいところですが、散々再起動しろ!って言われたので、ここで一旦PCを再起動しましょう。

こういうのは従っておいた方が、後々トラブルに遭う可能性が少なくなるんで。


再起動後は、デスクトップに「Code Composer Studio」ショートカットが出来ているはずなので、それをダブルクリックしてIDEを起動してみましょう。

以下のようなスプラッシュ画面が表示されます。


しばらくすると、以下の表示が。

ここでベテランさんはピンと来ているハズ。

この「Code Composer Studio」って「Eclipse」ベースじゃね!?

…正解!

前回の「Arduino Mega2560版」で使用した「Microchip Studio」は「Visual Studio」がベースでしたが、今回は「Eclipse」ベースなのです。

マイコンベンダー各社は、もはや自前でIDEを作らなくなっちゃったんですかね。

企業の側でもIDEの開発工数を削減できるし、客側もベースとなったIDEを使った経験があればそれを活かせるし、メリットが多いのでしょう。

でもどうせなら、やたらと重い「Visual Studio」や、やや陳腐化している「Eclipse」などより、「Visual Studio Code」をベースにしてくれた方が軽くてナウい気がするんですけどね。

話を戻して…。

この表示で、ワークスペースのディレクトリを選択します。

特に拘りがなければ、そのままで「Launch」ボタンをクリックしてください。


以下の画面が出れば「Code Composer Studio」は正しくインストールできています。

やっぱ「Eclipse」だね~。


さて、次回は、この「Code Composer Studio」上でTOPPERS/ASPカーネルを動かすためのプロジェクトを作っていきましょう。


<続く>

TOPPERS/ASP - MSP430版 その2

前回からの続きです。


開発環境の構築(コンパイラ編)

何はともあれ、まずはMSP430用のコンパイラのインストールを行いましょう。

以下のページでダウンロードします。


https://www.ti.com/tool/ja-jp/MSP430-GCC-OPENSOURCE

右上の「ダウンロード」というボタンをクリックすると…


以下の場所まで移動しますので、「MSP430-GCC-OPENSOURCE」の方の「ダウンロードオプション」ボタンをクリックしましょう。

もう一方の「MSP432-GCC-OPENSOURCE」の方だと、ARMのコンパイラのダウンロードになっちゃうので注意。


以下の表示が出たら、目的のアーキテクチャ用のコンパイラを選択します。

このブログでは「Mitto Systems GCC Windows installer incl. support files」をダウンロードしたものとして説明します。


ダウンロードが完了すると「msp430-gcc-full-windows-installer-x.x.x.x.exe」というファイルが生成されますので、これをダブルクリック!

程なくして、以下の表示が出ます。

実行できない!?…と焦らずに「詳細情報」というリンクをクリックします。


そうすれば、ちゃんと「実行」ボタンがあらわれますので、これをクリック。


以降、インストーラーが起動し、しばらくは「Next」ボタンを連打です。




インストールが始まりましたね?


インストールが完了したら「Finish」ボタンをクリック。

これでコンパイラがインストールされました!


今回使うMSP430用のツールチェーンの環境変数の設定を行います。

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


C:\ti\msp430-gcc\bin


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

ただし、パスは…


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


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


C:\ti\msp430-gcc\bin


に置き換えてください。

こんな感じ…。


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


> msp430-elf-gcc --version


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

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


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

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

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

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

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


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


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

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

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


コマンドライン環境で正しくビルドができることを確認したら、次回はTI社のIDEである「Code Composer Studio」のインストールを行っていきます。


<続く>

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ライセンス」で配布しております。

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

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

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

…怖いから!


<終わり>

TOPPERS/ASPのビルドからデバッグまで その8

続きを書きました。

サンプルプロジェクトで遊ぼう編です。


投稿とページの使い分けがイマイチ良く分かりません。

読み辛かったらゴメンナサイ。

2022年10月12日水曜日

TOPPERS/ASP - MSP430版 その1

TOPPERS/ASP - MSP430版 概要

まだマイコンに低消費電力が今ほどうるさく求められていなかった1990年代初頭(今から30年くらい前!)に、この分野にいち早く目を付けた先進的な製品がTexas Instruments(以下「TI」)のMSP430です。


今では、MSP432というARM(Cortex-M4)コアにMSP430のペリフェラル(周辺機器)をそのまま搭載した後継機種が出ております。

MSP432の方が性能(クロック当たりの演算スコア)が高いのは当然ですが、それほど高い処理能力は必要とせず、コスト重視、且つとにかく低い消費電力が求められるシーンでは、MSP430もまだまだ現役です。

当初はROMやRAMも小さい容量の型番しかありませんでしたが、時代とともに進化し、今では十分にRTOSの搭載も検討できる容量ラインナップも増えてきました。

そこで、このMSP430に「μITRON4.0」準拠のRTOS(リアルタイムOS)であるTOPPERS/ASPを移植してみました。

かなりメジャーなマイコンなので、公式でリリースされていないのは不思議ですけどね。

MSP430は16ビットのマイコンで、独自コアのRISCです。

GCC系のコンパイラが提供されており、TIの開発環境やサンプルプログラムも充実しています。

MSP430最大の売りである低消費電力を保持しつつ、TOPPERS/ASPを実装することが今回のキモになります。

さて、上手く実装できるでしょうか?


必要なもの

TIは、自社のマイコンを搭載した評価ボードのラインナップが豊富です。

今回は、MSP430の「MSP430F5529」を搭載した「MSP-EXP430F5529LP」という評価ボードを使います。

こちらで買うと、2,500円くらいですね。


他の型番への移植も可能ですが、TOPPERS/ASPを搭載して動作させるならROM:128KB/RAM:8KB以上の容量を持つ型番を選びましょう。

また「MSP-EXP430F5529LP」を使用する場合、デバッガーは必要ありません。

この評価ボードには既にデバッガーも実装されています。

「MSP-EXP430F5529LP」を使用しない場合は「MSP-FET」というMSP430に対応したTIのデバッガを使用する必要があります。

こちらで買うと、22,000円くらいですね。


高すぎてやってられません。

ですので、それを搭載している「MSP-EXP430F5529LP」が如何にお買い得かが分かりますね。

このブログでは「MSP-EXP430F5529LP」を使用した場合の例を説明していきたいと思います。


ダウンロード/GitHub

ソースコードの入手は、こちらからどうぞ。

なるべく定期的にメンテナンスするようにしていますので、動きがおかしいな?という場合は最新版に更新をお願いします。

それでもダメな場合はコメントください。


では、次回からは、開発環境の構築やビルド方法を見ていきましょう!


<続く>

Simplicity Studioを使ってみた! その3

前回からの続き です。 このテーマを最初からご覧になる場合は こちら からどうぞ。 「Simplicity Studio」でプログラミング インストールしたSilicon Labs社のマイコン用の統合開発環境「 Simplicity Studio 」で、テストプログラムを動かして...