AVR 어셈블리 언어 테스트


11

어셈블리 코드를 어떻게 단위 테스트합니까?

나는 hexapod 로봇 프로젝트의 일환으로 직렬 서보 컨트롤러를 작업하고 있으며 코드는 복잡해졌습니다.) 어쨌든, 저는 일상 업무에서 C ++ 서버 개발자로서 AVR 어셈블리 코드에 동일한 종류의 테스트를 적용하려고했습니다. 나는 나에게 잘 맞는 방법을 찾았지만 ( 여기 참조 ) 표준 도구 나 기술이 없는지 관심이있다.

업데이트 : 서보 컨트롤러에 대한 전체 소스에 관심이있는 사람들을 위해 이제 유닛 테스트를 사용할 수 있습니다 .

답변:


3

나는 이것을 우아하다고 묘사하지만 침입을 용서한다면 문제를 추가하고 싶습니다.

이런 상황에서 작동하기에는 매우 비싼 소프트웨어 패키지가 있다는 것을 알고 있지만, 내가 일하는 회사에서 우리가 필요로하는 것을 확신하지 않으면 비용을 감당할 수 없습니다.

TDD (Test Driven Development)는 개발을 위해 들었던 더 나은 시스템 중 하나이며, 그것을 즐기지 만, 시간이 걸리는 문제는 일반적으로 많은 사람들이 글리치라고 부르는 복잡한 인터럽트 및 하드웨어 이벤트로 인해 발생합니다. 별이 정렬 될 때 2 시간마다 문제가 발생하는 것은 사소한 것 같지만 휴대 전화가 일주일에 한 번만 얼었다면 엔지니어 이름을 저주 할 것입니다. 우리의 경우, 우리는 실제로 일이 부러 질 때 피드 로트에 들어가야합니다. 상상할 수 있듯이 피하고 싶습니다.

하위 시스템의 기능을 검사하는 매우 지능적인 솔루션을 보았습니다. 제대로 구현하면 일주일에 50 시간의 근무 시간에서 3 시간을 절약 할 수 있지만 결함이있는 상황을 찾아내는 현명한 방법이 있다면 수 주일의 작업 시간을 절약 할 수 있습니다. 때때로 무거운 짐을지고 현장에서 발생하는 "버그"를 찾습니다.

이 게시물은 아마 많은 도움이되지 않지만 모든 것을 빛으로 가져 오는 것이 모든 것을 쉽게 해결할 수 있다는 것을 알았습니다. 글리치 상황을 찾기위한 TDD 방법이 있다면 지불 할 수만 대를 할당 할 수 있습니다. -최대


1
인터럽트 코드와 비 인터럽트 코드 간의 상호 작용을 테스트하는 것에 대해서는 실제로 생각하지 않았습니다. 좋은 지적입니다. 메인 라인 시리얼 코드를 테스트하는 방식과 비슷한 방식으로 인터럽트 상황 이외의 PWM 생성 타이머 인터럽트 코드를 테스트 할 계획이었습니다. 나는 여전히 상호 작용이 누락 된 것을 모두 다루고 있다고 생각합니다. 테스트 내에서 인터럽트를 트리거 할 수 있다고 가정합니다 (타이머 인터럽트로는 쉽지만 모든 인터럽트 코드는 테스트 하니스 내의 타이머 인터럽트에서 실행되도록 설정할 수 있음). 그러나 사소한 것은 아닙니다.
Len Holgate

1
나는 당신을 오해 할 수 있지만, 비 인터럽트 및 인터럽트 코드 상호 작용에 매우주의를 기울입니다. 아마도 원자 연산을 사용하는 데 더 여유가 없어야하지만 최적화 기가있는 수준에서 해를 끼치는 것으로 나타났습니다. 문제는 하나의 인터럽트가 다른 인터럽트를 지연시킬 때 발생하며, 학생들이 일반적으로 방해하는 것은 PWM을 생성하는 것입니다. 예를 들어 칩에 비교 모듈을 사용하는 등 매우 정확한 속도가 필요하고 다른 인터럽트가 다른 것에 시간을 소비하여 세계 결말이 될 수있는 50uS 지연되는 경우.
Kortuk

