田舎の組み込みプログラマーがわざわざ趣味でも色々開発してみようとあがく様を綴るブログです。
DMM.makeのクリエイターズマーケットに出品しています。

原点復帰2016年11月23日

なんだか・・・

あれこれ紆余曲折しているうちに一年以上経過してしまってました。

実は自宅で電子工作をしつつ、会社で作ったR8C用基本システムの検証と強化を行うという目的もあったんですが、構造的にも道義的にもスッキリしない感じでしたので思い切って一から作り直すことにしました。

そこで

システム開発用にこんな試験基板を作ってみました。

再出発用開発基板

今まで買い溜めていたものを載せてみただけという感じが無きにしも非ずですが、あれこれ使ってみることが経験的にもシステム開発的にも大切だと思いますので、まずはこれで再スタートです。

実は未だにプリエンプティブなシステムは作ったことがありませんのでやってみたいかな〜などと思いつつ、余り複雑にしたくありませんしできるだけ早く動く状態にしたいのでスタック共有型を視野に入れつつ実装を進めていく考えです。

アーキテクチャ的な話をすると

メインループを主体に周期的処理を回していくスタイルを「サイクリック・エグゼクティブ」アーキテクチャと言うらしいですね。

ぶっちゃけ一番シンプルな形式なんですがスペースシャトルのフライトシステムの一部もこの方式だったらしく、ハードが確定している要件であれば大抵はこれでいけそうな気もしますし現状はこれで足りていたりします。
個人的にはこれが最強だと思っていて、自分が作るシステムにはマルチタスクの必要性は今のところ感じていないんですが、時間のかかる演算が必要な案件が出てきたらどうしようという漠然とした不安はあったりします。

まぁ、学習を兼ねて趣味でやっていることですから諸々のことは作りながら考えていくとして、会社の仕事の方でそういった事態になった時にスマートに解決できる技量を早く身につけたいとは思っています。

いきなりつまづいてみたり2016年11月24日

さて、システムを一から再構築すると決めた(ゼロからではないのが味噌です)ので、色々スッキリハッキリ分離させておこうと分析中です。

マイコン機能に極力依存しないシステムというのが王道なんでしょうけど、構造化アセンブラにどっぷり浸っている身としてはもうR8C以外に考えられませんので無理な相談というヤツだったりします。

とは言え

R8Cにも色々グループがあって周辺機能も様々なので、その辺は分離して簡単に使い分けられるようにするために当面使いそうな物をピックアップしてみました。

R8C/3xM
会社で使っているのがこれなので、基本はこれになります。
20PINの32Mと、32PINの33Mを個人的に持っています。2029年1月までは生産してくれるとのことですが、本当でしょうね?ルネサスさん。
R8C/M12A
DIP20PINの使いやすいパッケージでお値段100円と超リーズナブルでありながら、20MHzの内蔵オシレータと2Kバイトのデータフラッシュも ついているというスーパーなマイコンです。
ただ、E1エミュレータが使えないのでわざわざ旧型のE8aエミュレータを追加で買うハメに orz
プログラムメモリ2Kバイト、RAMは256バイトと一見制限は厳しいのですが、これを拡張する方法を公開してくれている方がいます。
しかし、この制限内でも十分電子工作を楽しめるようなシステムを目指そうと思っています。
R8C/3xW
元々は80PINのR8C/38WとCANトランシーバーを搭載したボードを買ったのが最初でした。
続いて64PINの36W(48PINの34Wだったかもしれません)を載せたボード+CANトランシーバーボードを買いました。
当面CANの開発はこれで行こうと思いますが、移り気なもので・・・
R8C/5xE
単品で購入可能なCAN内蔵R8Cを探していて見つけたのがこれです。
R8C/3系の周辺機能を踏襲しつつ動作周波数が高いのが魅力ですが、今のところそこまでの必要は感じていません。
R8C/23
同じく単品購入可能なCAN内蔵R8Cです。
動作温度範囲の広いKバージョンが手に入るのが車載を考えると魅力ですが、他の使用部品の動作可能温度が低かったら意味がないので保留中です。

今のところこんな感じですが、まずは手元にある上3つを使えるようにするのが先決ですね。
もちろん、必要になれば下の2つにも対応できるような仕組みにしつつです。

都合のいいことに

R8Cの統合開発環境では、マイコンの品種を指定してプロジェクトを作成するとレジスタを網羅したインクルードファイルを作ってくれます。
今では当たり前の事なのかもしれませんが、その辺りも自作していた身としてはかなり感動物です。

というわけで、早速プロジェクトを一通り作ってみました。
一番上の"gestimotor"というのは先日ご紹介した基板に搭載した機能をPPAP的に並べたものです。

使用予定マイコンのプロジェクトを作成

続いてCAN関連の比較です。
ピックアップした中ではCANがつかえる物が3つありますが、まずは38Wと56Eの割り込み部分から。

38Wと56EのCAN割り込み比較

右側の56EはCAN割り込みが3つしかありませんが、38Wの方はこの先も続いています。

次は56Eと23の比較です。

56Eと23のCAN制御比較

これは明らかに別物ですね。
ということで3グループ共にCAN機能は別物だと分かりました。見比べてみると56Eが一番シンプルな感じで、もしかすると洗練されていて使いやすいのかも。
でも、まずは38WのCANを使えるようになるのが先決です。

ここまではグループが違えば周辺機能が違っていても仕方がないと納得できるのですが、驚いたのはこれ。

38MとM12Aの割り込み制御比較

M12Aは割り込み関係の処理が全く違っているようです。
割り込み処理はコア機能だと漠然と考えていましたが、周辺機能から割り込みがかかるわけですからやはり周辺機能ということになるんでしょうね。

ここさえクリアできればちょっとした工作にどんどん使えそうなのですが・・・。

ということで

先はまだまだ長そうですが、地道にやっていこうと思います。