Зачем нужен режим отладки (debugging)? – для новичков в радиоделе

July 3, 2014 by admin Комментировать »

Собирая программы, мы делаем множество предположений, много шагов, не проверяя каждый шаг на этапе создания программы Конечно, ключевые моменты мы стараемся проверить В чём помогает механизм подпрограмм Создав макрос, мы можем его проверить отдельно от программы, и включить в программу тогда, когда убедились, что подпрограмма работает правильно Если это не так, то можем вернуться к программе (подпрограмме) и внести исправления

Тем не менее, в программе могут оставаться ошибки Любая современная среда создания программ обязательно имеет отладочные механизмы И чем отладчик удобнее, тем  быстрее среда программирования завоюет популярность пользователей

Итак, начнём отлавливать «жучков»

Рис 2427 Выбор диапазона в режиме пошаговой отладки

Нажав кнопку Диапазон, как мы и задумывали, с этого начинается работа программы, мы можем убедиться, что до отпускания кнопки после выбора первого диапазона, мы остаёмся в ожидании момента отпускания кнопки Это правильно Мы один раз нажали кнопку, выбрали первый диапазон, задали среднюю частоту диапазона Переменная ran_num равна единице

Отпустив кнопку, мы можем убедиться, что сигнал на выходе формируется (правильно или нет, мы выясним позже) Но проверим, правильно ли переключаются диапазоны Нажмём кнопку выбора диапазона ещё раз

И убедимся, что диапазоны не меняются

Переключением диапазонов управляет переменная ran_num, которая считает, сколько раз нажата кнопка Диапазон Однако, где она это делает Только в самом начале программы, куда программа, скорее всего, не возвращается после первого выбора диапазона

Исправим наше (моё) упущение Добавим подсчёт нажатия кнопки в трёх макросах, где мы опрашиваем эту кнопку Увеличим переменную на единицу: ran_num = ran_num + 1

Рис 2428 Исправление макросов ran1-ran3

Но теперь мы попадаем в другую ловушку – переменная в самом начале программы приняла значение единицы, мы сформировали нужное направление продвижения по программе, однако, отпустив кнопку, увеличили переменную run_num ещё раз на единицу, переключив диапазон после однократного нажатия на кнопку Диапазон Задумано было хорошо, а получилось… «из огня да в полымя»

Внесём исправление в макрос range, поскольку проблемы возникли при отпускании кнопки переключения диапазона:

Рис 2429 Исправление макроса range

В  макрос  добавлены  блоки,  ожидающие,  когда  кнопка  будет  отпущена  Посмотрим,  все  ли проблемы были решены

Не все, но теперь мы циклически переходим с одного диапазона на другой, как и планировали

Первая неприятность, которая обнаруживается, связана с отображением частоты После первого выбора диапазона частота отображается правильно, частота середины диапазона Но после смены диапазона она исчезает, и связано это с «недоделками» программы Вот это место:

Рис 2430 Исправление недоделок

В макросе первого диапазона я задаю единицу, а в макросах других диапазонов обнуляю это значение Забыл исправить на:

 Рис 2431 Правка в макросах ran1-ran3

Записывая в порт десятичное значение 32, я использую маску:

Рис 2432 Использование маски

В программировании маска используется, чтобы замаскировать от изменения отдельные биты в байте Если бы мы не задали маску, то биты D0-D2, которые «высвечивают» выбранный диапазон, обнулились бы, а светодиоды погасли Исправление приносит успех Полный ли

Проверяем работу кнопок Больше и Меньше Выбрав для манипуляций первый диапазон, я убеждаюсь, что вполне адекватно дохожу, нажимая кнопку Больше, до последней частоты диапазона, а дальше застреваю на ней И это правильно В макросе more мы позаботились, чтобы переменная mor_num, ведущая подсчёт количества нажатия на кнопку Больше, не ушла за пределы диапазона изменений, но возвращаемся после этого внутрь цикла макроса range после управления индикацией Она и не управляется Одно из решений вернуться в макрос  range, вызвав его явно:

Рис 2433 Исправление макроса more

