Модуль тестування мови збірки 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.