1

今日、ついにArduino Uno経由でattiny2313aをプログラムすることができました。テストまばたきプログラムでした。アップロードした後、LED が 1 秒ではなく 8 秒遅れて点滅するのを確認したので、Makefile と main.c のクロック設定を変更して、チップを再度書き込むことにしました。そのため、Makefile と main.c の両方で 8000000 を 1000000 に変更しただけでmake flash、cmd (Windows シェル) で実行しました。以下は出力です。

avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny2313 -F -c main.c -o main.o
cc1.exe: error: avr25: No such file or directory
make: *** [main.o] Error 1

このエラーが発生するのはなぜですか? プログラムを一度しかコンパイルして書き込むことができなかったのはなぜですか? 新しいものを削除したり追加したりしませんでした。実際、私はそれらのクロック設定以外には何も触れていません。しかし、元の設定 (8000000) に戻しても、同じエラーが発生します。

私のメイクファイル

DEVICE     = attiny2313 -F
CLOCK      = 1000000
PROGRAMMER = -c arduino -P COM5 -b 19200 
OBJECTS    = main.o
FUSES      = -U lfuse:w:0x5e:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m


######################################################################
######################################################################

# Tune the lines below only if you know what you are doing:

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)

# symbolic targets:
all:    main.hex

.c.o:
    $(COMPILE) -c $< -o $@

.S.o:
    $(COMPILE) -x assembler-with-cpp -c $< -o $@
# "-x assembler-with-cpp" should not be necessary since this is the default
# file type for the .S (with capital S) extension. However, upper case
# characters are not always preserved on Windows. To ensure WinAVR
# compatibility define the file type manually.

.c.s:
    $(COMPILE) -S $< -o $@

flash:  all
    $(AVRDUDE) -U flash:w:main.hex:i

fuse:
    $(AVRDUDE) $(FUSES)

install: flash fuse

# if you use a bootloader, change the command below appropriately:
load: all
    bootloadHID main.hex

clean:
    rm -f main.hex main.elf $(OBJECTS)

# file targets:
main.elf: $(OBJECTS)
    $(COMPILE) -o main.elf $(OBJECTS)

main.hex: main.elf
    rm -f main.hex
    avr-objcopy -j .text -j .data -O ihex main.elf main.hex
# If you have an EEPROM section, you must also create a hex file for the
# EEPROM and add it to the "flash" target.

# Targets for code debugging and analysis:
disasm: main.elf
    avr-objdump -d main.elf

cpp:
    $(COMPILE) -E main.c

私のmain.c

#define F_CPU 1000000  // CPU frequency for proper time calculation in delay function

#include <avr/io.h>
#include <util/delay.h>

int main (void){
    DDRD |= (1 << PD6);  // make PD6 an output

    for(;;){
        PORTD ^= (1 << PD6);  // toggle PD6
        _delay_ms(1000);  // delay for a second
    }

    return 0;  // the program executed successfully
}
4

2 に答える 2

1

その理由は、avrdude に attiny2313a が実際には attiny2313 (署名チェックのオーバーライド) であると思わせるために Makefile に追加された "-F" キーにあったことが判明しました。奇妙ですが、チップの最初のプログラミング後に「-F」キーを削除する必要があります。これは、ベース (ar 親?) の変更と同じであるが、名前にさまざまな接尾辞が追加されている (「attiny2313a」や「atmega168p」など) AVR チップの他の新しい変更にも適用されると思います。

そう。マイクロコントローラーが初めてプログラムされ、avrdude がチップを認識しない場合、チップ-Fの名前の後にキーを追加する必要があります。

DEVICE = attiny2313 -F

ただし、チップが初めてプログラムされた後、その-Fキーを削除する必要があります。そうしないと、チップを再度プログラムすることができなくなります。

于 2013-02-19T09:30:09.937 に答える
1

どうぞ、どうぞ、チップのために、avrdude で -F を使用しないでください。

tinyAVR のプログラミングに問題があるのは、avrdude に間違った部品番号を供給しているためです。ATtiny2313 をプログラムするための正しい引数は -pt2313 [または単に t2313 の部分を使用] です。-F を使用すると、特にヒューズを供給しているため、チップをブリックすることができます [ブリックされたチップは、どのヒューズ設定に投げられたかによって、高電圧プログラマーを使用して回復する場合があります]。

avrdude の詳細については、そのマニュアル ページを参照してください。

       -p partno
               This is the only option that is mandatory for every invocation of avrdude.  It specifies the type of the MCU connected to the program‐
               mer.  These are read from the config file.  If avrdude does not know about a part that you have, simply add it to the config file (be
               sure and submit a patch back to the author so that it can be incorporated for the next version).  See the sample config file for the
               format.  Currently, the following MCU types are understood:

               Option tag   Official part name
               ...snip...
               t2313        ATtiny2313
               ...snip...

ATtiny2313 と ATtiny2313A のデバイス シグネチャは同じですが、avrdude は 2313A と通信しないと主張しています。ヒューズ プログラミングが不要な場合は無効にし、-Fオプションなしでテストします。乾杯。

PS。gcc があなたに障害を起こしている理由は、

   -Fdir
       Add the framework directory dir to the head of the list of directories to be searched for header files.  These directories are interleaved with
       those specified by -I options and are scanned in a left-to-right order.

何をすべきかわからない引数を渡しています。この問題を修正するには、Makefile に追加します。

PROGDEV=t2313

PROGDEVの代わりにavrdude 呼び出しを使用するように変更しますDEVICE

また、以前の回答で述べたように

PORTD ^= (1 << PD6);

で置き換えることができます

PIND = (1 << PD6);

後者は、あなたが持っている2つの3つの命令と比較して、1つの命令にコンパイルされます。これにより、チップ上のコード スペースが節約され、コードの実行速度が向上します。詳細については、Atmel のデータシートを参照してください。

于 2013-02-19T13:13:37.333 に答える