ワンチップマイコン

up
 ワンチップマイコン(one-chip microcomputer)とは、CPU にRAMやROM、タイマコントローラ、 割り込みコントローラ、A/Dコンバーター等、本来なら周辺回路に相当する部分まで コントローラ内に納めたデバイスです。MCU(Micro Controller Unit)とも呼ばれます

 メーカーごとに特徴がありますが、個人的に好き/嫌いも当然あります ;-)  個人的にプログラミング時に注意する点についてちょっとだけまとめてみました(表1)。 こう見るとM38000というかMELPS740命令系だけがちょっと異色なような感じがしますが、 そう違和感を感じることもありません。
 MELPS740は命令セットが他に比べて少ないのも特徴ですが、奥が深く命令によっては 甚く感動することもあります。汎用レジスタがたくさんあるアーキテクチャも便利ですが 多いがゆえに比較単調な命令を数コード書かなくてはならいのは職人気質を 穏やかにさせてしまうでしょう。
 こうした汎用レジスタを数多く持つものはメーカーサイドのマイコン設計時の 思惑が強く現れていると思っています。裸のアセンブラで開発する技術者は少なくなって おり、高級言語での開発をみらむと必然的にこうったアーキテクチャになるのは否めません。 もっとCICSっぽくしてもいいんじゃないのって思います(笑)
 TCLS-870やH8/300などはこの典型でしょう。また、CISC色が濃い職人好み(?)の マイコンはFFMC-8LやM38000でしょう。8LやM38000のコーディング中に 直感的には分かり難いがスマートなアドレッシングに感動するすることはあっても、 H8コーディング中ではなかなか味わうことができません。
 両者の中間的な位置に NEC 78K/0シリーズがあるように感じています。
 個人的には好きなのは 8L かなぁ。昔のコマンドラインのシミュレーターなんかは 僕の先生でした。今やシミュレータはメーカー純正やサードパーティからいくつも 出されていますが、そのほとんどはGUIベースです。GUIが悪いわけではないのですが、 旧来のコマンドラインの性能/使い勝手を超えないのであれば、GUIであろうがなかろうが 価値は上がりません。

表1. プログラミング留意点
メーカー NEC 富士通 ルネサス(日立) ルネサス(三菱) 東芝
シリーズ等 78K/0 FFMC-8L H8/300H M38000 TLCS-870
Endian Little Big Big Little Little
転送命令 dst←src dst←src src→dst src→dst dst←src
キャリーフラグ 加減算命令実行時のオーバフローやアンダフローを記憶するフラグです。 また,ローテート命令実行時はシフト・アウトされた値を記憶して, ビット演算命令実行時には,ビット・アキュームレータとして機能します。 演算の結果,バイト時にはビット7(ワード時にはビット15)から繰上げや 借越しが発生した場合にセット,それ以外はクリアします。 また,シフト命令ではシフトアウトした値になります。 演算の実行により、キャリが生じたとき1にセットされ、 生じなかったときには0にクリアされます。 結果が0 以上のとき、1 になります。それ以外のと きは0 になり、ボローを示します。
【!!要注意!!】
キャリー情報がセットされます。
・加算: MSBからキャリー(桁上げ)がセットされます。
・減算: MSBへのボロー(桁借り)がセットされます。
・除算: 除数が00hのときまたは商が100h以上のとき"1"がセットされます。それ以外のときは"0"がセットされます。
例. 10以上でブランチ

mov  a,var
cmp  a,#10     ;a-10
bnc  $label_ge

mov  a,var
mov  a,#10    ;al=10
              ;tl=var
cmp  a        ;var-10
bnc  label_ge ;bhsでも可

cmp.b #10,R0L  ;R0L-10
bcc   label_ge ;bhsでも可

cmp  #10   ;a-10
bcs  label_ge ;要注意!

cmp a,10 ;a-10
jr  cc,label_ge ;geでも可
例. 10未満でブランチ

mov  a,var
cmp  a,#10     ;a-10
bc   $label_lo

mov  a,var
mov  a,#10    ;al=10
              ;tl=var
cmp  a        ;var-10
bc   label_lo ;bloでも可

cmp.b #10,R0L  ;R0L-10
bcs   label_lo ;bloでも可

cmp  #10   ;a-10
bcc  label_lo ;要注意!

cmp a,10 ;a-10
jr  cs,label_ge ;ltでも可

 ワンチップマイコン関係のリンク


up

by masu
e-mail: massun.masumoto@nifty.ne.jp
URL : http://member.nifty.ne.jp/~masumoto/