реклама на сайте
подробности

 
 
> как тестировать программу микроконтроллера
nckkm
сообщение Nov 26 2013, 12:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-04-10
Пользователь №: 56 623



Собственно вопрос - пишу программу для микроконтроллера STM32, но как проверить все ли правильно работает?
Как автоматизировать и симулировать проверку всех заявленных функций контроллера?

Я почему спрашиваю, я долго работал с ПЛИСами и там с этим делом было более менее все понятно.

В ПЛИС сам проект описывается на Verilog, потом к нему дописывается Testbench - это вторая программа на том же Verilog, которая симулирует все внешние воздействия / сигналы на микросхему. Так же, Testbench контролирует, что разрабатываемая микросхема выдает правильные отклики и вообще правильные последовательности сигналов.
Таким образом, с помощью Verilog можно абсолютно точно посмотреть что и как происходит внутри любого блока проекта.
Я так даже симулировал от начала до конца запуск ядра Linux в ПЛИС и просматривал сигналы обращения к SDRAM, и прочие..

А как все это делается с микроконтроллерами? И делается ли вообще?
В принципе, я понимаю, можно использовать статический анализ с инструментами типа cppcheck, или писать Unit Test, но кажется мне это все не совсем то, что нужно.. Ну вот какой unit test можно написать для обработчика прерываний или функции ининциализации контроллера DMA?

А если у меня контроллер управляет медленными процессами типа включил вентилятор, выждал 10 секунд, включил печку.. Как тестировать такие функции устройства?

Возможно тема обсуждалась, извините если так, не нашел поиском.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mempfis_
сообщение Nov 26 2013, 16:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(nckkm @ Nov 26 2013, 15:00) *
Собственно вопрос - пишу программу для микроконтроллера STM32, но как проверить все ли правильно работает?
Как автоматизировать и симулировать проверку всех заявленных функций контроллера?


Проверять работоспособность переферии контроллера нет смысла. Это делают за Вас производители контроллера, а всякие разные баги переферии описывают в эрратах, которые тоже стоит иногда листать.
Что касается проверки работоспособности программы, то сдесь всё зависит только от Вас. Если программа простая, то достаточно один раз её отладить с помощью отладчика/симулятора/светодиода/LCD-индикатора. Убрать отладочную информацию, проверить что с функционалом всё в порядке и принять решение о завершении отладки.
Если программа сложная, то не стоит скупиться и выделить один UART только для отладочных целей и выводить в него всю важную информацию.
Программу разделять на осмысленные задачи, каждую из которых можно отладить независимо от других, и обеспечить их максимальную независимость от других задач - задача опроса АЦП, задача контроля GPRS, задача обслуживания LCD-индикатора и т.п. Если есть зависимые задачи, то предусмотреть чтобы крах одной задачи не влиял на другие, зависящие от неё задачи.
Каждая задача должна при выполнении некоторых действий отправляет в debug-порт сообщения.
Например условный лог:

TASK LCD: PRINT MSG: HELLO
TASK GPRS: TRY CONNECT: APN: internet
TASK SERVER: WAITE GPRS
TASK GPRS: CONNECT OK: IP: 10.9.8.7
TASK LCD: LCD LOST
TASK SERVER: SEND DATA: BYTES: 245 TYPE: GPS FIFO
.............................
.............................
TASK LCD: LCD INIT OK
.............................

Опыт показал что текстовый лог с интуитивно понятными сообщениями позволяет выявлять много неочевидных багов в программе.
Багов, которые могут проявляться только со временем.
Это проверено на многих серийных проектах и действительно помогает в случае чего доказать что иногда проблемы не в программе, а, например, во внешнем устройстве, или в операторе мобильной связи, или в криво написанном сервере и т.д. и т.п.

Другой вариант косвенной борьбы с глюками программы - наличие возможности дистанционного обновления прошивки. Если в устройстве есть ETHERNET или GPRS, или любой порт, по которому можно связаться с устройством (RS232, RS485, голый UART), то после завершения написания условно "рабочей и отлаженной прошивки" в первую очередь следует ввести и отладить возможность её обновления дистанционно. Перимущества дистанционной перепрошивки нет смысла описывать.
Go to the top of the page
 
+Quote Post
nckkm
сообщение Nov 26 2013, 17:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-04-10
Пользователь №: 56 623



Цитата(mempfis_ @ Nov 26 2013, 19:01) *
Проверять работоспособность переферии контроллера нет смысла. Это делают за Вас производители контроллера, а всякие разные баги переферии описывают в эрратах, которые тоже стоит иногда листать.


нет, проверять работоспособность переферии не собирался.. только проверка своей собственной программы..

Цитата(mempfis_ @ Nov 26 2013, 19:01) *
Программу разделять на осмысленные задачи, каждую из которых можно отладить независимо от других, и обеспечить их максимальную независимость от других задач - задача опроса АЦП, задача контроля GPRS, задача обслуживания LCD-индикатора и т.п.


Вот это и беспокоит - поочередная отладка независимых частей.
Каждую часть по отдельности отладил - каждая работает, но как быть уверенным, что они все вместе будут работать?

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

