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


11

Як ви перевіряєте код складання?

Я працюю над послідовним сервоконтролером як частиною проекту роботи гексапод, і код дійшов до того, що він ускладнюється;) У будь-якому випадку, я звик використовувати одиничні тести в своїй щоденній роботі як розробник сервера C ++ і тому намагаються застосувати ті ж види тестування до мого коду збірки AVR. Я розробив спосіб, який добре працює для мене (див. Тут ), але мені цікаво, чи є якісь стандартні інструменти чи методи, які мені не вистачають.

Оновлено: Для тих, хто цікавиться повним джерелом сервоконтролера та тестовими пристроями, тепер доступні тут .

Відповіді:


3

Я б також назвав це елегантним, але хотів би додати проблему, якщо ви пробачите моє вторгнення.

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

Тест-керований розвиток (TDD) - одна з кращих систем, про які я чув про розвиток, і мені це подобається, але проблеми, які займають мій час, зазвичай спричиняються складними подіями переривання та апаратними подіями, які багато хто назве б глюками. Здається, незначна річ має проблеми кожні 2 години, коли зірки вирівнюються, але якби телефон просто замерзнув раз на тиждень, ви б проклинали ім'я інженерів. У нашому випадку нам доводиться походити на корм, коли речі справді ламаються, чого, як ви можете собі уявити, я люблю уникати.

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

Ця публікація, ймовірно, не допомагає великій кількості, але я вважаю, що все, що з’являється на світ, полегшує вирішення всього. Якби був метод TDD для пошуку ситуацій з глюком, я міг би отримати 10 тисяч тисяч, виділених на його оплату. -Макс


1
Я не дуже думав про те, щоб перевірити взаємодію між кодом переривання та кодом безперервного переривання. Це хороший момент. Я планував тестувати свій код переривання таймеру генерації ШІМ поза межами ситуації, що перебиває, аналогічно тому, як я тестую свій серійний код основної лінії. Я здогадуюсь, що навіть колись я висвітлюю все це, я все ще пропускаю взаємодію. Я припускаю, що я міг викликати переривання зсередини тестів (це легко з тимчасовим перериванням, але весь код переривання може бути встановлений для запуску на таймер переривання в тестовій джгуті). Хоча нетривіально.
— Лен Холгейт

1
Я можу вас неправильно зрозуміти, але я намагаюся бути дуже обережним щодо безперебійних та переривних взаємодій з кодом. Я, мабуть, повинен бути більш вразливим у використанні атомних операцій, але ніколи не було показано, що це може завдати шкоди на тому рівні, на якому я маю наш оптимізатор. Питання виникають, коли одна переривання затримує іншу, загальна, з якою я допомагаю студентам, була б генерацією ШІМ, що керується перериванням. Якщо вам потрібна надзвичайно точна швидкість, наприклад, використання модуля Порівняння у вашій мікросхемі, а інша перерва зайнята витрачанням часу на щось інше і затримує вас на 50uS, що може закінчитися у всьому світі.
— Кортук

1
У деяких випадках ви можете мати пріоритет, або навіть можете відключити переривання і повторно включити глобальні переривання внутрішньо, залежні від платформи, але найпростіший шлях мого власного розвитку - обмеження часу переривання на речі, абсолютно необхідні, і нормальний код робити решта роботи.
— Кортук

1
Мій сучасний дизайн пояснюється в моєму блозі, як і запропонований новий дизайн. На даний момент у мене є 64 канали ШІМ, що генеруються тимчасовим перериванням, і жодних інших переривань немає; серійний здійснюється шляхом опитування. Це означає, що ШІМ є непохитним, але серія може мати проблеми. Моя нова конструкція використовуватиме переривання для UART, а також таймер для генерації ШІМ та ретельне перевключення та блокування переривань, щоб забезпечити безрегулярну ШІМ та обробку UART без збоїв ...
— Len Holgate

2
Я використовував PWM в якості прикладу, система, в якій я мав цю проблему, має 3 інтерфейси SPI, а 1 SPI-з'єднання має 3 мікросхеми. Існує 4 різних портових переривання, що інформують про зміну стану зовнішніх мікросхем і кілька інших речей. Проблема стає ще гіршою, чим більше інтерфейсів у вас.
— Кортук

2

Цікаво. Після Різдва я планував розглянути якийсь Асемблер з фотографіями, коли у мене з’явиться трохи більше часу, я добре ознайомлюсь із вашою системою.

Один із способів я міг би бачити, щоб скриптувати якусь структуру на іншій мові, щоб створити та зруйнувати макетні об’єкти тощо, але те, як ви інтерфейсуєте це до мікросхеми / моделювання, буде проблемою.

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


Початок роботи в тренажері було моєю початковою перешкодою, поки я не розробив, як розбити код на окремі файли і просто "знущатися" над деякими мітками, на які я б перейшов у реальний код. Я опублікую всю справу, як тільки я закінчу. Переобладнання тестів одиниці до коду потребує певного часу, але воно того заслуговувало.
— Лен Холгейт

Тепер, коли я мав належний шанс розглянути вашу методологію, я думаю, що це досить елегантно. Можливо, я погляну на avrs після Різдва, оскільки, здається, існує набагато більше речей, які базуються на громаді, ніж для Pics. Будь-які ідеї, яким може бути гідний Linux IDE для програмування AVR Assembler.
— Амос

1
Існує ланцюжок інструментів GNU, яку ви можете використовувати замість AVR Studio (це безкоштовний набір інструментів Atmel). Можливо, це можливо запустити на Linux, але мені цього не потрібно.
— Лен Холгейт

Щойно знайшли це посилання на статтю Linux Journal про розробку для AVR під Linux: linuxjournal.com/article/7289
— Len Holgate

Моя головна стурбованість цією статтею полягає в тому, що вона починається з 2005 року і тому може бути застарілою.
— Амос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.