• 締切済み

Insightでデバックする際にSIGBUSでエラーになりデバックが進みません

初めて質問します。 マイコン初心者です。 現在、GCC Developer Liteを使用してSH7144の勉強をしているのですが、付属のデバッカのInsight(GDB6.1)でデバックしようとすると、"Program received signal SIGBUS, Bus error"というエラーが出てデバックが進まなく困っています。コンパイルしたソースを実機で動かすと動いている為、コンパイルの方法が悪いのか、Insightが悪いのかわからない状態です。 下記にソースファイルを示します。 #include <7144.h> void initIO(void) { PFC.PEIORL.WORD = 0x0003; } void wait(void) { long int t=1000000; while(t--); } void main(void) { initIO(); while(1) {  PE.DRL.BIT.B0 = 1;  wait();  PE.DRL.BIT.B0 = 0;  wait();  PE.DRL.BIT.B1 = 1;  wait();  PE.DRL.BIT.B1 = 0;  wait(); } } プログラムはマイコンに接続したLEDを点滅させるプログラムです。 GCC Developer Liteでのコンパイルオプションはデフォルト、マイコンは"SH7144F 内蔵フラッシュROM"を選択しています。 御教授の程よろしくお願いいたします。

みんなの回答

  • anzu-k
  • ベストアンサー率66% (2/3)
回答No.1

GCC Developer Liteを使用してことがないので、 何ともいえないのですが、誰も回答がないのでちょっとだけ…。 >コンパイルの方法が悪いのか、Insightが悪いのかわからない状態です。 このエラーは上記のコードとは関係ないと思います。 つまりInsightやGDB当りに何かあるかも知れません。 インストールや使用環境 (OSやライブラリ、ツール類のバージョン等々とその組み合わせ) に問題があるかも知れません。 内蔵フラッシュを使用しているようですが、きっとシリアルポートを 使用してのデバッグになっていると思います。 最近のパソコンはシリアルポートがなくなりつつあるので、 もしかするとUSBシリアル変換器を使っているかも知れませんが、 そのドライバ回りにも問題があるかも…。 それから余談ですが、 モニタプログラムなしで内蔵フラッシュに書き込んでデバッグする場合、 シリアル通信の割り込みハンドラを用意する必要があるかもしれません。

maa_teru
質問者

補足

貴重なアドバイスありがとうございます。 今回の問題なのですが、ターゲットをSimulatorに設定してファイルをrunとすると起こっています。この為、実機でのリモートデバックの手前でつまづいてしまい、デバッカ無しでプログラムを作っている状況です。LEDを点滅させる程度なら問題ならデバッカ無しでも特に問題はないのですが、最近I2C通信に手を出し始めているので、デバッカ無しは非常に苦しい状況になってきました。 一度、GCC Developer Liteごと再インストールしてみようと思います また、何か情報がありましたら、よろしくお願いいたします。