Аналогичное изменение следует внести и в макрос less Пошаговая проверка после сделанных изменений показывает, что в программе остался один недостаток – первое же нажатие кнопки Меньше переводит частоту ниже средней, а, если нажать после этого кнопку Больше, то переходишь на частоту больше той, что была задана этой кнопкой в предыдущий раз Подумаем, как исправить это

Занимаясь пошаговой, проверкой я обнаруживаю ряд опечаток Для графического языка программирования понятие опечатка кажется странным Но опечатки могут быть и в этом случае В одном из счётных циклов я добавил вместо одного элемента Цикл (Loop) два И не заметил, переделав внутренний цикл в счётный, и оставив внешний При пошаговой проверке, застряв в этом цикле, я, конечно, удалил его

В макросах ran1-ran3, собрав первый из них, я сделал опечатку, которую, копируя макросы, перенёс в остальные:

Рис 2434 Опечатка в макросах ran1-ran3

Здесь должно быть правильное присваивание pause = ran[2] (середина частотного диапазона) Некоторые опечатки не сказываются на логике программы, но приведут к её неправильной работе И в макрос more, где продолжается перемещение по частотам, ошибка перешла «по наследству»

Рис 2435 Ошибка в макросе more

Конечно, здесь должны были быть pause = ran[3] и pause = ran[4] Аналогичная ошибка есть и в макросе less, где нужно уменьшить индексы на единицу

Последние опечатки будут заметны только при интерактивной проверке

Поэтому очень важно использовать все доступные инструменты для проверки и отладки вновь созданной программы

Но вернёмся к процессу увеличения и уменьшения частоты Это не опечатка, и не ошибка Просто к тому моменту процесс создания программы так затянулся, а сама программа так разрослась, что я не стал продолжать процесс

Но всё поправимо Правда, правки довольно много Я приведу конечный результат Но прежде исправлю, сделанные для пошаговой проверки временные исправления: количество циклов (в двух местах) в макросе ran2 верну к значению 100 количество циклов (в двух местах) в макросе ran3 верну к значению 10 кнопки сделаю без фиксации Это позволит мне запустить интерактивный режим проверки (кнопкой проигрывания на инструментальной панели)

Рис 2436 Интерактивная проверка программы

И осталось проверить правильность переключения частот на экране осциллографа (пусть и виртуального) в программе ISIS Для этого программу следует откомпилировать в hex-файл (Чип- Компиляция в HEX) При этом полезно посмотреть, как много места программа занимает в памяти

Рис 2437 Сообщение компилятора о занимаемой памяти

В программе ISIS (Proteus) я не буду загромождать чертёж светодиодами Текущую частоту можно определить по активному состоянию выходов микроконтроллера

Рис 2438 Проверка работы программы в ISIS

И  правка,  которая  понадобилась  Я  удалил  некоторые  переменные  Вот  список  оставшихся переменных

Рис 2439 Переменные в окончательном варианте программы

К вновь добавленной переменной freq, которая заняла место переменных mor_num и les_num, добавился новый макрос с тем же именем

Рис 2440 Новый макрос freq

Изменился блок инициализации в начале основного блока программы:

Рис 2441 Новый блок инициализации

Изменились начальные элементы блоков ran1-ran3:

          Рис 2442

Изменения коснулись макросов more и less:

Рис 2443 Изменения макросов

Условие в макросе less записано как freq = 255 Это связано с тем, что при вычитании единицы из этой переменной, когда она равна нулю, мы получаем не отрицательное число  (тип byte), а именно 255

Вот, вроде бы, и всё Если я что-то упустил, думаю, вы сами внесёте изменения И полезно будет, за компьютером, постараться сделать ещё один режим – изменение скважности импульсов Для этого разбейте переменную pause на pause1 и pause2 Вычитая из pause1 некоторое число, одновременно прибавьте его к pause2 Частота останется прежней, а скважность изменится

Если вы решите сделать отдельный генератор для своей лаборатории, проверьте всё на макетной плате, подгоните всё, что захочется подогнать Обязательно почитайте datasheet выбранной модели микроконтроллера У каждой модели есть свои особенности, которые могут быть не учтены в приведённых примерах Но не спешите Позже мы попробуем внести ещё ряд изменений Впрочем…

А я и так затянул рассказ об этом генераторе Хотя старался рассказать не о нём, а программе Flowcode Вы, думаю, заметили это

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты