1

私はatmega8が初めてです。古い freesacle コードを atmega8 に変換します。しかし、私のチップは 2400 バイトを超えるコードを保持できないようですか? 以下は、コードが2412バイトの場合の結果です...すべてがめちゃくちゃになります。

以下の avrdude のコードは「cat /dev/ttyUSB0」からのものです。私のデバッグ情報。

avrdude: verifying ...
avrdude: 2412 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done.  Thank you.

55432111001-0000 6Gn�H(�h�X0443234554321190 6Gn�H        (�h�X0443234554321100-FD-90-6F55432111001-0000 6Gn�H    (�h�X0443234554321190 6Gn�H(�h�X0443234554321100-FD-90-6F^C

しかし、コード(オーディオデータのみ)を減らすと、正しい結果が得られました。

avrdude: verifying ...
avrdude: 2312 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done.  Thank you.

AVR-IrDA-Tone-Audio start.
version 1.2
--IrDA--    Bin: 1001-0000      Hex: 90     Complete Hex: 00-FD-90-6F

hfuse、lfuse、lock ビットはすべて元の値です。私のコードは、いくつかのオーディオ データを含む 6k かもしれません。

ブートフラッシュセクションが原因ですか?

追加: ------------------------------------------------ --------------------------------------------------

今はクリスタルを8Mに変えています。

● ll h8-*
-rw-rw-r-- 1 eexp eexp 933  9月 22 00:27 h8-reduce.c
-rw-rw-r-- 1 eexp eexp 14K  9月 22 00:26 h8-org.c

● cp h8-org.c h8.c

● avr.sh main.c
......
avrdude: 5272 bytes of flash verified

今、すべてが混乱します。

● cp h8-reduce.c h8.c

● avr.sh main.c
.....
avrdude: 1872 bytes of flash verified

今はすべてうまくいっていますが、ほとんどすべてのオーディオ データを失いました。

以下はh8.cです。

● head h8.c
const unsigned char h8[] =
{
    36,14,0,0,129,129,128,129,130,127,126,128,128,127,128,130,131,128,127,127,127,126,127,129,130,130,129,129,128,128,128,128,128,126,126,129,128,127,127,130,133,130,126,126,129,128,125,127,128,129,128,127,129,128,127,127,127,128,128,129,127,127,129,128,130,130,128,128,127,126,128,128,128,130,129,128,129,126,126,125,127,132,130,127,126,129,131,127,127,133,133,127,122,125,129,130,127,127,130,129,
    126,125,127,128,129,128,128,128,128,127,127,129,128,129,129,128,126,127,129,127,128,127,128,130,129,129,128,128,127,127,129,130,128,128,129,129,127,127,128,128,128,128,128,128,126,126,129,129,127,129,130,130,126,126,128,128,127,128,131,130,127,126,126,128,129,125,128,130,131,128,126,129,128,129,125,126,130,129,131,130,131,129,125,128,129,131,130,127,130,129,127,128,127,129,128,126,126,127,128,126,
    127,127,128,128,128,127,127,127,127,127,129,128,129,128,128,129,129,128,128,129,128,128,128,129,0xff,
};
4

1 に答える 1

1

オーディオデータをRAMにロードしていると思います。のような変数宣言

  char* data = "somerandomdata"; 

すべてのデータを SRAM に入れていますが、mega8 には 1kbyte の SRAM しかありません (スタックなども含まれます)。

ロック ビットが元の状態にある場合、ブートローダ メカニズムによってこのエラーが発生することはありません。

オーディオ データをプログラム スペースとして指定する必要があります。以下にその方法を説明します。

Avr LibC PGM スペース

コードは次のようになります: h4.c

       #include <avr/pgmspace.h>

       const unsigned char h4[] PROGMEM = { 18,7,0,0,128,128,128,127,127,129,129,127,126,128,130,129,128,129,127,127,128,12‌​8,132,127,129,126,128,128,127,127,127,129,127,127,130,129,127,127,129,130,129,125‌​,

set_audio 関数を調整する必要があります。ポインター h4 のすべての読み取りは、この方法で行われます。たとえば、変更します。

  value = *h4_copy++;

  value = pgm_read_byte(h4_copy); h4_copy++;    
于 2012-09-21T07:10:34.670 に答える