- •Знакомство со средой разработки Eclipse
- •Начало работы в Eclipse
- •Рабочие области и проекты
- •Панели отображений
- •Режимы
- •Лабораторная работа 1. СОЗДАНИЕ ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА В СРЕДЕ ECLIPSE
- •1.1. Работа с проектами
- •1.1.1 Создание нового проекта
- •1.1.2. Добавление файлов, необходимых для сборки проекта
- •1.2. Работа с исходными текстами программ
- •1.3. Построение программы
- •1.4. Подготовка к отладке программы
- •1.5. Отладка программы
- •Лабораторная работа 2. СОЗДАНИЕ ПРОГРАММ НА ЯЗЫКЕ СИ В СРЕДЕ ECLIPSE
- •Приложения
- •1. Текст скелетного файла на языке ассемблера
Лабораторная работа 2. СОЗДАНИЕ ПРОГРАММ НА ЯЗЫКЕ СИ В СРЕДЕ ECLIPSE
Цель работы: освоение технологии создания программ на языке высокого уровня.
Задание
1.Создать проект.
2.Набрать исходный текст программы из прил. 3.
3.Отладить программу.
Язык Си в настоящее время является наиболее популярным языком программирования для микроконтроллеров. Несмотря на то, что Си считается языком высокого уровня, он позволяет достаточно просто работать на уровне оборудования: выполнять такие низкоуровневые операции, как работа с ячейками памяти, арифметические, логические, сдвиговые операции, почти так же просто, как на языке ассемблера. Использование Си позволяет сократить время разработки встроенного программного обеспечения и повысить его качество.
Порядок выполнения работы
Создайте новый проект аналогично 1.1.1. Импортируйте в проект заго- товочные файлы для проекта на языке Си из директории, указанной преподавателем, аналогично 1.1.2.
Краткое описание некоторых из заготовочных файлов для проекта на языке Си приведено в таблице.
Имя файла |
Описание |
|
|
Board.h |
Файл описания целевой платы, на которой находится |
|
микроконтроллер |
|
|
AT91SAM7S64.h |
Файл с макроопределениями адресов различных периферийных |
|
устройств, структурами данных, описывающих эти устройства, и |
|
различными константами для микроконтроллера AT91SAM7S64 |
|
|
lib_AT91SAM7S64.h |
Библиотека вспомогательных функций от производителя |
|
микроконтроллера |
|
|
Cstartup.S |
Исходный код на языке ассемблера, подготавливающий процессор |
|
для передачи управления машинному коду, полученному путём |
|
трансляции исходного текста на языке Си |
|
|
Cstartup_SAM7.c |
Исходный код функции, инициализирующей периферийное |
|
оборудование микроконтроллера |
|
|
23
Для того чтобы начать набор программы на языке Си, необходимо добавить в проект файл с расширением «.c». Система автоматизации сборки обнаружит этот файл при построении проекта и выполнит его компиляцию.
Щёлкните правой клавишей мыши, расположив ее курсор над именем проекта в обозревателе проектов. Выберите пункты меню New → File.
В появившемся окне введите в поле «File Name» имя файла, например «Lab1.с». Нажмите кнопку «Finish».
Наберите в редакторе текст программы, представленной в прил. 3. Убедившись, что построение проекта проходит без ошибок, подготовьте профиль отладки, аналогично описанному в 1.4. Выполните отладку в соответствии с 1.5.
Отчет должен содержать:
1.Титульный лист и задание.
2.Алгоритм работы программы.
3.Описание переменных.
4.Описание использованных регистров.
5.Листинг программы.
6.Описание технологии разработки и отладки программ на языке Си.
24
Приложения
1. Текст скелетного файла на языке ассемблера
.include "at91sam7s64.inc"
@--------------------------------------------------------------- |
|
|
.text |
@ Объявляем область исполняемого кода |
|
.section .text.vectors @ |
Далее - таблица векторов |
|
|
@ |
прерываний |
ResetVector: @ Первый вектор - вектор сброса
b start @ При сбросе контроллера - переход на метку start
@---------------------------------------------------------------
.section .text.program @ Далее идёт основная программа
start: |
|
|
b start; |
|
@ Цикл |
@--------------------------------------------------------------- |
|
|
.data |
|
@ Область данных |
var1: |
|
@ По метке var1 резервируем место под |
.word |
0 |
@ 32-битную целочисленную переменную |
array: |
|
@ По метке array резервируем место под |
.rept |
3 |
@ массив переменных размером в три |
.word |
0 |
@ 32-битных числа |
.endr |
|
|
@--------------------------------------------------------------- |
|
|
.end |
|
@ Директива конца программы |
25
2.Пример программы
@Программа демонстрации работоспособности
@микроконтроллера AT91SAM7S64 на отладочной плате SAM7-P64
.include "at91sam7s64.inc"
@---------------------------------------------------------------
.text |
@ |
Объявляем область исполняемого кода |
.section .text.vectors |
@ |
Далее - таблица векторов прерываний |
ResetVector: @ Первый вектор - вектор сброса
b start @ При сбросе контроллера - переход на метку start
@---------------------------------------------------------------
.section .text.program
@ Подготавливаем периферию
start: |
|
|
mov |
r0, #0x040000 |
@ Используем PA18 |
ldr |
r1, =PIOA_PER |
@ Загружаем адрес PIO Enable Register |
str |
r0, [r1] |
@ Использовать режим общего дискр. вв/в. |
ldr |
r1, =PIOA_OER |
@ Загружаем адрес регистра |
|
|
@ Output Enable Register |
str |
r0, [r1] |
@ Используем PA18 как выход |
blink: @ Мигаем |
|
|
ldr |
r1, =PIOA_SODR @ Загружаем адрес Set Output Data Register |
|
str |
r0, [r1] |
@ Включаем выход / светодиод гаснет |
bl |
wait |
@ Пауза |
ldr |
r1, =PIOA_CODR |
@ Загружаем адрес Clear Output Data Reg. |
str |
r0, [r1] |
@ Выключаем выход / светодиод зажигается |
bl |
wait |
@ Пауза |
b |
blink |
@ Повторяем мигание |
@--------------------------------------------------------------- |
|
|
@ Подпрограмма задержки |
|
|
wait: |
|
|
ldr |
r4, =0 |
@ Инициализируем r4 нулём |
.Lwait: |
|
|
add |
r4, #1 |
@ Инкремент |
cmp |
r4, #0x100000 |
@ Сравнить с числом |
bne |
.Lwait |
@ Если не равно, считаем дальше |
mov |
pc, lr |
@ Если равно, выходим из подпрограммы |
@--------------------------------------------------------------- |
|
|
.end |
|
@ Директива окончания текста программы |
|
|
|
|
|
26 |
3.Пример программы на языке Си
//Программа демонстрации работоспособности микроконтроллера
//AT91SAM7S64 на отладочной плате SAM7-P64.
//Программа определяет нажатую на плате кнопку и зажигает
//соответствующий ей светодиод.
#include "Board.h"
//Массив масок для ножек микроконтроллера,
//к которым подключены светодиоды.
static const int ledMask[2]= {LED1, LED2};
//Указатель на структуру, предназначенную для
//управления контроллером параллельного ввода-вывода (PIO) static AT91PS_PIO pioa = AT91C_BASE_PIOA;
//Указатель на структуру, управляющую контроллером питания
(PMC).
//Через него включается тактирование PIO, необходимое для
//считывания состояния кнопок, находящихся на отладочной плате. static AT91PS_PMC pmc = AT91C_BASE_PMC;
//Подготовка к работе со светодиодами
void setUpLeds (void)
{
//Указываем, что ножками, к которым подключены светодиоды,
//управляет PIO, а не встроенная периферия.
pioa->PIO_PER = LED_MASK;
//Ножки будем использовать как выходы
//(для подачи напряжения).
pioa->PIO_OER = LED_MASK; // Гасим светодиоды pioa->PIO_SODR = LED_MASK;
}
// Подготовка к работе с кнопками void setUpButtons (void)
{
//За кнопки отвечает PIO. По умолчанию соответствующие //ножки сконфигурированы как входы.
pioa->PIO_PER = SW_MASK;
//Включаем тактирование PIO.
//Без этого не удастся прочитать состояния кнопок. pmc->PMC_PCER = 1 << AT91C_ID_PIOA;
}
27
//Зажечь светодиод с указанным номером (нумерация от нуля)
//и погасить все остальные
void indicate (int index)
{
// Зажечь светодиод pioa->PIO_CODR = ledMask[index];
// Погасить все остальные.
pioa->PIO_SODR = (~ledMask[index]) & LED_MASK;
}
//Определить номер нажатой кнопки (нумерация от нуля).
//Функция возвращает номер кнопки или -1, если никакая
//кнопка не нажата.
int pressedButtonIndex (void)
{
// Прочитать состояния ножек
unsigned int pinsStatus = pioa->PIO_PDSR;
//Поскольку нажатая кнопка обозначается нулевым битом
//в соответствующем ножке разряде, то выполняем логическое
//НЕ перед выполнением операции "И" c маской ножки.
if ((~pinsStatus) & SW1) return 0;
if ((~pinsStatus) & SW2) return 1;
return -1;
}
// Начало программы на Си int main(void)
{
//Подготовить светодиоды setUpLeds();
//Подготовить кнопки setUpButtons();
//Индекс нажатой кнопки int buttonIndex = -1;
//Вечный цикл
while (1)
{
//Определить, нажата ли кнопка, и какая. buttonIndex = pressedButtonIndex ();
//Если нажата
28
if (buttonIndex >=0)
{
// Зажечь светодиод у этой кнопки, погасив другой indicate(buttonIndex);
}
}
}
29
4. Справочник по «горячим» сочетаниям клавиш среды разработки
Eclipse
Для повышения эффективности работы в среде Eclipse рекомендуется использовать «горячие» сочетания клавиш (hotkeys). Запомните и применяйте наиболее часто используемые из них. Для быстрой справки по сочетаниям клавиш нажмите Ctrl + Shift + L.
Общие: |
|
|
Ctrl + Shift + L – |
Вызов быстрой справки по «горячим» сочетаниям клавиш |
|
Ctrl + C – |
Копировать выделенный фрагмент текста в буфер обмена |
|
Ctrl + X – |
Вырезать выделенный фрагмент текста в буфер обмена |
|
Ctrl + V – |
Вставить текст из буфера обмена |
|
Ctrl + D – |
Удалить текущую строку |
|
Ctrl + F – |
Вызов диалога поиска/замены |
|
Ctrl + Q – |
Перейти к последнему месту редактирования файла |
|
Ctrl + Home – |
Переход в начало файла |
|
Ctrl + End – |
Переход в конец файла |
|
Alt + ← – |
Назад (переход к предыдущему виду/позиции курсора в файле) |
|
Alt + → – |
Вперёд (переход к следующему виду/позиции курсора в файле) |
|
Ctrl + Z – |
Отменить последнее действие |
|
Ctrl + Y – |
Повторить отменённое действие |
|
Ctrl + F6 – |
Переключение между вкладками редактора |
|
Ctrl + F8 – |
Переключение между режимами (редактирования/отладки) |
|
F9 |
– |
Построить программу |
В режиме отладки: |
|
|
F11 |
– |
Запуск отладки |
F5 |
– |
Шаг с заходом |
F6 |
– |
Шаг с обходом |
F7 |
– |
Выход из подпрограммы |
F8 |
– |
Возобновить выполнение программы |
Ctrl + R – |
Выполнить до курсора |
|
Ctrl + Shift + B – |
Установить / снять точку остановки |
|
Ctrl + F2 – |
Завершить отладку |
30
Содержание |
|
ОБЩИЕ СВЕДЕНИЯ .............................................................................................. |
3 |
Лабораторный стенд................................................................................................ |
3 |
Средства разработки программного обеспечения................................................ |
4 |
Знакомство со средой разработки Eclipse ............................................................. |
5 |
Начало работы в Eclipse ...................................................................................... |
5 |
Рабочие области и проекты................................................................................. |
6 |
Панели отображений ........................................................................................... |
6 |
Режимы.................................................................................................................. |
8 |
Лабораторная работа 1. СОЗДАНИЕ ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА |
|
В СРЕДЕ ECLIPSE .................................................................................................. |
9 |
1.1. Работа с проектами ....................................................................................... |
9 |
1.1.1 Создание нового проекта ........................................................................ |
9 |
1.1.2. Добавление файлов, необходимых для сборки проекта ................... |
10 |
1.2. Работа с исходными текстами программ.................................................. |
13 |
1.3. Построение программы.............................................................................. |
15 |
1.4. Подготовка к отладке программы.............................................................. |
17 |
1.5. Отладка программы .................................................................................... |
17 |
Лабораторная работа 2. СОЗДАНИЕ ПРОГРАММ НА ЯЗЫКЕ СИ В СРЕДЕ |
|
ECLIPSE ................................................................................................................. |
23 |
Приложения ........................................................................................................... |
25 |
1. Текст скелетного файла на языке ассемблера................................................. |
25 |
2. Пример программы ........................................................................................... |
26 |
3. Пример программы на языке Си...................................................................... |
27 |
4. Справочник по «горячим» сочетаниям клавиш среды разработки Eclipse . 30 |
31
Редактор Э. К. Долгатов
Подписано в печать Формат 60 84 1/16. Бумага офсетная. Печать офсетная. Гарнитура «Times New Roman». Печ. л. 2.0.
Тираж 35 экз. Заказ
Издательство СПбГЭТУ «ЛЭТИ» 197376, С.-Петербург, ул. Проф. Попова, 5
32