1
경우에 따라 우선 순위를 갖거나 인터럽트 자체를 비활성화하고 내부적으로 플랫폼에 따라 전역 인터럽트를 다시 활성화 할 수도 있지만 내 개발의 가장 쉬운 길은 인터럽트가 필요한 시간을 제한하여 정상적인 코드를 수행하는 것입니다. 나머지 작업.
Kortuk

1
내 현재 디자인은 제안 된 새로운 디자인과 같이 내 블로그에 설명되어 있습니다. 현재 타이머 인터럽트에 의해 생성 된 64 개의 PWM 채널이 있으며 다른 인터럽트는 없습니다. 직렬화는 폴링에 의해 수행됩니다. 이는 PWM이 견고하지만 직렬에 문제가있을 수 있음을 의미합니다. 나의 새로운 디자인은 PWM 생성 및주의 재 활성화를위한 타이머뿐만 아니라 UART에 대한 인터럽트를 사용하는 것이 인터럽트의 블로킹 결함 무료 PWM을 보장하고 무료 UART 처리를있는 결함 ...
렌 Holgate

2
예를 들어 PWM을 사용하고 있었는데,이 문제가 발생한 시스템에는 3 개의 SPI 인터페이스가 있으며 SPI 연결 중 하나에는 3 개의 칩이 있습니다. 외부 칩의 상태 변화를 알리는 4 가지 포트 인터럽트와 몇 가지 다른 사항이 있습니다. 인터페이스가 많을수록 문제가 악화됩니다.
Kortuk

2

흥미 롭군 크리스마스가 끝난 후 나는 Pics와 함께 어셈블러를 만들 계획을 세웠습니다. 조금 더 시간이 있으면 시스템을 잘 살펴볼 것입니다.

내가 볼 수있는 한 가지 방법은 모의 객체 등을 생성하고 분해하기 위해 다른 언어로 일종의 프레임 워크를 스크립팅하는 것이지만 이것을 칩 / 시뮬레이션에 인터페이스하는 방법은 문제가 될 것입니다.

그래도 너무 번거로워지면 단위 ​​테스트의 이점보다 중요하며 사용하기가 쉽지 않습니다.


시뮬레이터 내에서 작동하게하는 것은 코드를 별도의 파일로 분리하고 실제 코드에서 건너 뛸 레이블 중 일부를 단순히 "모의"하는 방법을 알아낼 때까지 초기 장애물이었습니다. 완료되면 모든 내용을 게시하겠습니다. 단위 테스트를 코드에 개조하는 데 시간이 걸리지 만 그만한 가치가 있습니다.
Len Holgate

나는 당신의 방법론을 살펴볼 수있는 적절한 기회를 얻었으므로, 그것은 매우 우아하다고 생각합니다. 어쩌면 크리스마스 이후에 avr을 살펴볼 것입니다. Pics보다 커뮤니티 기반의 것들이 훨씬 많습니다. AVR 어셈블러 프로그래밍을위한 적절한 Linux IDE가 무엇인지 알 수 있습니다.
Amos

1
AVR Studio (Atmel의 무료 툴셋) 대신 사용할 수있는 GNU 툴 체인이 있습니다. 아마도 리눅스에서 실행할 수는 있지만 필요하지는 않았습니다.
Len Holgate

: 그냥 리눅스에서 AVR에 대한 개발에 리눅스 저널 기사에 링크를 발견 linuxjournal.com/article/7289
렌 Holgate

이 기사에 대한 나의 주요 관심사는 그것이 2005 년이되어서 오래되었다는 것입니다.
Amos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.