Может какой инструмент есть вроде тестбенча для Verilog - чтобы программно симулировать все возможные ситуации...
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 26 2013, 22:04
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(nckkm @ Nov 26 2013, 19:51) *
Чисто теоретически возможна ситуация, когда, например, близкие по времени асинхронные события вызывающие прерывания в некоторой магической последовательности вызывают редкий баг. Может в пике не хватит быстродействия микроконтроллера.. Такое и с оцилографом не всегда увидишь.

Может какой инструмент есть вроде тестбенча для Verilog - чтобы программно симулировать все возможные ситуации...


Инструмент есть и называется он RTOS. Но не любая, а с надежным отладочным движком + микроконтроллер с продуманными отладочными средствами.

Как понимаю вы перешли с Amber на STM32. И видимо потому, что у Amber нет отладочных средств кроме как симуляции на VHDL wink.gif
А uLinux не та вещь чтобы на поиск одного испорченного указателя тратить дни. Там тогда на всю жизнь хватит отладки.

Путь для микроконтроллеров не в том чтобы протестировать и убрать все баги, а в том чтобы локализация и устранение бага проводилось максимально быстро. Поэтому симуляция тоже не подходит, это избыточная трата времени. Отладочная архитектура ARMv7 позволяет отказаться от симуляции.

Нынче принято сразу брать микроконтроллер со всей отладочной инфраструктурой. Чтобы была ОСь, в ней уже реализованные логи и удаленный апгрейд, отладочный канал (лучше несколько) через SWD/JTAG, поддержка просмотра всех объектов оси в IDE, полный и отлаженный BSP (лучше даже генерируемый), профайлер, трассер событий и проч. и чтобы все это загружалось и работало максимально быстро.
Такую инфраструктуру мало кто имеет. Я знаю только серию Kinetis от Freescele у которой все это есть.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 27 2013, 05:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(AlexandrY @ Nov 27 2013, 02:04) *
Нынче принято сразу брать микроконтроллер со всей отладочной инфраструктурой. Чтобы была ОСь, в ней уже реализованные логи и удаленный апгрейд, отладочный канал (лучше несколько) через SWD/JTAG, поддержка просмотра всех объектов оси в IDE, полный и отлаженный BSP (лучше даже генерируемый), профайлер, трассер событий и проч. и чтобы все это загружалось и работало максимально быстро.
Такую инфраструктуру мало кто имеет. Я знаю только серию Kinetis от Freescele у которой все это есть.


этим абзацем вы перечеркнули жизнь всех проектов с LPC, STM, и огромной армией других АРМов, также в топку пошли все без операционные проекты.

Не уверен что подъем контроллера с таким количеством обвески (программной, которую тоже кто-то писал) гарантирует упрощение отладки плохо написанного кода. Мне кажется что как раз наоборот, операционка внесет еще больше неопределенности, начнете виснут во внутренних симафорах и совсем все станет грустно...


Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 27 2013, 06:29
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Golikov A. @ Nov 27 2013, 07:10) *
также в топку пошли все без операционные проекты.

Мне кажется что как раз наоборот, операционка внесет еще больше неопределенности, начнете виснут во внутренних симафорах и совсем все станет грустно...


Так, не отходим от контекста.

Уважаемый TC начал с того, что отлаживал uLinux с помощью симулятора аппаратной части. С тем же успехом он мог бы отлаживать uLinux скажем в Micro-Cap (модели только будет найти труднее wink.gif )

Вот альтернативы этому абсурду и рассматриваем. biggrin.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- nckkm   как тестировать программу микроконтроллера   Nov 26 2013, 12:00
- - Falkon_99   вопрос почти риторический и многогранный, для этог...   Nov 26 2013, 12:08
- - Tahoe   Цитата(nckkm @ Nov 26 2013, 16:00) В ПЛИС...   Nov 26 2013, 13:26
- - HardEgor   Цитата(nckkm @ Nov 26 2013, 19:00) Собств...   Nov 26 2013, 14:58
|- - scifi   Цитата(nckkm @ Nov 26 2013, 21:51) Вот эт...   Nov 26 2013, 18:14
- - Aner   Для профессиональных разработок на процах пишутся ...   Nov 26 2013, 17:33
- - Golikov A.   Ну в целом покрыть всю программу тестовыми модулям...   Nov 26 2013, 20:10
- - Aner   AlexandrY думаю вы напугали теоретиков и им подобн...   Nov 27 2013, 09:12
|- - AlexandrY   Цитата(Aner @ Nov 27 2013, 11:12) Но все ...   Nov 27 2013, 12:02
|- - Lagman   Цитата(AlexandrY @ Nov 27 2013, 16:02) То...   Nov 27 2013, 13:30
- - lekintr   Ну не знаю, у меня вопрос в отладке микроконтролле...   Nov 27 2013, 13:04
|- - AlexandrY   Цитата(lekintr @ Nov 27 2013, 15:04) Если...   Nov 27 2013, 14:22
|- - lekintr   Все это не менее надежно можно написать и без RTOS...   Nov 27 2013, 14:56
|- - AlexandrY   Цитата(lekintr @ Nov 27 2013, 16:56) Все ...   Nov 27 2013, 15:46
- - Golikov A.   ОСЬ не панацея ни разу. Куча программ без операцио...   Nov 27 2013, 15:57
- - ViKo   Вот Cppcheck - буквально сегодня набрел. Не тестир...   Nov 27 2013, 17:05


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 03:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01785 секунд с 7
ELECTRONIX ©2004-2016