TCP/IPプロトコル・スタックの省メモリ開発事例(後編) ――ROM 8Kバイト,RAM 0.5KバイトにTCP/IPプロトコル・スタックを収める

浅井 敬,佐藤 剛,坂本直史

tag: 組み込み

技術解説 2004年12月28日

●○● Column ●○●
◆H8/Tinyへの移植◆

 R8C/Tiny向けに開発したTCP/IPプロトコル・スタックの移植例として,H8/Tinyシリーズ(H8/3687)への実装について説明します.移植の際に考慮したH8/TinyとR8C/Tinyの違いは以下のとおりです(表A)

表A 移植の際に考慮したH8/TinyとR8C/Tinyの違い

 
H8/Tiny
R8C/Tiny
エンディアン ビッグ・エンディアン リトル・エンディアン
アライメント 必要 不要
割り込み制御 優先レベルなし 優先レベルあり

1) エンディアン

 H8/Tinyはビッグ・エンディアン形式でメモリ上にデータを格納します.そのため,R8C/Tinyとは異なり,パケットの送受信の際にヘッダ部の16ビット長,32ビット長のデータに対してエンディアンを変換する必要はありません.

2) アライメント

 H8/Tinyが16ビット長,32ビット長のデータに対してアクセスできるのは,これらのデータが偶数番地に配置されている場合に限定されます.そのため,変数のアライメントに注意する必要があります.R8C/Tinyでは,これらのデータが奇数番地に配置されている場合でもアクセス可能です.

3) 割り込み制御

 R8C/Tinyでは,マスク可能割り込み(場合によっては受け付けなくてもよい割り込み.以降,割り込みと表記)に優先順位(優先レベル)を設定できますが,H8/Tinyにはその機能はありません.

 R8C/Tinyでは,割り込みの要因ごとに割り込み優先レベル(ILVL)を設定します(割り込み制御レジスタに設定しておく).割り込み要求が受け付けられると,マイコンのフラグ・レジスタ内のプロセッサ割り込み優先レベル(IPL)に,受け付けた割り込みの優先レベルが設定されます.IPLは,現在保持している値より優先レベルの高い割り込み要求だけを受け付けるため,優先順位を考慮した多重割り込み制御を容易に行えます.

● H8C/Tinyでは割り込みの違いをドライバで吸収

 エンディアンやアライメントの違いについては,本文で述べたように関数やunionによる宣言で対処しました.割り込み制御の違いについては,H8/Tinyの割り込みハンドラの最初と最後に以下のような処理を追加して,R8C/Tinyの割り込み制御を模擬することにしました.

 まず,割り込みハンドラの最初の部分では,現在の割り込みよりも優先順位の低い割り込みを無効に設定します.そしてマイコンのコントロール・レジスタ内にある割り込み許可ビットを有効にして,すべてのマスク可能割り込みを許可します.

 割り込みハンドラの最後の部分では,現在の割り込み処理が終了したらコントロール・レジスタ内にある割り込み許可ビットを無効にして,いったんすべてのマスク可能割り込みを禁止します.そして,割り込みハンドラの最初で無効にした割り込み許可ビットを有効に戻します.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日