
Лабораторный практикум по TWR-MCF5225X. Сетевое взаимодействие. Лабораторные работы 5 и 6

Система Tower

Модуль TWR-MCF5225X

TWR-MCF5225X-KIT
Freescale Tower System
![]() | Модуль TWR-MCF5225X является составной частью Freescale Tower System — модульной платформы для разработки, позволяющей быстро создавать прототипы и неоднократно использовать инструментальные средства путём изменения аппаратной конфигурации. Выведите вашу разработку на новый уровень — начните собирать свою систему Tower уже сегодня. |
Для выполнения лабораторных работ требуется модуль TWR-SER и соединительные модули.

Поиск ошибок с использованием проблемно-ориентированной отладки (Task Aware Debugging — TAD) в ИСР CodeWarrior™
В ходе данной лабораторной работы вы познакомитесь с возможностями TAD-отладки при нахождении ошибок в прикладных задачах. В проект, предназначенный для данной работы, намеренно внесена ошибка. Выполняя эту лабораторную работу, вы узнаете, каким образом можно найти и исправить данную ошибку.При выполнении этой работы демонстрируются:
- Обмен сообщения между задачами (задача протоколирования)
- Окна CodeWarrior при TAD-отладке
Пошаговая инструкция
- Если в CodeWarrior™ выполняется какое-либо приложение, остановите его (Debug > Kill).
- Откройте учебный проект, выбрав File > Open и далее указав C:/Program Files/FreescaleMQX3.4/demo/hvac_error/codewarrior/hvac_error_twrmcf52259.mcp.
Рис. 1. Каталог исходных файлов MQX - Разрешите автоматическое ведение протокола. Для этого надо открыть файл hvac.h.
- Измените определение автоматического протоколирования:
#define DEMOCFG_ENABLE_AUTO_LOGGING 0
на
#define DEMOCFG_ENABLE_AUTO_LOGGING 1 - Обратите внимание, что рядом с названиями изменённых файлов появляются красные метки, указывающие на то, что эти файлы необходимо перекомпилировать или что они «подпорчены». Перекомпилируйте программу, загрузите и запустите приложение. Делайте это так, как описано в Лабораторной работе 1 (шаги 8...15).
- Обратитесь к консоли Hyperterminal. Обратите внимание, что в окне консоли каждые 15 секунд будет выводиться строка протоколируемой информации. Такая же строка также будет выводиться в случае обновления какого-либо параметра, например желаемой температуры. Вы можете проверить это, нажав кнопку SW1.
- Нажимайте кнопку SW1 до тех пор, пока значение желаемой температуры не станет равным 24°C, а затем воспользуйтесь кнопкой SW3, чтобы снова снизить её до 20°C. Вы увидите, что со временем выдача протоколируемой информации прекратится, и данные об обновлениях выводиться не будут.
Рис. 2. Желаемая температура увеличена до 24°С, при её снижении прекращается выдача протоколируемой информации - Перед вами теперь стоит задача — используя проблемно-ориентированную отладку (TAD), отыскать ошибки и определить причину их возникновения. Чтобы увидеть данные TAD-отладки, приостановите выполнение приложения, кликнув по иконке Break (иконка в виде красного квадрата) или выбрав команду Break в меню Debug.
Рис. 3. Прерывание выполнения приложения - Затем кликните по выпадающему меню MQX. Просмотрите список доступных информационных окон и выберите то, которое по вашему предположению будет содержать данные, в наилучшей степени поясняющие, что произошло.
Рис. 4. Выпадающее меню проблемно-ориентированной отладки MQX - Одним из таких TAD-окон, которое поможет вам быстро получить обзорную информацию о состоянии приложения, является окно Task Summary (Основные параметры задачи) или Check for Errors (Проверка на наличие ошибок).
Рис. 5. Окно Task Summary (Основные параметры задачи)
Решение
Задача управления HVAC-системой (HVAC Task) для передачи данных в задачу ведения протокола (Logging Task) использует MQX-сообщения (см. функции HVAC_LogCurrentState() и Log() в файлах HVAC_Util.c и Logging_Task.c). Задача управления HVAC-системой, будучи отправителем сообщений, полагает, что каждое сообщение «переваривается» задачей ведения протокола и удаляется из пула (накопителя) сообщений после распечатки текста на консоли.Из кода ошибки HVAC-задачи, находящегося в окне Task Summary, которое показано на Рис.5, становится ясно, что сообщение не может быть отправлено, поскольку пул сообщений полон. Вы можете проверить это предположение, открыв TAD-окно Message Pools (Пулы сообщений) (см. Рис.6) и дважды кликнув на надписи, обозначающей один имеющийся пул, чтобы открыть окно, показанное на Рис.7.

Рис. 6. Окно Message Pool Summary (Основные параметры пула сообщений)

