• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マイコンソフトビルド異常修正方法を教えてください。)

マイコンソフトビルド異常修正方法

このQ&Aのポイント
  • マイコンソフトビルド異常を修正する方法について教えてください。
  • マイコンソフトビルド異常の修正方法を教えてください。
  • マイコンソフトビルド時の異常を修正する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

既に指摘されているとおりではあるんですが…… >if {(tm2!=100) return (0);} >else (tm2==100) >if {(kk>=5) return (0);} こんな記述でもエラーにならないもんなんですかねぇ……。 # 先行するエラーで解釈されていない…という可能性もありますが。 1ヶ月半近くハマりっぱなしのようですが、C言語の基礎からやり直した方がいいでしょう。 # 急がば回れってことわざもありますし。 仕事なんだからそんな時間なんかない!とか言うのでしたら、上長に掛け合いましょう。 >#include <avr\io.h> 指摘受けていて、ベストアンサーにまでしたのに無視というのはいかがなものかと。 突っ込んだところで無視されるんでしょうが。 # さすがにお礼率0%では本当に読んでいるのかどうか……。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8536/19406)
回答No.1

>マイコンソフトビルド異常修正方法を教えてください。 「(」と「)」の数を1対1に合わせましょう(意味:「お話になりません」) それと「意味不明な文」も直しましょう(例えば、以下の else if return (0); など。これも「お話にならない」です) 最も適切なアドバイスは「C言語を初歩から勉強し直して来ましょう」になります。 まずは「お話になるレベル」になってから出直して来て下さい。 訳も判らず、他人が書いたコードを切り貼りしているだけでは「帰って寝ろ」としか言えません。

