H8-SX基板 デバックモニタにコンテンツを追加してRAMデバックを快適にしよう [RX&SH&H8]
図の様に1655.motをテキストエディタで開くと、テキストファイルとして実際に読む事ができます。
※全て16進表記となっています。
先頭の2文字がレコードタイプ、次の2文字はこれ以降行末までのデータの数(見た目にはその半分)、次の4文字(先頭のS1タイプの場合)がデータの開始アドレス、それ以降行末の2文字手前までが実際のデータであり、最後の2文字はチェックサムと言う事になります。
1655.motファイルの先頭のレコードは
S00E000031363535202020206D6F7450
1665.motのアスキーコードです。
一番最後のレコードは
S9031000EC
エントリーポイントを示しています。
さてモトローラSフォーマットはこの様にテキストとして扱え、非常に簡単な構造で、しかもレコードは各行で完結しているので、ここに自分で作成したレコードを追加するのは容易です。
今回の場合は
S9031000EC
の直前に自分で作成したレコードを追加してみました。
但し注意すべき点としてアドレスは必ず重ならないようにしておく必要があります。
1655.motの最後から2番目のレコードに着目してみると、
S10B2EF00000077800000A301D
となっています。
つまりS1レコード、11byte、0x2EF0からスタートなので終了アドレスは0x2EF8と言う事になります。
これ以降のアドレスからユーザーが作成したレコードを置く事ができます。
ここには何を置けばよいのでしょうか?。
ROM化できるものは何を置いても大丈夫です。プログラムコードであっても、定数データであっても、H8は全アドレス空間がリニアにアクセスできますので問題ありません。
例えばグラフィックLCDに文字を出力したい時、FONTデータ等はしばしばROM化しますが、16×16のビットマップ日本語FONTならまず入り切ります。外部のシリアルROM辺りに置くより高速にアクセスできますので、その分表示が高速になりますね。
プログラムを置いた場合はリンカーではアドレスの解決ができないので、アドレス情報を書いたマクロをプロトタイプ宣言として用意して置けば、やはりFLASH ROM上に置いたプログラムも実行可能となります。
下の図は1655.motにhtmlファイルをmotファイル化したものを追加してH8-SX基板に焼き込み、ブラウザからアクセスしてみたものです。データ自体はRAM上にはありません。ROMから引っ張ってきた物です。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
H8-SX基板 HEWのコンパイラ出力に妙に関心。 [RX&SH&H8]
例えばabc(short,short);とプロトタイプ宣言されている関数で、
abc(0x1234,0x5678);と書き、これを逆アセンブルすると以下の様になります。
H8SXのコンパイラのパラメーター渡しのルールはH8/300Hと同じなのかな、それならばER0、ER1(オプション設定でER2も)に引数をパックしてレジスタ渡しをし、レジスタ渡しできない分に付いてはスタック渡しとなります。
引数が共にイミディエイトなので確かにこれで良いわけですが、なーんか新鮮(笑)。
abc(0x1234,0x5678);と書き、これを逆アセンブルすると以下の様になります。
MOV.L #H'56781234:32,ER0 JSR @_abc:24
H8SXのコンパイラのパラメーター渡しのルールはH8/300Hと同じなのかな、それならばER0、ER1(オプション設定でER2も)に引数をパックしてレジスタ渡しをし、レジスタ渡しできない分に付いてはスタック渡しとなります。
引数が共にイミディエイトなので確かにこれで良いわけですが、なーんか新鮮(笑)。
H8-SX基板 120pinは多いようで、少ないようで、、、 [RX&SH&H8]
まあ正直不満が無いでもない。
SH系の周辺ポートはそんな事無かったように思うのだけれど、H8/300Hでは、外部バスを使う為に拡張モードにすると、とたんにポートの使い方に制限が発生する。
つまりアドレスバスでA0~A15に予約されているポートは、出力設定すれば必ずアドレスとなってしまい、それ以外では入力ポートとしてしか使えなくなる。
この使い勝手の悪いところがH8-SXにも遺伝してしまったようで、やはりA0~A15はがっかりとなる。制御線も同様に使わない制御線も出力設定できない。
あとポート5はこれまた入力専用で、これも悪い継承をしている。
そんな理由なのか公式
https://www.marutsu.co.jp/user/shohin.php?p=70431
ではSC1602互換キャラクタLCDはCPUバスに接続して使う事となっている。
このH8-SXはバスクロックを最大でCPUクロックと同一周波数、このボードなら48MHzまで持って行けるので、正直SC1602の様な遅いデバイスをCPUバスに接続するのはイマイチなんですよね。ボトルネックになるから。
ふう、、、。
SH系の周辺ポートはそんな事無かったように思うのだけれど、H8/300Hでは、外部バスを使う為に拡張モードにすると、とたんにポートの使い方に制限が発生する。
つまりアドレスバスでA0~A15に予約されているポートは、出力設定すれば必ずアドレスとなってしまい、それ以外では入力ポートとしてしか使えなくなる。
この使い勝手の悪いところがH8-SXにも遺伝してしまったようで、やはりA0~A15はがっかりとなる。制御線も同様に使わない制御線も出力設定できない。
あとポート5はこれまた入力専用で、これも悪い継承をしている。
そんな理由なのか公式
https://www.marutsu.co.jp/user/shohin.php?p=70431
ではSC1602互換キャラクタLCDはCPUバスに接続して使う事となっている。
このH8-SXはバスクロックを最大でCPUクロックと同一周波数、このボードなら48MHzまで持って行けるので、正直SC1602の様な遅いデバイスをCPUバスに接続するのはイマイチなんですよね。ボトルネックになるから。
ふう、、、。
今すぐ使える!H8マイコン基板 2010年 04月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2010/02/25
- メディア: 雑誌
H8-SX基板 LCDであのメッセージを表示してみまた。今回は動画付き [RX&SH&H8]
※LCDをポートを叩いて動かす場合、もしかしたら必要無いかもしれないけれど、一応H8/300Hの流儀でアドレス兼用PINを使う為にシングルチップモードにしています。MD0をVCCに接続します。詳しくは配線図を見て。
勿論HEW+デバックモニタで開発しています。
細かいタイミング調整も、
ソース修正、ビルド、実行、シンクロで確認、またソース修正
って流れが非常に快適に行えます。
是非みなさんも使ってみてくださいね。
下は基板とLCD間のなんとなくな配線図です。
粗末な物ですが宜しければ
勿論HEW+デバックモニタで開発しています。
細かいタイミング調整も、
ソース修正、ビルド、実行、シンクロで確認、またソース修正
って流れが非常に快適に行えます。
是非みなさんも使ってみてくださいね。
下は基板とLCD間のなんとなくな配線図です。
粗末な物ですが宜しければ
/***********************************************************************/ /* */ /* FILE :sc1602.c */ /* DATE :Tue, Mar 02, 2010 */ /* DESCRIPTION :Main Program */ /* CPU TYPE :H8SX/1658 */ /* */ /* This file is generated by Renesas Project Generator (Ver.4.16). */ /* */ /***********************************************************************/ #include <string.h> #include "iodefine.h" /*************************************************************************/ /* 端子定義 */ /*************************************************************************/ #define LCD_DATA_DIR_IN PF.DDR = 0x10 #define LCD_DATA_DIR_OUT PF.DDR = 0x1f #define LCD_DATA_OUT(data) do{PF.DR.BYTE &= 0xf0; PF.DR.BYTE |= data & 0x0f;}while(0) #define LCD_RW PE.DR.BIT.B7 #define LCD_E PE.DR.BIT.B6 #define LCD_RS PF.DR.BIT.B4 #define LCD_RW_LO LCD_RW = 0 #define LCD_RW_HI LCD_RW = 1 #define LCD_E_LO LCD_E = 0 #define LCD_E_HI LCD_E = 1 #define LCD_RS_LO LCD_RS = 0 #define LCD_RS_HI LCD_RS = 1 /*************************************************************************/ /* その他の定義 */ /*************************************************************************/ #define DATA_MODE 0 /*データを書込みモード*/ #define CMD_MODE 1 /*コマンドを書込みモード*/ #define FUNCTIONSET LcdWrite(CMD_MODE,0x28) /*ファンクションセットで4bitモードを選択*/ #define DISPLAYOFF LcdWrite(CMD_MODE,0x08) /*表示OFF*/ #define DISPLAYON LcdWrite(CMD_MODE,0x0c) /*表示ON*/ #define DISPLAYCLEAR LcdWrite(CMD_MODE,0x01) /*表示クリア*/ #define ENTRYMODESET LcdWrite(CMD_MODE,0x06) /*インクリメント、表示をシフトしない*/ #define CURSORHOME LcdWrite(CMD_MODE,0x02) /*カーソルホーム*/ #define LINE1 LcdWrite(CMD_MODE,0x80+0x00) /*一行目*/ #define LINE2 LcdWrite(CMD_MODE,0x80+0x40) /*二行目*/ #define LINE3 LcdWrite(CMD_MODE,0x80+0x14) /*三行目*/ #define LINE4 LcdWrite(CMD_MODE,0x80+0x54) /*四行目*/ #define ROWSIZE 16 #define COLSIZE 2 #define LCDBUFFERSIZE (ROWSIZE * COLSIZE) /*************************************************************************/ /* プロトタイプ宣言 */ /*************************************************************************/ static void LcdWrite( int mode, char c ); static void LcdWrite4( char c ); static char LcdRead4( void ); static void WaitBusyNegate( void ); /*************************************************************************/ /* 大域変数宣言 */ /*************************************************************************/ char LcdBuf[ LCDBUFFERSIZE ]; /*LCD用の表示バッファ*/ static int c_x; /*バッファ上のカーソル位置*/ static int c_y; /*バッファ上のカーソル位置*/ /*************************************************************************/ /* 時間待ち処理 */ /*************************************************************************/ static void WaitMs( volatile long tim ) { volatile long i; for( ; tim > 0; tim-- ) { for( i = 0; i < 4360; i++ ) ; } } /*************************************************************************/ /* 4bit単位でのLCD書込み処理 */ /* 引数cはLCDにコマンドを書込むかデータ、但し上位4bitのみ有効 */ /*************************************************************************/ static void LcdWrite4( char c ) { LCD_E_HI; /*Ebitを立てる*/ LCD_E_HI; /*Ebitを立てる*/ LCD_DATA_OUT(c); /*データ書込み*/ LCD_DATA_OUT(c); /*データ書込み*/ LCD_E_LO; /*Ebitを下げると書き込まれる*/ } /*************************************************************************/ /* 4bit単位でのLCD読み込み処理 */ /*************************************************************************/ static char LcdRead4( void ) { char temp; LCD_DATA_DIR_IN; /*データバスを入力に変更*/ LCD_RS_LO; /*RSを下げる*/ LCD_RW_HI; /*RWbitを立てる*/ LCD_RW_HI; /*RWbitを立てる*/ LCD_E_HI; /*Ebitを立てる*/ LCD_E_HI; /*Ebitを立てる*/ temp = PF.PORT.BYTE & 0x0f; LCD_E_LO; /*Ebitを下げる*/ LCD_E_LO; /*Ebitを下げる*/ LCD_RW_LO; /*RWbitを下げる*/ LCD_DATA_DIR_OUT; /*データバスを出力に変更*/ return temp; } /*************************************************************************/ /* LCD書込み処理 */ /* 引数modeはLCDにコマンドを書込むか、データを書込むかを選択 */ /*************************************************************************/ static void LcdWrite( int mode, char c ) { /*データモードとコマンドモードの切り換え*/ if( mode == DATA_MODE ) LCD_RS_HI; else LCD_RS_LO; LcdWrite4( c >> 4 ); /*上位4bitを書き込む*/ LcdWrite4( c ); /*下位4bitを書き込む*/ // WaitMs( 1 ); /*1ms以上待つ*/ WaitBusyNegate(); } /*************************************************************************/ /* SC1602 BUSY確認処理 */ /* BUSY FLAGが落ちるまで待つ */ /*************************************************************************/ static void WaitBusyNegate( void ) { volatile char msb,lsb; while( 1 ) { msb = LcdRead4(); lsb = LcdRead4(); if( !(msb & 0x08) ) break; } } /*************************************************************************/ /* locate */ /* 画面表示位置設定処理 */ /*************************************************************************/ void LCD_Locate(int x,int y) { c_x = x; c_y = y; } /*************************************************************************/ /* refresh */ /* 画面更新処理 */ /*************************************************************************/ void LCD_Refresh( void ) { int i; /* DISPLAYCLEAR; */ CURSORHOME; LINE1; /*一行目の入力*/ for(i = 0; i < LCDBUFFERSIZE; i++) { switch ( i ) { case ROWSIZE : LINE2; break; /*二行目*/ default: break; } LcdWrite( DATA_MODE, LcdBuf[ i ] ); } } /*************************************************************************/ /* CLS */ /*************************************************************************/ void LCD_Cls( void ) { c_x = c_y = 0; memset( LcdBuf, ' ', sizeof(LcdBuf) ); } /*************************************************************************/ /* SC1602初期化 */ /* LCDを4bitバスモードに設定する */ /*************************************************************************/ void SC1602_Init( void ) { memset( LcdBuf, ' ', sizeof(LcdBuf) ); /*ポートの初期化が必要*/ PE.DDR = 0xc0; /*PEの6,7を出力に変更*/ PF.DDR = 0x1f; /*PFの0~4を出力に変更*/ PE.DR.BYTE &= 0x3f; /*始めは何でもLO出力*/ PF.DR.BYTE = 0x00; /*始めは何でもLO出力*/ LcdWrite4( 0x03 ); /*3を書くらしい*/ WaitMs( 5 ); /*4.1ms以上待つ*/ LcdWrite4( 0x03 ); /*3を書くらしい*/ WaitMs( 1 ); /*1ms以上待つ*/ LcdWrite4( 0x03 ); /*3を書くらしい*/ WaitMs( 1 ); /*1ms以上待つ*/ LcdWrite4( 0x02 ); /*2を書くらしい*/ /*初期設定*/ FUNCTIONSET; FUNCTIONSET; DISPLAYOFF; ENTRYMODESET; DISPLAYCLEAR; WaitMs( 1 ); /*待ち*/ CURSORHOME; WaitMs( 1 ); /*待ち*/ DISPLAYON; } /*************************************************************************/ /* main */ /*************************************************************************/ void main(void); #ifdef __cplusplus extern "C" { void abort(void); } #endif void main(void) { int i; const char msg[] = "モウスグDOSガ ウゴキソウデス"; const char msg2[] = "ソンナ ワケ ナイデスネ"; PM.DDR = 0x08; PM.DR.BIT.B3 = 0; SC1602_Init(); memcpy( LcdBuf, msg, sizeof(msg) - 1 ); LCD_Refresh(); for( ;; ) { WaitMs( 2000 ); /*待ち*/ LCD_Cls(); PM.DR.BIT.B3 ^= 1; memcpy( LcdBuf, msg, sizeof(msg) - 1 ); LCD_Refresh(); WaitMs( 2000 ); /*待ち*/ LCD_Cls(); PM.DR.BIT.B3 ^= 1; memcpy( LcdBuf, msg2, sizeof(msg2) - 1 ); LCD_Refresh(); } } #ifdef __cplusplus void abort(void) { } #endif /*********************************************************************************/ /* end of file */ /* designed by hamayan since 2009/05/21 */ /*********************************************************************************/
SuperHで学ぶμITRON仕様OS―リアルタイムOSの動作原理と実装法がわかる!
- 作者: 鹿取 祐二
- 出版社/メーカー: 電波新聞社
- 発売日: 2005/12
- メディア: 単行本
H8-SX基板 HEWからLEDチカチカをデバック [RX&SH&H8]
※今、キャラクタLCD(SC1602)のデバックやっているんですけれど、物凄く快適なんですが(笑)。
デバッカーのマニュアル通りにやれば問題無いかと思いますが、幾つかポイントがあるのも事実なので、その辺をちょっとだけ書いてみます。
判り難いのは制約上のROM、RAMの使い方です。
デバックモニタを使用せず、FLASH ROMに書き込んで動かす場合は、HEWのウイザードが作成したデフォルトのセクション設定であまり問題無いのですが、このデバックモニタで動かすユーザープログラムはRAM上に展開して動かす必要がありますので、ちょっとだけセクションの設定を変更する必要があります。
具体的には全てのセクションをRAMに配置するのですが、これはH8/SX 1655のマップに合わせた内容がマニュアルに掲載されていますので、その通りに配置してください。
LEDチカチカくらいの小さなプログラムなら、スタックセクション以外のセクションを全て0xFF2000から配置したって全然問題ありません。
以下はその0xFF2000に全部置いた場合の設定ファイルの内容なので、コピペして適当なファイル名で保存します。例えばram.hsiとか。
使い方は、ビルド→H8S,H8300H Standard Toolchain→最適化リンカTAB→カテゴリ:セクション→インポートでダイアログを開いて先のram.hsiを読み込みます。
同様にエクスポートもできますので、デバック用、ROM実行用と設定ファイルを作り分けると便利です。
従来のデバックモニタでは、割り込みやリセットベクターは仮想ベクター方式を取っていたので、ベクターテーブル自体もセクションの設定し直しが必要でしたが、このH8/SXでは一部のRAM領域をハードウエア的に0番地にマッピングするRAMエミュレーションを使用していますので、
__entry(vect=0) void PowerON_Reset(void)
とか、
__interrupt(vect=64) void INT_IRQ0(void)
のvect=??を解除する必要はありません。
あとはプログラムをロード後、適当にブレークを貼ったり、リセット後実行(Shift+F5)してみたり、ステップ(F10)してみたり、メモリダンプしたり、レジスタを参照したり、変数を確認したりと至って普通のソースレベルデバックが可能です。
デバッカーのマニュアル通りにやれば問題無いかと思いますが、幾つかポイントがあるのも事実なので、その辺をちょっとだけ書いてみます。
判り難いのは制約上のROM、RAMの使い方です。
デバックモニタを使用せず、FLASH ROMに書き込んで動かす場合は、HEWのウイザードが作成したデフォルトのセクション設定であまり問題無いのですが、このデバックモニタで動かすユーザープログラムはRAM上に展開して動かす必要がありますので、ちょっとだけセクションの設定を変更する必要があります。
具体的には全てのセクションをRAMに配置するのですが、これはH8/SX 1655のマップに合わせた内容がマニュアルに掲載されていますので、その通りに配置してください。
LEDチカチカくらいの小さなプログラムなら、スタックセクション以外のセクションを全て0xFF2000から配置したって全然問題ありません。
以下はその0xFF2000に全部置いた場合の設定ファイルの内容なので、コピペして適当なファイル名で保存します。例えばram.hsiとか。
[Hew Section Information] Version=2.0 Section overlay=No Entry=2 Address1=0x00FF2000 Section1=PResetPRG,PIntPRG,P,C,C$DSEC,C$BSEC,D,B,R Address2=0x00FFBE00 Section2=S
使い方は、ビルド→H8S,H8300H Standard Toolchain→最適化リンカTAB→カテゴリ:セクション→インポートでダイアログを開いて先のram.hsiを読み込みます。
同様にエクスポートもできますので、デバック用、ROM実行用と設定ファイルを作り分けると便利です。
従来のデバックモニタでは、割り込みやリセットベクターは仮想ベクター方式を取っていたので、ベクターテーブル自体もセクションの設定し直しが必要でしたが、このH8/SXでは一部のRAM領域をハードウエア的に0番地にマッピングするRAMエミュレーションを使用していますので、
__entry(vect=0) void PowerON_Reset(void)
とか、
__interrupt(vect=64) void INT_IRQ0(void)
のvect=??を解除する必要はありません。
あとはプログラムをロード後、適当にブレークを貼ったり、リセット後実行(Shift+F5)してみたり、ステップ(F10)してみたり、メモリダンプしたり、レジスタを参照したり、変数を確認したりと至って普通のソースレベルデバックが可能です。
void main(void) { volatile long i; PM.DDR = 0x08; while(1) { for( i = 0; i < 400000L; i++ ) ; PM.DR.BIT.B3 ^= 1; } }
H8-SX基板 ええ勿論HEWからデバック出来ちゃいます。 [RX&SH&H8]
できます。まずは付録CD-ROMの”CQ\H8SX_1655\Renesas\モニタプログラム”の自動解凍プログラムを開いてください。
マニュアルのhtmlファイルが開きますので、これを読みながら作業を進めてください。
簡単に手順を書けば、
1.HEWにDLL(ツールチェイン)の追加
2.モニタープログラムをH8-SXへダウンロード
3.USBデバイスとしてH8-SXを登録
4.HEW上のデバックに関する設定
5.HEWとH8-SXとの接続
6.IOファイルの読み込み
7.使う上での幾つかの制約
と言う事になります。
旧タイプのデバックモニタをお使いの方なら判ると思いますが、このデバックモニタもRAM上にユーザープログラムを展開する事となります。
※一部CPUリソースをこのデバッカーで使用しますので、それに関しての制約が有ります。
※原因は不明ですが家のUSB1.1なパソコンでは上手く出来なかったので、まあ少なくともUSBは2.0以上でやってください。
※つまりここまでだーたーで開発ができます(笑)。
マニュアルのhtmlファイルが開きますので、これを読みながら作業を進めてください。
簡単に手順を書けば、
1.HEWにDLL(ツールチェイン)の追加
2.モニタープログラムをH8-SXへダウンロード
3.USBデバイスとしてH8-SXを登録
4.HEW上のデバックに関する設定
5.HEWとH8-SXとの接続
6.IOファイルの読み込み
7.使う上での幾つかの制約
と言う事になります。
旧タイプのデバックモニタをお使いの方なら判ると思いますが、このデバックモニタもRAM上にユーザープログラムを展開する事となります。
※一部CPUリソースをこのデバッカーで使用しますので、それに関しての制約が有ります。
※原因は不明ですが家のUSB1.1なパソコンでは上手く出来なかったので、まあ少なくともUSBは2.0以上でやってください。
※つまりここまでだーたーで開発ができます(笑)。
今すぐ使える!H8マイコン基板 2010年 04月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2010/02/25
- メディア: 雑誌
H8-SX基板 HEWから操作できるデバックモニタが有るみたい。 [RX&SH&H8]
※図はモニタープログラムをダウンロード後、ドライバーをインストールしてシリアルポートとして認識されたところ。
CD ROMのコンテンツの中にモニタープログラムってフォルダーが有って、この中にある自己解凍ファイルを開くとモニタープログラムとUSBドライバー、それにマニュアルのhtmlファイルが解凍されます。
どうやらHEWから操作できるデバックモニターの様です。嬉しい。
htmlファイルには署名がありませんが、このドキュメントって従来のデバックモニタのドキュメントそっくりな構成で(笑)。Kさん作ってくれていたんですね。
多分SH-2Aも同様な方法でHEWからのデバックができると思われます。USB経由のデバックモニターを作って提供したと言っていましたから。
※おおぅ!、HEWから接続できちゃったよ。あとは使い方だな。
CD ROMのコンテンツの中にモニタープログラムってフォルダーが有って、この中にある自己解凍ファイルを開くとモニタープログラムとUSBドライバー、それにマニュアルのhtmlファイルが解凍されます。
どうやらHEWから操作できるデバックモニターの様です。嬉しい。
htmlファイルには署名がありませんが、このドキュメントって従来のデバックモニタのドキュメントそっくりな構成で(笑)。Kさん作ってくれていたんですね。
多分SH-2Aも同様な方法でHEWからのデバックができると思われます。USB経由のデバックモニターを作って提供したと言っていましたから。
※おおぅ!、HEWから接続できちゃったよ。あとは使い方だな。
;-------------------------------------------------------- ; Renesas Technology Corp ; USB Serial Ports Driver ; for Windows2000 and WindowsXP ; 29 September 2003 ;--------------------------------------------------------
今すぐ使える!H8マイコン基板 2010年 04月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2010/02/25
- メディア: 雑誌
H8-SX基板 [RX&SH&H8]
よし、ジャンパーは付けた。FDTver4.03でもUSBドライバーはインストールされた。
確認用のLEDチカチカも動いた。
次はHOSか?。
確認用のLEDチカチカも動いた。
次はHOSか?。
今すぐ使える!H8マイコン基板 2010年 04月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2010/02/25
- メディア: 雑誌
某誌付録基板に搭載されているマイコン(SH-2A)の型番予想 [RX&SH&H8]
※基板設計と記事は来栖川さんがやってくれる事を激しく希望。
きっとこれでしょうね。
http://japan.renesas.com/fmwk.jsp?cnt=sh7262_root.jsp&fp=/products/mpumcu/superh_family/sh7260_series/sh7262_group/
予習でもしておきますか。
きっとこれでしょうね。
http://japan.renesas.com/fmwk.jsp?cnt=sh7262_root.jsp&fp=/products/mpumcu/superh_family/sh7260_series/sh7262_group/
予習でもしておきますか。
SuperHで学ぶμITRON仕様OS―リアルタイムOSの動作原理と実装法がわかる!
- 作者: 鹿取 祐二
- 出版社/メーカー: 電波新聞社
- 発売日: 2005/12
- メディア: 単行本
書籍「今すぐ使える!H8マイコン基板」のH8SXのHOSカーネルライブラリ構築 [RX&SH&H8]
実はSXはH8/300の上位互換性があるので、HOSの300H用のカーネルをSX用としてコンパイルできないかとやってみたら、一応カーネルのビルドは完了している模様です。
とカーネルのビルドを始める前に、hosdenv.hに修正が要ります。
このファイルはコンパイル時の暗黙の環境変数を見てhospac.hの在り処を示しているのですが、SXの環境変数の記述は無いので、これを追加する必要が有ります。
ですが、
#elif defined(__H8SXA__) /* ルネサス H8SX コンパイラ */
#include "h83/hospac.h"
と書いちゃっても上手く在り処を指定できないみたいなので困りました。
まあ、
#include "h83/hospac.h"
を意地でも有効にしてしまえば良いだけの話なので、強制的にカーネルビルドを完了させる事は可能です。
とカーネルのビルドを始める前に、hosdenv.hに修正が要ります。
このファイルはコンパイル時の暗黙の環境変数を見てhospac.hの在り処を示しているのですが、SXの環境変数の記述は無いので、これを追加する必要が有ります。
ですが、
#elif defined(__H8SXA__) /* ルネサス H8SX コンパイラ */
#include "h83/hospac.h"
と書いちゃっても上手く在り処を指定できないみたいなので困りました。
まあ、
#include "h83/hospac.h"
を意地でも有効にしてしまえば良いだけの話なので、強制的にカーネルビルドを完了させる事は可能です。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本