関連するQ&A

  • SH7144のMTU割り込みについて

    マイコン初心者です。 現在SH7144の勉強を行っているのですが、MTUによる割り込みが上手くできずに困っています。 開発環境はGCC Developer Liteになります。 下記にソースを示します。 #include<7144.h> void initIO(void) { PFC.PECRL2.WORD = 0x0000; //ポートEの7~0を入出力に設定 PFC.PEIORL.WORD = 0xffff; //ポートEの15~0を出力に設定 } void initMTU(void) { MST.CR2.BIT._MTU = 0; //MTUモジュールスタンバイの解除 MTU0.TSR.BIT.TGFA = 0; //TGFAフラグクリア MTU0.TCR.BYTE = 0x22; //TGRAのコンペアマッチでクリア //PΦ/16でカウント=1562.5kHz MTU0.TMDR.BYTE = 0xC0; //TGRA通常動作 MTU0.TIER.BYTE = 0x41; //MTU0のTGIEAコンペアマッチで割り込み MTU0.TGRA = 1562; //パルス周期設定(1562.5kHz/出力周波数1kHz=1562回) INTC.IPRD.BIT._MTU0G = 15; //割り込み要因MTU0のTGIプライオリティ15 MTU.TSTR.BIT.CST0 = 1; //MTUカウンタ動作開始 } void int_tgi0a(void) { static int d = 1; MTU0.TSR.BIT.TGFA = 0; //TGFAフラグクリア PE.DRL.BIT.B0 = d; //PE0に出力 d = ~d; //dの値を反転 } void main(void) { initIO(); initMTU(); while(1); } プログラムはMTU0のTGIEAコンペアマッチで割り込み、PE0の出力を反転する動作を考えて書きました。 ご教授の程をお願い致します。

  • 日立マイコンのSH2で、sinやcosを使いたいのですが・・・

    SH2で、sinやcosを使いたいのですが、math.hをインクルードしてもコンパイルエラーが出てしまいます。ライブラリの設定がよくないと思うのですが、設定のしかたがわかりません。使っているコンパイルソフトは、GCC Developer Liteという、フリーのコンパイラーです。お願いします。

  • LCDモニターの駆動

    SH7144Fマイコンを用いて秋月のLCDモニターSC1602BSの駆動を試みています。 以下のようなソースを用意したのですが、文字化けが発生し、20回くらいリセットをかけるとうまく表示されるようになります。 結線方法はBFチェックなしの4BITです。 #include "7144.h" #define E_SIG 0x20 #define RS_SIG 0x10 void wait(void) { int t = 20000; while(t--); } void waits(void) { int ts = 800; while(ts--); } void lcdo(unsigned char d) { d=d | E_SIG; PE.DRL.BYTE.L = d; d = d & 0xdf; PE.DRL.BYTE.L = d; waits(); } void lcdinit(void) { lcdo(3); lcdo(3); lcdo(3); lcdo(2); lcdo(2); lcdo(8); lcdo(0); lcdo(0x0c); lcdo0); lcdo(6); } void lcdclr(void) { PE.DRL.BYTE.L = 0; lcdo(0); lcdo(1); wait(); } void lcdxy(int y,int x) { PE.DRL.BYTE.L = 0; lcdo(y); lcdo(x); waits(); } void lcdo2(unsigned char d) { unsigned dd; dd = d; d = d >> 4; d = d & 0x0f; d = d | RS_SIG; lcdo(d); waits(); dd = dd & 0x0f; dd = dd | RS_SIG; lcdo(dd); waits(); } void dsp1g(int c,char *str) { int i; for(i = 1;i <= c;i++) { lcdo2(*str); str++; } } void initLCD(void) { wait(); lcdinit(); waits(); lcdclr(); } void main() { PFC.PEIORL.BYTE.L = 0xff; wait(); lcdinit(); waits(); lcdclr(); lcdxy(8,0); lcdxy(8,2); dsp1g(5,"HELLO"); waits(); lcdxy(0x0c,2); dsp1g(5,"WORLD"); while(1); } 上記ソースに含まれる間違いや改善点がありましたらどうかご教授ください。

  • H8マイコンでの割り込み(シリアルポート入力で)

    マイコン:AKI H8/3048F 開発環境:GCC Developer Lite マイコンとパソコンをRS-232Cケーブルでつないでいます。 ハイパーターミナルを使用して、マイコンを制御したいと考えております。 それで、パソコンのキーボードから入力があった時だけ、割り込みを実行したいです。 割り込みが無い場合は、パソコンでマイコンを制御することができたのですが、割り込みを追加したら、うまくいかなくなりました。 アセンブラを使用せずに、C言語だけでプログラムを完成させたいと思っています。 SCI1からの割り込み処理をするには、どの様にしたらよいのでしょうか? どうか、お願いいたします。

  • SH7144のレジスタのポインタに関して

    マイコン初心者です。 現在GCC(GCC Developer Lite)を使用して、SH7144の勉強をしています。 A/Dコンバーターを使用する際に、分らないことがあるため質問いたします。 たとえばAD0のADDR0~3から値を読み出す際に、 int data[2]; という変数を作っておき、 for(i=0; i < 3; i++){ data[i] = AD0.ADDR(0~3).WORD; } という風にdata[]へ値を入れるためには、AD0.ADDR(0~3).WORDの所をどのように指定すればよいのでしょうか。 ご教授願います。

  • GDLの設定

    H8/3052を使ってモーターの簡単な制御プログラムを書いてみたのですが、BestTechnology社のGCC Developer Liteを用いてコンパイルしたところ ld:cannot find -lm というエラーが出て困っております。 エラーの意味もいまいちつかめず(自分なりの解釈ではmファイルが見つからず読み込めない?) 解決策を知っている方がいれば教えてください。 ちなみに、OSはWindows Vista Home Premiumです。 よろしくお願いします。

  • AKI-H8/3048Fでのタイマ割り込み

    秋月電子で http://akizukidenshi.com/catalog/items2.php?p=1&q="K-00004" を買いマイコンの勉強をしています。 コンパイル等はGCC Developer Lite、モニタプログラムを使いRAM上で 動作確認をしています。 タイマによる割り込みをしたいと思い、参考書のプログラムを参考に マザーボード上の2つのLEDが交互に光るようにしたいのですが、 肝心のint_imaia0()が全く実行されていません。 #include <3048.h> int c; void int_imia0( void ) { ITU0.TSR.BIT.IMFA = 0; c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } } int main( void ) { c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; EI; while( 1 ){ } } また、割り込みを使わない方法ということで #include <3048.h> int main( void ) { int c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; while( 1 ){ while( !ITU0.TSR.BIT.IMFA ); c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } ITU0.TSR.BIT.IMFA = 0; } } を試したのですが、こちらはLEDが交互に点滅して成功しています。 なのでタイマ自体は動作していると思うのでですが、上のプログラムだと int_imaia0()動作しません。 何がいけないのでしょうか?よろしくお願いします。

  • H8SX/1655のタイマー割り込みについて教えてください。

    H8SX/1655のタイマー割り込みについて教えてください。 CQ出版の『今すぐ使える!H8マイコン基板』の基板の動作確認として、 基板上のLEDをタイマー割り込みで点滅させようとしたのですが動作しません。 HEWの設定上の問題と思いますが、思い当たるところがあれば教えてください。 HEW:Version 4.06.00.047 "iodefine.h"は自動生成されたものです。 ---HEWのコード #include <machine.h> #include "iodefine.h" unsigned long cnt0; // wait関数用 //割込み関数 #pragma interrupt( int_timer0 ) void int_timer0( void ) { TPU0.TSR.BIT.TGFA= 0; // フラグクリア cnt0++; } void wait( unsigned long wait_set ) { cnt0 = 0; while( cnt0 < wait_set ); } void main(void) { MSTP.CRA.BIT._TPUL =0; // 低消費電力モード解除 //タイマー設定 TPU0.TCR.BYTE = 0x23; //φ/64 TPU0.TIER.BIT.TGIEA = 1; TPU0.TGRA = 375; // 1/375 TPU.TSTR.BYTE = 0x01; // Timer Start //ポート設定 PM.DDR = 0x08; // LED Output port //割り込み許可 set_imask_ccr(0); while(1) { wait( 500 ); PM.DR.BIT.B3 = 1; wait( 500 ); PM.DR.BIT.B3 = 0; } } //intprg.c // vector 88 TGI0A TPU0 //__interrupt(vect=88) void INT_TGI0A_TPU0(void){/* sleep(); */} __interrupt(vect=88) void INT_TGI0A_TPU0(void){int_timer0(); }

  • H8/3052F/IRQを使った割り込み

    こんにちは。 H8/3052F C言語でプログラミングしています。 H8をはじめて約半年がたった者です。 ITUを使ったサーボ制御やAD変換など、いろいろ勉強してきました。 しかしながらまだまだ未熟な者です。 今回割り込みに挑戦しています。 IRQ0を使いスイッチ入力があるとLED点滅パターン変更のプログラムに成功し、ITUと組み合わせてサーボを割り込みで制御できるまで勉強、実験していました。 最終的に成功し、しばらく動かしていたのですが、割り込みがきかなくなってしまいました。 IRQ0が駄目なのか?と仮定してIRQ1でプログラミングし、試したところ無事割り込みできました。 しかしIRQ1も割り込みが急にできなくなってしまいました。 書き込みし直しても直りません。 回路として、本などを参考にIRQ0のポート→マイクロスイッチ→GND という形で接続しています。 もしかしたらIRQ0の時はスイッチがB接点でしばらく繋がったままだったかもしれません。 また、この回路だと動作も少し不安定?なようです。 上記の回路で間違いはありませんか? 一応プログラムを載せておきます。 もし間違いがあったらお願いします。 #include <3048.h> void wait (void) { long t=200000; while (t--); } void int_irq0(void) { int c=3; INTC.ISR.BIT.IRQ0F = 0 while(c--){ P5.DR.BYTE = 0x5; wait(); P5.DR.BYTE = 0xa; wait(); INTC.ISR.BIT.IRQ0F = 0; } } int main(void) { DI; INTC.ISCR.BIT.IRQ0SC = 0; INTC.IER.BIT.IRQ0E = 1; P5.DDR = 0xff; EI; while (1) { P5.DR.BYTE = 0xff; //点灯 wait (); //待ち P5.DR.BYTE = 0; //消灯 wait(); //待ち } } 以上よろしくお願いします。

  • デバックができない C#

    visual studio2010で簡易な電卓を作成しているのですが、 デバックができません。 ちなみに下記のようなプログラムです。 ※文字数の制限から、関係する部分のみピックアップしてます。 ラジオボタンがクリックされた際に足し算を行うプログラムです。 public float Add( string i,string j) //変数Addに足し算の結果を返す { return float.Parse(i) + float.Parse(j); //変数i,jをfloat型に変換して、足し算を行う } public void radioButton1_CheckedChanged(object sender, EventArgs e) { if (radioButton1.Checked) { string a = value1.Text; string b = value2.Text; anslabel1.Text = Add(a,b).ToString(); //データ型から文字列型への変換 } もし誤りがありましたら、指摘して頂けますと幸いです。

専門家に質問してみよう