micr1
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マイコンビルドエラー修正方法を教えて下さい。

    /*------ 自動□□装置 -----------*/ /*------ 2013年02月26日 MICR-V1 -----------*/ /*------ AVR TOOLS AVR studio 4 ----------*/ /*------ マイコン型式 AT90S2323/2343 --------*/ #include <stdio.h> long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; long kn; #include <avr\io.h> #define _PORT PORTB #define _DDR DDRB #define _PIN PINB /*---------------------メインプログラム-------------------*/ int main(void) { DDRB = 0xfe; /*---- 11111110 PB0;入力 PB1;出力--*/ /*------------------ PB0入力有り--------------------*/ while(!(PINB &_BV (PB0)) { /* 異常(1)../micrv001.c:30: error: expected ')' before '{' token-----*/ tm2 = 0; tm1++; pa=tm1/100; if (pa>=10); ka =12345; /* ------ □ NO ka=1~99999----------*/ ke = 0; /*------- 検索アドレス ---------*/ ke1 = 0; /*------- 桁検索アドレス ---------*/ k10 = 1; /*------- 桁x10 ---------*/ kk = 0; /*------- 桁カウンタ ---------*/ pa = 0; /*------- 信号カウンタ ---------*/ tm1 = 0; /*------- 信号ONタイマ ---------*/ tm2 = 0; /*------- 信号OFFタイマ ---------*/ tm3 = 0; /*--------LED,ON-OFFタイマ ---------*/ } /* ----------------PB0入力無し---------------------*/ while ((PINB &_BV (PB0)) { tm1=0; tm2++; if (tm2==100) if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 = 0; tm2 = 0; if (kk==5) if (ka==ke) } /*-------------------LED表示 ---------------------*/ do { tm3=800; do { tm3--; if (tm3>400) PORTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); } /*異常(2)../micrv001.c:78: error: expected declaration or statement at end of input ----*/ /*-------------------- end of file ---------------*/ /* Build failed with 2 errors and 0 warnings... */

  • プログラムをBuildすると、エラーが発生

    /* 自動□□装置           */ /* 2013年01月31日 MICR-V1      */ /* AVR TOOLS    AVR studio 4   */ /* マイコン型式    AT90S2323/2343   */ #include <avr/io.h> #include <stdio.h> int main (void) long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; #define _PORT PORTB #define _DDR DDRB #define _PIN PINB DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ /* .c:23: error: expected declaration specifiers before '(' token */ if (!(PINB &_BV (PB0)) /*  PB0入力有り  */ /* .c:26: error: expected declaration specifiers before 'if' */ { {tm2=0; tm1++; pa=tm1/100;} if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ else return 0; else ((PINB &_BV (PB0)) /* PB0入力無し */ { {tm1=0; tm2++;} if {(tm2!=100) return 0;} else (tm2==100) if {(kk>=5) return 0; } else if (kk<=4) { ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; } if (kk!=5) return 0; else if (kk==5) if (ka !=ke) return 0; } else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ /* 77: error: old-style parameter declarations in prototyped function definition */ /* Build failed with 3 errors and 0 warnings... * 上記のプログラムをBuildすると、エラーが23、26、77行に発生します、どう訂正すれば良いか具体的に教えてください。

  • C言語 間違ったところを見つけてください

    /* 自動検索装置        */ /* 2012年9月4日  MICR0904  */ /* AT90S2323/2343       */ #include <avr\io.h> int main (void) /*   汎用レジスターの指定     */ { long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ if (!(PINB && BV(PB0)) tm2=0; tm1++; pa=tm1/100; if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ } return 0; else ( (PINB && BV (PB0)) tm1=0; tm2++; if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>5) return 0; } else if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; if (kk!=5) return 0; else if (kk==5) if( !(PINB & BV (PB0)) return 0; else if ((PINB && BV (PB0)) if (ka !=ke) return 0; else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ } 流れ図は/* 自動検索装置        */ /* 2012年9月4日  MICR0904  */ /* AT90S2323/2343       */ #include <avr\io.h> int main (void) /*   汎用レジスターの指定     */ { long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ if (!(PINB && BV(PB0)) tm2=0; tm1++; pa=tm1/100; if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ } return 0; else ( (PINB && BV (PB0)) tm1=0; tm2++; if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>5) return 0; } else if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; if (kk!=5) return 0; else if (kk==5) if( !(PINB & BV (PB0)) return 0; else if ((PINB && BV (PB0)) if (ka !=ke) return 0; else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ } マイクロチップの型式は/* AT90S2323/2343        ネットに書いてあるAVRISP mkllとAVR Studio 4で始めるAVRマイコン開発でAVR Studio 4をインストールして打ち込んだものです。 AVRISP mkllとAVR Studio 4で始めるAVRマイコン開発にかいてあることが間違っている場合は どの本を買えばいいんですか

  • C言語 間違ったところを見つけてください。

    /* 自動検索装置        */ /* 2012年9月4日  MICR0904  */ /* AT90S2323/2343       */ #include <avr\io.h> int main (void) /*   汎用レジスターの指定     */ { long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ if (!(PINB && BV(PB0)) tm2=0; tm1++; pa=tm1/100; if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ } return 0; else ( (PINB && BV (PB0)) tm1=0; tm2++; if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>5) return 0; } else if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; if (kk!=5) return 0; else if (kk==5) if( !(PINB & BV (PB0)) return 0; else if ((PINB && BV (PB0)) if (ka !=ke) return 0; else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ }

  • C言語間違っている所を見つけてください。

    /* 自動□□装置           */ /* 2013年01月08日 MICR-V1      */ /* AVR TOOLS    AVR studio 4   */ /* マイコン型式    AT90S2323/2343   */ #include <avr\io.h> int main(void) long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB =0xfe; /* 11111110 PB0;入力 PB1;出力*/ /* 1箇所エラー */ if (!(PINB&_BV(PB0)) /*  PB0入力有り  */ /* 1箇所エラー */ { {tm2=0; tm1++; pa=tm1/100;} if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ return 0; else return 0;} else if((PINB &_BV(PB0)) /* PB0入力無し */ { {tm1=0; tm2++;} if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>=5) return 0; } else if (kk<=4) { ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; } if (kk!=5) return 0; else if (kk==5) if (ka !=ke) return 0; } else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ /* Build failed with 3 errors and 0 warnings...*/ /* 1箇所エラー */

  • AVRマイコン開発

    #include <avr/io.h> int main(void) { volatile long i; PORTB = 0xff; DDRB = 0xff; while(1) { P1NB |= _BV(PB0); for (i = 5000; i > 0; i--); } return 0; } Build failed... No build tools defined. こんなエラーがでたのですがどこが間違っているのでしょうか?

  • この関数がどのような計算を行うものか教えて下さい。

    #define NULLC(char) 0 #define YES 1 #define NO 0 int string_compare(char *s1, char*s2){ while(*s1==*s2) if(*s1==NULLC) if(*s2==NULLC) return YES; else return NO; else if(*s2==NULLC) return NO; else{++s1;++s2;} return NO; }

  • アルゴリズムの実装方法

    OPEN cA; OPEN cB; <<outer_loop>> LOOP FETCH cA INTO vA; EXIT outer_loop WHEN cA%NOTFOUND; <<inner_loop>> LOOP FETCH cB INTO vB; EXIT inner_loop WHEN cB%NOTFOUND; IF vA.Pa != vB.Pb THEN --11桁で検索 vB.Pb := SUBSTR( vB.Pb, 1, 11 ); IF vB.b != vA.Pa THEN -- ログ出力 ELSE EXIT inner_loop; END IF; ELSE EXIT inner_loop; END IF; END LOOP inner_loop; 処理exec; END LOOP outer_loop; テーブルのデータはA,Bとも1件だけ作ってやっているのですが、 A.Pa = B.Pbのデータではうまく行きますが、 A.Pa != B.Pbの場合だと、処理execが行われてはいけないのに、 execが行われてしまいます。 うまく動作させるにはどういうアルゴリズムを組めばよいでしょうか? どうぞ宜しくお願いいたします。

  • AVRマイコン UART動作異常

    AVRマイコンのATmega168にてPCとRS-232Cにてシリアル通信(UART)を行うと最初のスタートビット'L'が正常に出ず、スタートビット'L'の後すぐに'H'に戻ってその後データビットを送っています。2回目以降のスタートビットは正常に'L'が指定したボーレートの時間幅で出ており、問題はありません。最初のスタートビットが正常に出ない原因がわかりませんので教えてください。 システムクロック:1MHz(内部発振器のみ) ボーレート:4800bps データビット数:8bit ストップビット数:1bit パリティビット数:なし -------------------------------------------- #include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> #define sbi(addr,bit) addr |= (1<<bit) #define cbi(addr,bit) addr &= ~(1<<bit) void port_init(void){ PORTB = 0xFE; DDRB = 0xFF; asm("NOP"); } void uart_init(void){ sbi(DDRD,1); cbi(DDRD,0); asm("NOP"); } void uart_putchar(unsigned char c){ loop_until_bit_is_set(UCSR0A,UDRE0); // asm("NOP"); UDR0 = c; } void _delay_1s(void){ int i; for(i=0;i<100;i++){ _delay_ms(10); } } int main(void) { port_init(); uart_init(); UCSR0B = _BV(TXEN0); UCSR0C = 0b00000110; UBRR0H = (uint8_t)0; UBRR0L = (uint8_t)12; while(1) { uart_putchar(0b01011010); _delay_1s(); } return 0; } -----------------------------------------------

  • C言語プログラムの並列化について

    OpenMPを用いて以下のC言語プログラムを並列化させようと考えています。 (sumの部分は今は単純な足し算ですが、kk0~kk4を用いた複雑な計算を考えています。) ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}}} printf("max: %d\n", sum_max0); printf("min: %d\n", sum_min0); return 0; } ------------------------------------------------------------------------------ 以上のプログラムを以下のように書き変えました。 ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; #pragma omp parallel for private(kk0, kk1, kk2, kk3, kk4, sum, sum_min0, sum_max0) schedule(static,1) for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { sum_max0=0; sum_min0=PARA_NUM*parameter_num; for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}} #pragma omp critical { if ( sum_max < sum_max0 ) {sum_max = sum_max0;} if ( sum_min > sum_min0 ) {sum_min = sum_min0; } }} printf("max: %d\n", sum_max); printf("min: %d\n", sum_min); return 0; } ------------------------------------------------------------------------------ インテルコンパイラ(icl)にてコンパイルした後、 windows7に標準で搭載されているelapsedtimeで実行時間を測定した結果、 上のプログラムは 2239milliseconds 下のプログラムは446millisecondsとなりました。(cpuは8コア) 8コア使うため実行時間は1/8に近づくと考えていましたが1/5程度となってしまいました。 下のプログラムより良い並列処理をするアルゴリズムはあるのでしょうか。 また#pragma omp criticalの構文は現在の位置が最適なのでしょうか。

専門家に質問してみよう