Цель работы
Ознакомиться с интегрированной средой программирования keil-C и получить навыки работы с текстовым редактором этой программы. Получить навыки работы с программными проектами интегрированной среды программирования keil-C для микроконтроллеров семейства MCS-51. Научиться транслировать программы, написанными на языке программирования C-51, и получать загрузочные файлы микроконтроллера. Ознакомиться с основами работы отладчика программ в интегрированной среде программирования keil-C и получить навыки работы с ним.
Подготовка к выполнению работы
Изучить следующие вопросы:
- Построение файловой системы персонального компьютера;
- Особенности работы текстовым редактором μ-vision;
- Создание и сохранение текстовых файлов в этом редакторе;
- Ознакомиться с порядоком создания программного проекта в интегрированной среде программирования keil-C;
- Изучить настройку свойств программного проекта в менеджере проектов интегрированной среды программирования keil-C;
- Изучить использование окна управления программным проектом в интегрированной среде программирования keil-C;
- Изучить методы трансляции отдельных файлов в интегрированной среде программирования keil-C;
- Изучить методы трансляции программного проекта в интегрированной среде программирования keil-C;
- Изучить работу отладчика программ в интегрированной среде программирования keil-C;
Методические указания по использованию интегрированной среды программирования keil-C
В настоящее время программа пишется на одном из языков программирования в виде текстового файла. Это означает, что для создания исходного текста программы можно воспользоваться любым текстовым редактором. Для того, чтобы программа-транслятор могла преобразовать исходный текст программы в машинные коды микропроцессора, этот текст программы должен быть записан с использованием символов ASCII или ANSI таблиц. К сожалению, некоторые текстовые редакторы для увеличения возможностей редактирования используют для записи текстов формат rtf, или свои собственные форматы (например редактор MS WORD). Такие текстовые файлы не понимаются программами-трансляторами и, следовательно, не могут быть использованы для записи исходного текста программы.
Для облегчения процесса разработки программы часто используются интегрированные среды программирования. В состав интегрированной среды программирования включается определенный набор программных средств: редактор исходного текста, трансляторы с выбранного языка программирования, редакторы связей, загрузчики и так далее. Редактор текстов обычно является первой программой, которую приходится использовать в процессе разработки программ: благодаря нему пользователь получает возможность набирать исходные тексты программ, написанных на ассемблере или на каком-нибудь языке высокого уровня и сохранять их на жёстком диске.
Работа с текстовым редактором интегрированной среды программирования keil-С
Работа с текстовыми файлами начинается с создания нового файла. Создать текстовый файл можно несколькими способами. Первый способ — воспользоваться главным меню среды программирования keil-C, как это показано на рисунке 1.
Рисунок 1. Создание нового файла программы через главное меню
Второй способ — использовать быстрые клавиши Ctrl+N. И третий способ — это нажать на пиктограмму создания нового файла, как это показано на рисунке 2.
Рисунок 2. Создание нового файла при помощи пиктограммы
После выполнения этих действий открывается окно текстового редактора среды программирования keil-C, в котором можно вводить исходный текст программы. Внешний вид среды программирования keil-C с открытым окном текстового редактора приведен на рисунке 3.
Рисунок 3. Вид программы с открытым окном текстового редактора
После открытия окна создания нового файла можно вводить исходный текст программы. Ввод программы производится при помощи клавиатуры или копированием участков программы из других программных проектов. Программа пишется на языке программирования C-51 или ASM-51. Стирание одиночных ошибочно введённых символов возможно при помощи кнопок “Delete” и “Backspace”. Набрав исходный текст программы в окне текстового редактора, файл необходимо сохранить на диске компьютера. Для этого можно воспользоваться командой сохранения файла из меню "файл", как это показано на рисунке 4:
Рисунок 4. Сохранение файла через главное меню
Второй способ — воспользоваться быстрыми клавишами Ctrl+S. И третий способ — это кликнуть "мышкой" по пиктограмме сохранения файла. Расположение пиктограммы сохранения файла в среде программирования keil-C приведено на рисунке 5. При вводе имени сохраняемого файла, обязательно должно быть указано расширение (*.c). Его следует вводить вручную, так как в выпадающем списке расширений нет ни одного типа расширений файлов.
Рисунок 5. Сохранение исходного текста программы при помощи пиктограммы сохранения файла
После выделения необходимого фрагмента текста, этот фрагмент копируется в буфер обмена. Скопировать можно, щёлкнув мышью по пиктограмме копирования, как это показано на рисунке 6, кроме того удобно копировать в буфер обмена комбинацией клавиш Ctrl+C.
Рисунок 6 Копирование выделенного фрагмента в буфер обмена при помощи пиктограммы
Теперь можно переключиться в окно редактирования файла, куда нужно поместить скопированный текстовый фрагмент при помощи главного меню, как это показано на рисунке 7, и вставить этот фрагмент перед текстовым курсором, вставку также можно осуществить нажатием Ctrl+V.
Рисунок 7 Выбор окна редактирования файла
Вставка фрагмента из буфера обмена может быть произведена либо из меню Edit, либо при помощи пиктограммы Paste как это показано на рисунке 8. Фрагмент исходного текста будет вставлен в то место набираемого текста, где в настоящее время находится курсор.
Рисунок 8 Вставка скопированного фрагмента из буфера обмена при помощи пиктограммы
Следует помнить, что копирование участка исходного текста программы эквивалентно набору этого текста программы с клавиатуры и поэтому файл, в который производилось копирование текста, необходимо сохранить на диске любым из методов, описанных ранее.
Структура программных проектов и их поддержка
На первом шаге разработки программных средств формулируются технические требования к системе, и составляется блок-схема процесса решения нужных задач, которая обеспечит реализацию заданных требований. Блок-схема должна быть надлежащим образом структурирована, чтобы гарантировалась высокая эффективность логики программ.
Для того чтобы было легко ориентироваться в файлах на компьютере, каждую задачу помещают в отдельную директорию (папку). Написание исходного текста программы тоже следует начинать в отдельной папке, тем более что как будет показано далее, даже простейшая программа состоит из нескольких файлов.
В большинстве случаев программа состоит из нескольких программных модулей. Использование в составе одной программы нескольких программных модулей позволяет увеличить скорость трансляции программ, поручать написание программных модулей различным программистам, увеличивать понятность программ.
Принцип разбиения единой программы на программные модули заключается в том, что для реализации работы с отдельными узлами аппаратуры пишутся отдельные подпрограммы, которые относительно слабо связаны с остальными частями программы. Эти подпрограммы можно выделить в отдельную программу, которую можно хранить в отдельном файле, и транслировать отдельно от остальной программы. Часто одни и те же модули могут входить в состав нескольких программ, выполняющих различные задачи, но использующие при этом одни и те же устройства.
В качестве примера можно назвать работу с клавиатурой, индикацию различных видов информации, работу с последовательными портами, с АЦП, с ЦАП. Каждое из этих устройств может обслуживаться отдельными программными модулями. Этот список можно продолжать и далее, но для составления представления о программных модулях этого достаточно.
Программные проекты можно создавать, и поддерживать вручную, но в последнее время обычно используются различные системы поддержки разработок. Это создаёт ряд дополнительных преимуществ.
Часто программа пишется, и отлаживается на одной аппаратуре (например, на оценочных платах, предлагаемых фирмами изготовителями микросхем), а используется на другой. При этом программа при отладке незначительно отличается от программы, которая будет использоваться в реальной аппаратуре. Для этого в составе программного проекта создаются назначения проекта. В качестве примера назначений программного проекта можно назвать отладку и реализацию, а также версии программы.
Для облегчения процесса разработки программы часто используются системы поддержки разработок. В состав систем поддержки разработок включается определенный набор программных средств: редакторы текстов, ассемблер, редакторы связей, компиляторы, загрузчики и тому подобное. Каждая из этих программ создаёт свой файл (или свои файлы) на диске компьютера. Для того чтобы не запутаться в этих файлах при разработке программы, все эти файлы размещаются в своей, отдельной директории. Имя этой директории обычно назначают по имени программно-аппаратного проекта. Например: измеритель характеристик транзисторов или цифровой осциллограф.
Создание программных проектов в интегрированной среде программирования keil-C
Работа с программными проектами начинается с создания нового файла проекта. Для создания файла проекта в интегрированной среде разработки программ можно воспользоваться главным меню, как показано на рисунке 9.
Рисунок 9. Меню создания нового программного проекта
После создания новой директории и нового файла программного проекта, интегрированная среда программирования предлагает выбрать конкретную микросхему из семейства MCS-51, как это показано на рисунке 10.
Рисунок 10. Диалоговое окно выбора микросхемы для программного проекта
После нажатия кнопки "OK", будет предложено добавить в рабочую папку и включить в проект ассемберный файл начальной инициализации микроконтроллера (Copy Analog Devices Startup Code to Project Folder and Add File to Project?). Следует выбрать вариант ответа "Нет".
Рисунок 11. Диалоговое окно добавления ассеблерного файла инициализации
При этом в интегрированной среде программирования окно менеджера проекта приобретает вид, показанный на рисунке 12. Название назначения программного проекта можно изменить, щёлкнув манипулятором “мышь” по названию назначения программного проекта в окне менеджера проекта (Например: отладка, реализация или сопровождение). Точно так же можно изменить название устройства в составе программного проекта (Например: носимая радиостанция, автомобильная радиостанция, стационарная радиостанция или базовая радиостанция).
Рисунок 12. Внешний вид окна менеджера проекта после создания программного проекта
3.4.4 Настройка свойств программного проекта в интегрированной среде программирования keil-С.
После создания программного проекта в интегрированной среде программирования keil-C конечным файлом трансляции является абсолютный файл. Для загрузки в микросхему обычно используется *.hex файл. Для создания этого файла необходимо включить соответствующую опцию в свойствах программного проекта.
Рисунок 13. Изменение свойств программного проекта через главное меню
Изменить свойства программного проекта можно несколькими способами. Первый способ — воспользоваться главным меню, как показано на рисунке 13. Второй способ — это нажать на кнопку изменения свойств программного проекта, как показано на рисунке 15.
Рисунок 14. Изменение свойств программного проекта при помощи пиктограммы
При этом на экране компьютера появляется диалоговое окно изменения свойств программного проекта как показано на рисунке 15. В этом окне необходимо ввести параметры внешней памяти программ и памяти данных.
Рисунок 15. Диалоговое окно настройки свойств программного проекта
Затем необходимо установить выходные параметры программного проекта. Для этого открываем закладку выход (Output), как это показано на рисунке 16. В этой закладке убеждаемся, что установлена галочка создания выходного загрузочного файла в *.hex формате. Для того чтобы не загромождать директорию проекта файлами объектных кодов можно создать отдельную директорию. Например, с названием OBJ. Новая директория может быть создана после нажатия на кнопку “Select Folder for Object”.
Точно так же можно создать директорию (папку) для файлов листингов. Для этого необходимо выбрать закладку “Listing”. В файлах листингов помещается информация об ошибках, ассемблерный код и соответствующий ему машинный код программного модуля. Использование листингов позволяет оптимизировать программу, а при работе без интегрированной среды программирования и находить синтаксические ошибки программы. Отметим, что создание файлов листингов замедляет процесс трансляции. Обычно имя для папки листингов выбирают LST.
Необходимость создания отдельных папок для листингов и объектных кодов возникает при большом количестве программных модулей, а значит при большом количестве файлов в одной папке. Обычно директории для листингов и для объектных кодов располагают внутри папки программного проекта, где содержатся исходные тексты программы.
Для настройки параметров компиляции выбирается закладка “C51”. В этой закладке настраивается уровень оптимизации транслируемого программного модуля и цель оптимизации (по скорости работы программы или по размеру выходного файла). Кроме того, в этой закладке заносится адрес векторов прерывания.
После настройки свойств программного проекта в диалоговом окне, это окно закрывается нажатием кнопки “OK”.
Рисунок 16. Диалоговое окно настройки выходных параметров программного проекта
Теперь можно подключать к программному проекту файлы с исходным текстом программных модулей. Для этого можно щёлкнуть правой кнопкой мыши по значку группы файлов в окне менеджера проектов, как это показано на рисунке 17, и выбрать опцию добавления файлов к программному проекту. Добавляемые файлы должны быть предварительно созданы. Если файлом является программа на языке С, то этот файл должен иметь расширение *.c. Например LAB1.c. Если проект состоит из нескольких программных модулей, опцию добавления файлов следует повторить соответствующее число раз.
Рисунок 17. Всплывающее меню менеджера проектов с выбранной опцией добавления файлов к программному проекту
После завершения создания программного проекта можно открыть исходные тексты программных модулей, щёлкнув левой кнопкой мыши на названии соответствующего файла в окне менеджера проектов.Точно так же можно переключаться между программными модулями проекта, используя окно менеджера проектов. В случае необходимости можно выключать окно менеджера программных проектов, но обычно это окно удобно при написании программы.Если окно менеджера проектов отключено, то переключаться между модулями можно, используя меню "window".
Трансляция программных модулей
Как уже указывалось, программный проект может состоять из нескольких файлов. В программном проекте, состоящем из нескольких файлов, появляется возможность нескольких видов трансляции. Прежде всего, можно оттранслировать только один файл, не транслируя остальные файлы программного проекта. Это позволяет обнаружить, и исправить все синтаксические ошибки в отдельном программном модуле. При трансляции каждого программного модуля на жёстком диске формируются перемещаемый файл в объектном формате, который затем будет использоваться для создания загрузочного файла программного проекта. Этот файл называется объектный модуль. Одновременно с объектным модулем на диске формируется файл листинга программного модуля, в который помещается исходный текст программного модуля и сообщения о синтаксических ошибках.
При трансляции программного модуля, написанного на языке программирования ассемблер, в листинг помещаются машинные коды команд процессора, и их адрес относительно начала программного модуля.
При трансляции исходного текста программы, написанной на языке программирования высокого уровня, таком как C программа транслятор может быть настроена так, что она будет создавать файл с текстом исходного модуля, написанного на ассемблере или помещать этот текст в листинг программного модуля. Таким образом, появляется возможность писать, и отлаживать программу на языке высокого уровня, а затем переводить её на язык программирования ассемблер и оптимизировать её вручную.
Связывание объектных модулей и получение загрузочного файла
После того, как оттранслированы без ошибок все программные модули, и тем самым получены файлы объектных модулей, производится трансляция всего программного проекта (связывание объектных модулей). При этом на диске формируются абсолютный и загрузочный файлы программного проекта. Для контроля ошибок связывания формируется файл листинга редактора связей с расширением .m51.
Если обнаруживаются ошибки связывания, то абсолютный и загрузочный файлы программного проекта не формируются. В этом случае необходимо изменить исходный текст программного модуля из за которого возникла ошибка связывания, оттранслировать его и снова попытаться произвести трансляцию программного проекта (связывание объектных модулей). После получения загрузочного модуля можно начинать отладку программы.
Трансляция программных проектов в интегрированной среде программирования keil-C
Интегрированная среда программирования позволяет максимально облегчить трансляцию программных проектов. Так как параметры программного проекта уже настроены, то для трансляции исходного текста программного модуля достаточно загрузить исходный текст этого программного модуля в окно текстового редактора. Это можно сделать одним из способов рассмотренных ранее.
После загрузки исходного текста программного модуля достаточно нажать на кнопку трансляции программного модуля, как это показано на рисунке 18.
Рисунок 18. Трансляция программного модуля при помощи кнопки трансляции файла
Ещё один способ трансляции программного модуля, это воспользоваться главным меню, как это показано на рисунке 19.
Рисунок 19. Трансляция программного модуля при помощи главного меню
Надо отметить, что в составе интегрированной среды программирования для поиска синтаксических ошибок удобнее пользоваться не файлом листинга, а окном "build"(расположено внизу рабочей области), где выводятся все сообщения об ошибках. При этом если дважды щёлкнуть мышью по сообщению об ошибке в окне "build", то в окне текстового редактора будет выделена строка программы, где была обнаружена данная ошибка.
Трансляция программного модуля и получение загрузочного файла в интегрированной среде программирования производится нажатием кнопки "Build target", как это показано на рисунке 20.
Рисунок 20. Трансляция программного модуля проекта при помощи кнопки "Build target"
Ещё один способ трансляции программного проекта в интегрированной среде программирования, это воспользоваться главным меню, как это показано на рисунке 21, но удобнее всего нажать на клавиатуре клавишу “F7”.
Рисунок 21. Трансляция программного модуля при помощи главного меню
Если же необходимо оттранслировать все программные модули вне зависимости имеются объектные модули или нет, и получить загрузочный файл, то нажимается кнопка "Rebuild all target files" или выбирается соответствующее меню.
Рисунок 22. Трансляция программного модуля проекта при помощи кнопки "Rebuild all target files"
Способы отладки программ
Отладка программ заключается в проверки правильности работы программы и аппаратуры. Программа, не содержащая синтаксических ошибок, тем не менее, может содержать логические ошибки, не позволяющие программе выполнять заложенные в ней функции. Логические ошибки могут быть связаны с алгоритмом программы или с неправильным пониманием работы аппаратуры, подключённой к портам микроконтроллера.
Встроенный отладчик позволяет отладить те участки кода программы, которые не зависят от работы аппаратуры, не входящей в состав микросхемы микроконтроллера. Для отладки программ обычно применяют три способа:
- Пошаговая отладка программ с заходом в подпрограммы;
- Пошаговая отладка программ с выполнением подпрограммы как одного оператора;
- Выполнение программы до точки останова.
Пошаговая отладка программ заключается в том, что выполняется один оператор программы и, затем контролируются те переменные, на которые должен был воздействовать данный оператор.
Если в программе имеются уже отлаженные подпрограммы, то подпрограмму можно рассматривать, как один оператор программы и воспользоваться вторым способом отладки программ.
Вызов встроенного отладчика удобнее всего осуществить, нажав на кнопку отладчика на панели инструментов "file" как показано на рисунке 23 или воспользоваться быстрой кнопкой Ctrl+F5
Рисунок 23. Вызов встроенного отладчика с использованием кнопки на панели “file”
После этого внешний вид интегрированной среды программирования принимает вид, показанный на рисунке 24. В верхней части программы появляется дополнительная панель инструментов отладчика программ (рисунок 25). В нижней части программы появляется окно просмотра памяти контроллера и окно контроля переменных "Watch".
Рисунок 24. Внешний вид интегрированной среды программирования в режиме отладки программ
Рисунок 25. Внешний вид интегрированной среды программирования в режиме отладки программ
Окно просмотра памяти контроллера можно настроить на просмотр памяти программ или памяти данных, введя в диалоговое окно “адрес” ключ, двоеточие и адрес начальной ячейки памяти. Например:
d:0 — просмотреть память данных начиная с нулевой ячейки;
c:0 — просмотреть память программ начиная с нулевой ячейки;
x:0 — просмотреть внешнюю память данных начиная с нулевой ячейки.
При использовании встроенного отладчика программ для контроля переменных можно воспользоваться окном “Watch”. В большинстве случаев это намного выгоднее, чем использовать просмотр памяти данных. Переменные в этом окне отображаются в том формате, в котором они были объявлены в программе. Для добавления переменной в окно “Watch” достаточно щёлкнуть правой кнопкой мыши по переменной в тексте программы в окне отладчика программ, как это показано на рисунке 26.
Рисунок 26. Всплывающее окно добавления переменной в окно просмотра “Watch”
При отладке программ на языке программирования ассемблер очень важно контролировать содержимое внутренних регистров микроконтроллера. Это позволяет сделать закладка "Regs" в окне менеджера проектов, показанная на рисунке 25 ( левая рабочая область). В этом окне можно проконтролировать содержимое регистров текущего банка, указателя стека и программного счётчика, содержимое аккумуляторов A и B, а также состояние рабочих флагов микроконтроллера в регистре PSW.
Один оператор программы может быть выполнен нажатием кнопки F11. Если вызов подпрограммы рассматривается как один оператор, то пошаговая отладка программы осуществляется нажатием кнопки F10.
Использование точек останова позволяет пропускать уже отлаженную часть программы. Для того, чтобы установить точку останова, можно воспользоваться кнопкой (Insert/remove Breakpoint) на панели файлов или воспользоваться главным или всплывающим меню. Перед тем как нажать на кнопку установки точки останова, необходимо установить курсор на строку исходного текста программы, где необходимо остановить выполнение программы.
Точка останова устанавливается в местах, где необходимо проверить содержимое переменных или просто проконтролировать, передаётся ли управление данному оператору.
После того, как установлены все необходимые точки останова осуществляется выполнение программы в свободнобегущем режиме. Для этого можно воспользоваться кнопкой (Run) или нажать на кнопку F5 на клавиатуре.
Может возникнуть ситуация, что программа не передаёт управление ни одному из операторов, на которых установлены точки останова. В этом случае для прекращения выполнения программы следует воспользоваться кнопкой (Halt) или нажать на кнопку Esc на клавиатуре.
Точка останова может быть использована многократно. Иногда же возникает необходимость однократно пропустить часть операторов. В этом случае можно воспользоваться кнопкой выполнения программы до курсора (Run to Cursor line). При нажатии на эту кнопку программа будет выполняться до тех пор, пока управление не будет передано оператору, на котором находится курсор. Как только это произойдёт, выполнение программы будет остановлено, и можно будет проконтролировать переменные и продолжить выполнение программы в пошаговом или свободнобегущем режиме.
Задание к работе
- Войдите в интегрированную среду программирования
- Создайте новый файл исходного текста программы. Имя файла может быть например L1.c (расширение *.c обязательно)
- Создайте проект с именем LAB1
- Добавьте в проект файл с программой
- Настройте его параметры в соответствии с заданием с вашим вариантом
- Оттранслируйте программный проект
- Убедитесь, что при трансляции программного модуля не обнаружены синтаксические ошибки
- Убедитесь, что в директории проекта созданы загрузочный файл с расширение *.lst и загрузочный hex-файл с расширением *.hex.
- Выполните пошаговую отладку программы с использованием кнопки F11. На каждом шаге выполнения программы запишите значения используемых переменных программы: A[i] и S
Номер варианта | Уровень оптимизации | Цель оптимизации | Формировать листинг | Микроконтроллер |
---|---|---|---|---|
1 | 1 | Размер кода | с ассемблерным кодом | AduC812 |
2 | 2 | Скорость работы | с таблицей символов | At89c52 |
3 | 3 | Скорость работы | с таблицей символов | At89s53 |
4 | 4 | Размер кода | с таблицей символов | AduC834 |
5 | 5 | Размер кода | с ассемблерным кодом | DS89c420 |
6 | 6 | Размер кода | с ассемблерным кодом | At89c55 |
7 | 7 | Скорость работы | с таблицей символов | At89s51 |
8 | 8 | Размер кода | с таблицей символов | At89LV55 |
9 | 1 | Скорость работы | с ассемблерным кодом | AduC812 |
0 | 2 | Размер кода | с таблицей символов | At89s51 |
Методические указания к выполнению работ
- Включите компьютер и вызовите интегрированную среду программирования, щелкнув мышью по пиктограмме
- Создайте новый файл исходного текста программы
- Введите заданный исходный текст программы, используя клавиатуру
- Откройте диалоговое окно сохранения файла, щелкнув мышью по пиктограмме
- Создайте новую папку с именем LAB1. Для этого щёлкните мышью по пиктограмме
- Введите имя файла, например L1.c (расширение файла должно быть обязательно *.с), и нажмите на кнопку клавиатуры Enter
- Создайте новый проект. Для этого выберите подменю "New project" из меню project". Выберите папку размещения нового проекта – LAB1. Укажите имя проекта, например, L1
Содержание отчета
- Цель работы;
- Исходный текст программы;
- Cтруктура программного проекта;
- Порядок создания загрузочного модуля;
- Файл листинга (файл с расширением *.lst);
- Распечатка загрузочного файла (с расширением *.hex);
- Таблица значений переменных программы на каждом шаге выполнения
- Выводы.
Контрольные вопросы
- Что такое среда программирования?
- Состав среды программирования keil-C
- Каким образом производится программирование микроконтроллера?
- Что такое программный проект?
- Состав программного проекта?
- Способы управления программным проектом?
- Зачем нужен программный модуль?
- Из каких файлов состоит программный модуль?
- Как оттранслировать отдельный программный модуль?
- Как получить объектный модуль?
- Этапы создания проекта в интегрированной среде программирования keil-C?
- Особенности настройки программного проекта
- Особенности работы с текстовым редактором keil-C
- Что такое менеджер проекта и зачем он нужен?
- Виды трансляции?
- Что такое редактор связей и зачем он нужен?
- Что такое отладчик и зачем он нужен?
- Виды отладки программ. Что контроллируется в процессе отладки?
- Что такое дамп памяти и как им пользоваться?
- Виды адресного пространства в микроконтроллерах MCS-51?
- Для чего служит окно "watch" в отладчике и как его настраивать
- Что такое локальные и глобальные переменные и для чего они служат?