Рис. 7. Проверенный пул сообщений (после двойного клика по записи пула)
Пул сообщений исчерпан. Проблема в принимающей стороне, поскольку всегда именно она отвечает за повторное использование объекта «сообщение» или за его освобождение, если надобности в этом объекте больше нет.
Из кода функции Logging_task(), которая находится в файле Logging_task.c, можно увидеть, что за приём сообщения отвечает строка:
msg_ptr = _msgq_receive(log_qid,0)
После этого данные, содержащиеся в сообщении (текст протокола), распечатываются, за что ответственна строка:
print(msg_ptr -> MESSAGE);
Здесь недостаёт удаления сообщения после вывода на печать текста протокола:
_msg_free(msg_ptr);
Добавьте эту строку, перекомпилируйте и запустите приложение. Теперь память сообщений будет освобождаться после их распечатки.

Рис. 8. Корректный код

Мост «Ethernet — Последовательный порт», Freescale MQX RTCS
В данной лабораторной работе показывается, как создать мост между TCP/IP-подключением (telnet) и каналом последовательной передачи данных.При выполнении этой работы демонстрируются:
- Стек TCP/IP MQX RTCS
- Реализация пользовательского сервера telnet
- Перенаправление линий STDIN и STDOUT в MQX-задаче
Пошаговая инструкция
- Обеспечьте следующие подключения между компьютером и системой Tower:
- Между USB-отладчиком (J17 на модуле TWR-MCF5225X) и USB-портом компьютера.
- Между последовательным портом модуля TWR-SER и последовательным портом компьютера (последовательный кабель в поставку не входит).
- Ethernet-соединение между модулем TWR-SER и портом Ethernet на вашем компьютере.
- При первом подключении кабеля USB-отладчика к компьютеру, Windows автоматически установит драйвер отладчика. Для автоматического обнаружения и установки драйвера следуйте появляющимся указаниям.
- Откройте проект, выбрав File > Open и далее указав C:/Program Files/FreescaleMQX3.4/demo/telnet_to_serial/codewarrior/telnet2ser_twrmcf52259.mcp.
Рис. 9. Каталог исходных файлов MQX - По умолчанию для платы задан IP-адрес 169.254.3.3. Обычно при непосредственном подключении платы к компьютеру он автоматически устанавливает IP-адрес в той же самой подсети, к которой относится плата (169.254.x.x), поэтому настройка не требуется. Примечание: для автоматического задания IP-адреса и установления соединения компьютеру может потребоваться несколько минут.
Однако при проблемах с установкой соединения вы можете задать IP-адрес компьютера вручную. Выберите Start > Settings > Network Connections > Local Area Connection. Запомните оригинальные настройки TCP/IP вашего компьютера, а затем задайте свой IP-адрес 169.254.3.4 и маску подсети 255.255.0.0. - Откройте файл config.h в окне CodeWarrior, как показано на Рис.9, дважды кликнув по названию файла в папке Source дерева проектов CodeWarrior.
- Найдите строку программы, начинающуюся с #define ENET_IPADDR, и задайте IP-адрес целевой платы, используя макрос IPADDR. Присвойте IP-адресу значение 169.254.3.3, строка должна выглядеть следующим образом:
#define ENET_IPADDR IPADDR(169,254,3,3). - Точно также задайте значение маски IP-адреса ENET_IPMASK:
#define ENET_IPMASK IPADDR(255,255,0,0) - Перекомпилируйте код, загрузите, запустите приложение и откройте окно Hyperterminal, как это делалось в шагах 8...15 Лабораторной работы 1.
- Запустите на компьютере сеанс командной строки (Start > Programs > Accessories > Command Prompt). В командной строке вызовите telnet-сессию с платой, напечатав telnet 169.254.3.3. Тем самым вы подключитесь к оболочке MQX через telnet.
- Теперь сессии консоли последовательной передачи данных и telnet должны быть «соединены мостом». Напечатайте несколько символов в окне telnet-сессии. Вы увидите, как эти символы появляются в окне консольного терминала. На Рис.10 показано, как это будет выглядеть.
Рис. 10. Мост «Ethernet — Последовательный порт» - Потом попробуйте попечатать в окне консольного терминала, и вы увидите символы, появляющиеся в сессии telnet.
Узнайте больше
Получить дополнительную информацию о MQX и решениях Freescale можно, посетив страницы www.freescale.com/mqx и www.freescale.com/tower.Freescale и логотип Freescale являются товарными знаками или зарегистрированными товарными знаками компании Freescale Semiconductor, Inc. в США и других странах. Названия всех остальных товаров и услуг являются собственностью их владельцев. © Freescale Semiconductor, Inc. 2009.
Электронные компоненты Freescale >>>
О компании Freescale >>>