皆々様、質問への御回答ありがとうございます。質問したらすぐに回答が頂け、
びっくりしてます。
新井様ありがとうございます
>(1)パワーオン後に熊谷研のHPにある様に単に_mainにジャンプしてませんか?
>(2)広域変数は、初期値を設定していませんか?
(1)割り込みベクタの設定以外はあまりなにもしてません。
(2)設定してるものもあればしていないものもあります。
しかし、すべてのプログラム?をRAMに書き込んで組み込みモニタ上でうごかしてい
るので問題なく動くと思ってました。
Osamu Imaizumi様ありがとうございます
>なにがどう駄目なのか全然分かりませんし、熊谷研のHPは知りませんが、単に初期
>化されてないだけでは?
>ライブラリには変数の初期化コードが含まれていてこれを呼べばセグメントの割付
>さえちゃんとしておけばなんの問題も無>いはずです。
>私が昔、普通のOS上のCのように扱いたいという人用にquickhackしたcstartという
>スタートアップルーチン/ライブラリが
>うちのn2i105h8.zipにおまけで入ってますので参考にしてください。
説明不足ですみません。以下問題のプログラムの一部を記入してみました。
char data; /* 入力データ格納変数 */
char data2; /* 入力データ格納変数2 */
void main(void)
{
init_mother_system(); /* LCDユニットの初期化 */
ioinit(); /* 各IOの初期化 */
clrscr();
gotoxy(0,0);
lcdprints("kinki sumou fan!");
while(1){
data = (P4.DR.BYTE | 0x0f); ←ここでスイッチの状態を読み込み、その
状態により決められたサブプロに飛ぶ
switch ( data ){
case ~(0x10): Up(); break; ←ここで~(0x10)を0xefに変えてみると
動かない
case ~(0x20): Down(); break; ←ここで~(0x20)を0xdfに変えてみると動
かない
case ~(0x40): Set(); break; ←ここで~(0x40)を0xbfに変えてみると動
かない
case 0x7f: Go(); break; ←ここで0x7f~(0x80)をに変えてみると
動かない
default: ani(); break;
}
こんな感じです。
私、マイコンのプログラムを始めたばかりで「初期化コード」「セグメント」の意味
が解りません。
n2i105h8.zip頂きました。早速見させて頂きます。
くぬぎざ様ありがとうございます
>わたしは、基本的にスタートアップルーチン内でROMからRAMに広域変数の初期値を
>コピーし、あるいはゼロ化することに>しているのですが、プログラムで明示的に
初
>期化した方が好ましい理由があるのでしょうか(興味本位です)。
単に私、素人なのでアセンブラはできることなら触りたくないのです。
スタートアップルーチンは素人にはつらいものがあると思います。
C言語しか知らない人でもH8マイコンが使えるものになって欲しいものです。
Osamu Imaizumi様、再度ありがとうございます
>もともと秋月が碌な説明を付けてないのがいけないのですが..
>これだけではOS上のCしか使ったことが無くCの記憶クラスをあまり
>意識したことのない人にちゃんと動くものを書けと言っても無理です。
>秋月のCコンパイラの大域変数(広域変数って??最近はglobalクラス
>をこう呼ぶんですが?)の扱いにはどこにもおかしなところはありませ
>ん。ちゃんとしたstartupルーチンとリンクコマンドファイルがあれば
>OS上のものと同じに扱えます。もちろんアセンブラの必要はありません。
って言うことは秋月のCコンパイラーはおかしくないのですね。自分のミスをソフト
のせいにしてました。すみません…
しかしH8を使いこなすには、H8のRAMの割付けなど細かいところまで熟知しないとい
けないのかなあ?
ところでところで、皆様方に質問があります。H8を使い始めてどのくらいになるので
しょうか?
ちなみにわたしは社会人なので土日のみでまだ3ヶ月ほどです。
学生のときはZ80でコンパイラはLSIC80でした。
やっぱり皆様方もインターネットで情報を集められて勉強されてるのでしょうか?
努力がまだまだ足りないのかな〜と思ったり…
苦戦中の三上でした。