simavr 은 Linux 또는 avr-gcc를 사용하는 모든 플랫폼용 AVR 시뮬레이터입니다. avr-gcc의 자체 레지스터 정의를 사용하여 지원되는 AVR 장치에 대한 새 대상 생성을 단순화합니다. 코어는 작고 컴팩트하며 해킹이 가능하도록 만들어졌으므로 AVR 프로젝트의 빠른 프로토타이핑이 가능합니다. AVR 코어는 이제 <= 128KB 플래시가 있는 부품과 함께 사용하기에 안정적이며 더 큰 부품에 대한 예비 지원을 제공합니다. 시뮬레이터는 ELF 파일을 직접 로드하며, .elf 섹션을 사용하여 에뮬레이트된 코드에서 직접 시뮬레이션 매개변수를 지정하는 방법도 있습니다. 여러 부분으로 구성된 HEX 파일을 로드할 수도 있습니다.
- _simavr_ is provided **AS IS**. If you think you should report "security vulnerabilities"
- and waste everyones time with them, you are either a grifter OR an idiot, or both. And
- anyone checking the CV you brag about it will see this paragraph, first.
OSX에서는 홈브류를 사용하는 것이 좋습니다.
brew tap osx-cross/avr
brew install --HEAD simavr
Ubuntu에서는 SimAVR을 Bionic 패키지 소스에서 사용할 수 있습니다.
apt-get install simavr
(명령은 run_avr
이 아닌 simavr
이라는 이름으로 제공됩니다.)
그렇지 않으면 make
만으로 bin/simavr을 사용하여 시작할 수 있습니다. simavr 명령을 시스템 전체에 설치하려면 make install RELEASE=1
.
패치는 언제나 환영입니다! Github 풀 요청을 통해 변경 사항을 제출하세요.
simavr은 대부분의 핀, 펌웨어 변수, 인터럽트 및 기타 몇 가지 사항을 신호로 출력하여 추가로 정확한 분석을 위해 gtkwave를 사용하여 플롯할 수 있는 파일에 덤프할 수 있습니다. 펌웨어에는 simavr이 추적할 내용을 알 수 있는 지침이 포함될 수 있으며 파일이 자동으로 생성됩니다. 예:
const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = {
{ AVR_MCU_VCD_SYMBOL("UDR0"), .what = (void*)&UDR0, },
{ AVR_MCU_VCD_SYMBOL("UDRE0"), .mask = (1 << UDRE0), .what = (void*)&UCSR0A, },
};
UDR0 레지스터가 변경될 때마다 그리고 인터럽트가 발생할 때마다(UCSR0A에서) 추적을 생성하도록 simavr 에 지시합니다. MMCU 태그는 gcc에 컴파일이 필요하다고 알려주지만 프로그램에 연결되지 않으므로 문자 그대로 0바이트가 필요합니다. 이것은 simavr 전용 코드 섹션이며 무료입니다! 이 지침에 따라 실행되고 직렬 포트에 쓰는 프로그램은 다음을 표시하는 파일을 생성합니다.
$ ./simavr/run_avr tests/atmega88_example.axf
AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0
AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0
Loaded 1780 .text
Loaded 114 .data
Loaded 4 .eeprom
Starting atmega88 - flashend 1fff ramend 04ff e2end 01ff
atmega88 init
avr_eeprom_ioctl: AVR_IOCTL_EEPROM_SET Loaded 4 at offset 0
Creating VCD trace file 'gtkwave_trace.vcd'
Read from eeprom 0xdeadbeef -- should be 0xdeadbeef..
Read from eeprom 0xcafef00d -- should be 0xcafef00d..
simavr: sleeping with interrupts off, quitting gracefully
그리고 파일이 gtkwave에 로드되면 다음이 표시됩니다.
AVR 주기까지 추적에 추가하는 모든 변경 사항에 대한 매우 정확한 타이밍 분석을 얻을 수 있습니다.
simavr은 디버거뿐만 아니라 펌웨어에서 사용할 주변 장치를 에뮬레이션하는 AVR 프로젝트를 에뮬레이션하기 위한 센터로 만들어졌으므로 오프라인으로 테스트하고 개발한 다음 하드웨어에서 사용해 볼 수 있습니다. .
또한 simavr을 사용하여 배송 펌웨어에서 테스트 장치를 수행하여 새 버전을 출시하기 전에 이를 검증함으로써 회귀나 실수를 방지할 수 있습니다.
simavr 에는 이를 입증하는 몇 가지 '완전한 프로젝트/가 있습니다. 대부분은 어느 시점에서 실제 하드웨어를 사용하여 만들어졌으며 펌웨어 바이너리는 정확히 하드웨어에서 실행된 것입니다. 여기서 핵심은 AVR에 연결된 부품 이나 주변 장치를 에뮬레이트하는 것입니다. 물론 전체 하드웨어를 에뮬레이트할 필요는 없으며 AVR이 속일 수 있도록 적절한 자극을 생성하기만 하면 됩니다.
이 예제 보드는 Atmega48을 에뮬레이트된 HD44780 LCD에 연결하고 'lcd'에 실행 카운터를 표시합니다. 모든 것이 에뮬레이션되며 펌웨어는 실제 하드웨어에서 이와 똑같이 실행됩니다.
그리고 이것은 펌웨어가 수행하는 작업에 대한 gtkwave 추적입니다. gtkwave에서 확대, 측정 등을 수행하고 추적을 선택하여 확인하는 등의 작업을 수행할 수 있습니다.
꽤 많은 다른 예를 사용할 수 있습니다!