Модульное тестирование AVR на ассемблере

11

Как вы тестируете свой ассемблерный код?

Я работаю над последовательным сервоконтроллером как часть проекта робота hexapod, и код дошел до того, что он становится сложным;) В любом случае, я привык использовать модульные тесты в своей повседневной работе в качестве разработчика сервера C ++ и поэтому я пытался применить те же виды тестирования к моему ассемблерному коду AVR. Я разработал способ, который работает хорошо для меня (см. Здесь ), но мне интересно, есть ли какие-либо стандартные инструменты или методы, которые мне не хватает.

Обновлено: для тех из вас, кто интересуется полным исходным кодом сервоконтроллера и модульными тестами, теперь можно ознакомиться здесь .

Лен Холгейт
источник

Ответы:

3

Я бы также назвал это элегантным, но хотел бы добавить проблему, если вы простите мое вторжение.

Я знаю, что существуют очень дорогие программные пакеты для работы в подобных ситуациях, но в компании, в которой я работаю, мы не можем позволить себе такую ​​стоимость, если не уверены, что она делает то, что нам нужно.

Разработка через тестирование (TDD) - одна из лучших систем, о которых я слышал для разработки, и мне это нравится, но проблемы, которые занимают мое время, обычно вызваны сложными прерываниями и аппаратными событиями, которые многие называют сбоями. Кажется незначительным иметь проблему каждые 2 часа, когда звезды выравниваются, но если ваш телефон просто зависает раз в неделю, вы бы проклинали имя инженера. В нашем случае нам приходится переходить на кормушку, когда вещи действительно ломаются, чего, как вы можете себе представить, я бы хотел избежать.

Я видел очень интеллектуальные решения для проверки функциональности подсистем, которые, при правильной реализации, вероятно, сэкономили бы мне 3 часа из 50-часовой рабочей недели, но если бы был разумный способ найти ситуации с ошибками, это сэкономило бы мне недели работы. ищите «ошибку», которая иногда случается в поле под большой нагрузкой.

Этот пост, вероятно, не поможет в большом количестве, но я считаю, что вывод всего на свет облегчает решение всех проблем. Если бы был метод TDD для нахождения проблемных ситуаций, я мог бы выделить десятки тысяч, чтобы заплатить за него. -Максимум

Kortuk
источник
1
Я действительно не думал о тестировании взаимодействия между кодом прерывания и кодом без прерывания. Это хороший момент. Я планировал протестировать свой код прерывания таймера генерации ШИМ вне ситуации прерывания, аналогично тому, как я тестирую мой последовательный код основной линии. Я думаю, даже когда у меня есть освещение для всего этого, я все еще скучаю по взаимодействию. Я полагаю, что я мог бы инициировать прерывания из тестов (это легко с прерыванием по таймеру, но весь код прерывания может быть настроен для запуска по прерыванию по таймеру в тестовом жгуте). Хотя нетривиально.
Лен Холгейт
1
Я могу неправильно понять вас, но я стараюсь быть осторожным с взаимодействиями кода без прерываний и прерываний. Я, вероятно, должен быть более слабым в использовании атомарных операций, но никогда не было доказано, что это наносит вред на том уровне, который есть у нашего оптимизатора. Проблемы возникают, когда одно прерывание задерживает другое, и одним из распространенных, с которым я помогаю студентам, будет генерация ШИМ, управляемая прерываниями. Если вам нужна чрезвычайно точная скорость, например, с помощью модуля сравнения в вашей микросхеме, и другое прерывание занято, тратит время на что-то другое и задерживает вас на 50 мкс, что может стать концом света.
Кортук
1
В некоторых случаях у вас может быть приоритет, или вы можете даже отключить прерывание самостоятельно и повторно включить глобальные прерывания внутренне, в зависимости от платформы, но самый простой путь для моей собственной разработки - это ограничение времени прерывания до абсолютно необходимых вещей и выполнение нормального кода. остальная часть работы.
Кортук
1
Мой текущий дизайн объясняется в моем блоге, как и предлагаемый новый дизайн. Сейчас у меня 64 канала ШИМ, сгенерированных прерыванием по таймеру, и никаких других прерываний; Сериал делается опросом. Это означает, что ШИМ надежен, но у серийного могут быть проблемы. Мой новый дизайн будет использовать прерывания для UART, а также таймер для генерации ШИМ и тщательного повторного включения и блокировки прерываний для обеспечения безошибочной ШИМ и безошибочной обработки UART ...
Лен Холгейт,
2
Я использовал PWM в качестве примера, система, на которой у меня была эта проблема, имеет 3 интерфейса SPI с одним из подключений SPI, имеющих 3 чипа, которые мы используем на нем. Существует 4 различных прерывания порта, информирующих об изменении состояния внешних микросхем и нескольких других происходящих событиях. Проблема становится хуже, чем больше интерфейсов у вас есть.
Кортук
2

Интересный. После Рождества я планировал заняться сборкой ассемблера с фотографиями, когда у меня будет немного больше времени, и я буду хорошо смотреть на вашу систему.

Один из способов, который я мог бы увидеть, - это написать какой-то фреймворк на другом языке, чтобы создавать и разрушать фиктивные объекты и т. Д., Но как вы будете связывать это с чипом / симуляцией, будет проблемой.

Если это станет слишком обременительным, тогда это перевесит преимущества модульного тестирования, а также сделает вас менее заинтересованным в его использовании.

амосс
источник
Заставить его работать в симуляторе было моим первоначальным препятствием, пока я не понял, как разбить код на отдельные файлы и просто «смоделировать» некоторые метки, к которым я обратился в реальном коде. Я опубликую все это, как только я закончу. Переоборудование модульных тестов в код занимает некоторое время, но оно того стоит.
Лен Холгейт
Теперь, когда у меня была хорошая возможность просмотреть вашу методологию, я думаю, она довольно элегантна. Может быть, я посмотрю на avrs после Рождества, потому что, кажется, их гораздо больше, чем на фото. Любые идеи о том, какой может быть достойная Linux IDE для программирования на AVR Assembler.
Амос
1
Существует цепочка инструментов GNU, которую вы можете использовать вместо AVR Studio (это бесплатный набор инструментов Atmel). Возможно, это возможно запустить в Linux, но мне это не нужно.
Лен Холгейт
Только что нашел эту ссылку на статью в Linux Journal о разработке для AVR под Linux: linuxjournal.com/article/7289
Лен Холгейт,
Моя главная проблема с этой статьей в том, что она написана в 2005 году и поэтому может быть устаревшей.
Амос