HEWを使用して新規プロジェクトでアプリを作成する方法を後の自分の為にまとめます。この辺は本誌で解説が有っても良いような気がします(私がHEWの使い方を知らないだけで、一般常識なのかな〜〜)。
本来はマニュアルを読むべきなのでしょうが、いい加減なアマチュアなので手っ取り早くWebで調べました。結果、またしてもWhite Cloudsさんのお世話になってしまいました。感謝 m(_ _)m。
本来はマニュアルを読むべきなのでしょうが、いい加減なアマチュアなので手っ取り早くWebで調べました。結果、またしてもWhite Cloudsさんのお世話になってしまいました。感謝 m(_ _)m。
上手くいきませんでした。引き続き調査中です
演習問題の最初は「Hello World!」が相場なのでまずは、挑戦です。LCDに表示出来れば格好良いのですが、そこまでの実力が無いのでSCIF2経由でTera Termに表示させます。ただ、シリアルのRAW/LOWレベルでのIOではアプリぽくないのでprintf()で出力します
演習問題の最初は「Hello World!」が相場なのでまずは、挑戦です。LCDに表示出来れば格好良いのですが、そこまでの実力が無いのでSCIF2経由でTera Termに表示させます。ただ、シリアルのRAW/LOWレベルでのIOではアプリぽくないのでprintf()で出力します
Cは読めるのですが、書くのはちょっと・・、"&"、"*"、"構造体"が出てくると何だっけというレベルです。C++に至ってはチンプンカンプンです。printf()の使い方は8月号P52 Appendix1『printf の「超」簡単な実装方法』に載っています。「超」簡単なら私にも出来ると思ったのですが、あに図らんや「超」苦労したので書くことにしました。同じ様な特集が続くので本来書くべき内容が疎かにされ、記事の焼き直しで済ましているのかなーーっと勘ぐってしまいます
試行しながら載せますので、正確さを欠いているかも知れません。し、これ以外にも色々なやり方があると思います
HEWを立ち上げ、「新規プロジェクトワーク・・」を選択します
プロジェクトタイプ:Applicationを選択してワークスペース名を任意に入力します
CPUシリーズでSH2A-FPU、CPUタイプでSH72620を選択します
特に変更する必要はありませんが、浮動小数点演算モードがMixのままだと、割り込みなどの場合にモード退避・回復が必要になるようなのでDouble決めうちを選びました
I/Oライブラリ使用をチェックしてI/Oストリーム数は3にします
「Hello World!」の表示だけなら変更する必要はありません。必要なライブラリをチェックします
RAM領域の最後のアドレスを指定しました(が、変更しなくても良いようです)
「ベクタテーブル定義」のチェックを入れます
シミュレータは使用しないので変更不要です
「完了」ボタンを押下します
「OK」ボタンを押下します
「ビルド」「SuperH RISC engine・・・」を選択します
「コンパイラ」「アセンブラ」タブは変更不要です(リストの出力制御などはお好みで)
「最適化リンカ」タブでカテゴリで「出力」を選択
出力形式で「バイナリ(ELF/DWARFアブソリュート付き」を選択
カテゴリの「セクション」を選択
Sectionで「DVECTTBL,DINTTBL」をクリックして「変更」ボタン押下、「Modify section」ダイアログでアドレスを変更します。SectionをWクリックしてもダイアログが表示されます
同様にして以下の表の様にアドレスを指定します(あくまでも例ですが、実装メモリの範囲に配置する必要があります)
上表の通り、アドレスを変更すると、このようになります
後で、ビルドして「表示」「マップ」を行うと実際の使用メモリマップが表示されます
上記でプロジェクトの外観が出来ました。本誌では「常識」としてIOストリームの箇所以外に説明がありません
HEWを立ち上げ、「新規プロジェクトワーク・・」を選択します
プロジェクトタイプ:Applicationを選択してワークスペース名を任意に入力します
CPUシリーズでSH2A-FPU、CPUタイプでSH72620を選択します
特に変更する必要はありませんが、浮動小数点演算モードがMixのままだと、割り込みなどの場合にモード退避・回復が必要になるようなのでDouble決めうちを選びました
I/Oライブラリ使用をチェックしてI/Oストリーム数は3にします
「Hello World!」の表示だけなら変更する必要はありません。必要なライブラリをチェックします
RAM領域の最後のアドレスを指定しました(が、変更しなくても良いようです)
「ベクタテーブル定義」のチェックを入れます
シミュレータは使用しないので変更不要です
「完了」ボタンを押下します
「OK」ボタンを押下します
「ビルド」「SuperH RISC engine・・・」を選択します
「コンパイラ」「アセンブラ」タブは変更不要です(リストの出力制御などはお好みで)
「最適化リンカ」タブでカテゴリで「出力」を選択
出力形式で「バイナリ(ELF/DWARFアブソリュート付き」を選択
カテゴリの「セクション」を選択
Sectionで「DVECTTBL,DINTTBL」をクリックして「変更」ボタン押下、「Modify section」ダイアログでアドレスを変更します。SectionをWクリックしてもダイアログが表示されます
同様にして以下の表の様にアドレスを指定します(あくまでも例ですが、実装メモリの範囲に配置する必要があります)
セクション | アドレス | 内 容 |
DVECTTBL,DINTTBL | 1C000000 | ベクタテーブル |
PResetPRG,PIntPRG | 1C000500 | リセット(main()呼出)、割込エントリ |
P,C,C$BSEC,C$DSEC,D | 1C001000 | プログラム、定数域、変数域 |
S | 1C0FFC00 | スタック域 |
B,R | 1C061000 | グローバル変数域 |
上表の通り、アドレスを変更すると、このようになります
後で、ビルドして「表示」「マップ」を行うと実際の使用メモリマップが表示されます
上記でプロジェクトの外観が出来ました。本誌では「常識」としてIOストリームの箇所以外に説明がありません
やっと、やっとソースの修正です
自動生成されたlowレベルIOソースは削除します
おっと、結局このダイアログで削除するようです
TinyMonの空送信でHelp表示は我慢ならなかったので修正しました
自動生成されたlowレベルIOソースは削除します
おっと、結局このダイアログで削除するようです
/***********************************************************************/ /* */ /* FILE :Hello.c */ /* DATE :Thu, Jul 08, 2010 */ /* DESCRIPTION :Main Program */ /* CPU TYPE :SH72620 */ /* */ /* This file is generated by Renesas Project Generator (Ver.4.16). */ /* */ /***********************************************************************/ #include <stdio.h> #include <math.h> #include "iodefine.h" //#include "typedefine.h" #ifdef __cplusplus //#include <ios> // Remove the comment when you use ios //_SINT ios_base::Init::init_cnt; // Remove the comment when you use ios #endif void main(void); #ifdef __cplusplus extern "C" { void abort(void); } #endif void charput(char c) { if( c == '\n' ) { while( SCIF2.SCFSR.BIT.TEND == 0 ){ ; } SCIF2.SCFTDR.BYTE = 0x0d; SCIF2.SCFSR.BIT.TEND = 0; while( SCIF2.SCFSR.BIT.TEND == 0 ){ ; } SCIF2.SCFTDR.BYTE = 0x0a; SCIF2.SCFSR.BIT.TEND = 0; } else { while( SCIF2.SCFSR.BIT.TEND == 0 ){ ; } SCIF2.SCFTDR.BYTE = c; SCIF2.SCFSR.BIT.TEND = 0; } } char charget(void) { return 0; } /*---------------------------------------*/ /* Initialize SCIF ch2 */ /*---------------------------------------*/ scif2_init () { short sts; int i; /* Initialize SCIF2 */ /* Attach SCIF2 unit (TxD2/RxD2) to I/O pad */ PORT.PFCR0.WORD = (PORT.PFCR0.WORD & 0xF00F) | 0x0440; CPG.STBCR4.BIT.MSTP45 = 0; /* Enable SCIF2 power */ SCIF2.SCSCR.WORD = 0x0000; /* Stop SCIF2 */ SCIF2.SCFCR.WORD = 0x0006; /* Clear Tx/Rx FIFO */ sts = SCIF2.SCFSR.WORD; /* 受信ステータス空読み */ SCIF2.SCFSR.WORD = 0x0000; /* 受信ステータスクリア */ SCIF2.SCSMR.WORD = 0x0000; /* Data format (N81) */ SCIF2.SCEMR.WORD = 0x0081; /* BGDM=1(倍速モード) ABCS=1(bpsの8倍) */ SCIF2.SCBRR.BYTE = 25; /* 分周設定 */ SCIF2.SCFCR.WORD = 0x0000; /* TREG:8bytes RTRG:1bytes */ SCIF2.SCSCR.WORD = 0x0030; /* Start SCIF2 (Set TE,RE) */ for (i=0;i<1000000;i++) ; } void main(void) { int i, j; double d; scif2_init(); printf("HHello World!!\n"); printf("Welcome to a SH-2a\n"); printf("\n n sin( n ) cos( n ) sqrt( n )\n"); for (i=0; i<32; i++) { d = (double)i * 3.14159265358979323846264338327950288 / 180.0; printf("%6d %18.14f %18.14f %18.14f\n",i, sin( d ), cos( d ), sqrt( (double)i )); } }本誌を参考にHello.cを作成します。lowlvl.srcの代わりのcharput()とcharget()もHello.cに入れてしまいました
Tiny Dump Monitor >? >RB|RW|RL address ... memory read >WB|WW|WL address writedata ... memory write >DB|DW|DL address ... memory dump >FB|FW|FL address bytes filldata ... memory fill >CB|CW|CL address1 address2 bytes ... memory copy >UB address ... user program download & go > > > >ub Binaryimage download start! Download address = 1C000000h Binaryimage download start! ...................................................................................... Download program size : 5574h Jump address = 1C000500h Download program start!! ;HHello World!! Welcome to a SH-2a n sin( n ) cos( n ) sqrt( n ) 0 0.00000000000000 1.00000000000000 0.00000000000000 1 0.01745240643728 0.99984769515639 1.00000000000000 2 0.03489949670250 0.99939082701910 1.41421356237309 3 0.05233595624294 0.99862953475457 1.73205080756888 4 0.06975647374413 0.99756405025982 2.00000000000000 5 0.08715574274766 0.99619469809175 2.23606797749979 6 0.10452846326765 0.99452189536827 2.44948974278318 7 0.12186934340515 0.99254615164132 2.64575131106459 8 0.13917310096007 0.99026806874157 2.82842712474619 9 0.15643446504023 0.98768834059514 3.00000000000000 10 0.17364817766693 0.98480775301221 3.16227766016838 11 0.19080899537654 0.98162718344766 3.31662479035540 12 0.20791169081776 0.97814760073381 3.46410161513775 13 0.22495105434386 0.97437006478524 3.60555127546399 14 0.24192189559967 0.97029572627600 3.74165738677394 15 0.25881904510252 0.96592582628907 3.87298334620742 16 0.27563735581700 0.96126169593832 4.00000000000000 17 0.29237170472274 0.95630475596304 4.12310562561766 18 0.30901699437495 0.95105651629515 4.24264068711928 19 0.32556815445716 0.94551857559932 4.35889894354067 20 0.34202014332567 0.93969262078591 4.47213595499958 21 0.35836794954530 0.93358042649720 4.58257569495584 22 0.37460659341591 0.92718385456679 4.69041575982343 23 0.39073112848927 0.92050485345244 4.79583152331272 24 0.40673664307580 0.91354545764260 4.89897948556636 25 0.42261826174070 0.90630778703665 5.00000000000000 26 0.43837114678908 0.89879404629917 5.09901951359278 27 0.45399049973955 0.89100652418837 5.19615242270663 28 0.46947156278589 0.88294759285893 5.29150262212918 29 0.48480962024634 0.87461970713940 5.38516480713450 30 0.50000000000000 0.86602540378444 5.47722557505166 31 0.51503807491005 0.85716730070211 5.56776436283002実行結果です。なぜか分からないのですが、最初の文字(空白以外の文字)が化けてしまいます
TinyMonの空送信でHelp表示は我慢ならなかったので修正しました
コメントをかく