Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Читать онлайн Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 27 28 29 30 31 32 33 34 35 ... 150
Перейти на страницу:

R 00 00 00 00

T 00 00 00 8F С6 FF 7В 00 02 10 EF 20 FE 3F 30 С6

R 00 00 00 00

T 00 1В 80 7В 00 8F F6 00 00 87 С3 00 01 7В 00 00

R 00 00 00 00 00 07 00 02 00 0E 00 02

T 00 29 F6 00 00 C1 7А 26 ОС F6 00 00 87 41 51 7B

R 00 00 00 00 00 03 00 02

Т 00 37 00 00 79 00 00 0B

R 00 00 00 00 00 05 00 02

Заметим, что в верхней половине представленного объектного кода, содержатся директивы для программы линковщика, а в нижней половине читатель может увидеть шестнадцатеричные коды инструкций ассемблера МК семейства 68HC12.

На заключительной стадии представленный выше объектный код обрабатывается программой линковщика. В результате формируются три файла: interrupt.lst, interrupt.map и interrupt.s19.

Файл листинга программы interrupt.lst представляет собой текстовый файл, который содержит команды ассемблера, машинные коды этих команд и абсолютные адреса в памяти микроконтроллера, в которых эти коды располагаются. Сгенерированный линковщиком файл листинга представлен ниже:

            .module interrupt.c

            .area memory(abs)

            .org 0хb1е

0B1Е _      _Timer_Overflow_interrupt_vector: :

0B1Е 8044   .word _TOIISR

            .area data

0800        _second::

0800        .blkb 1

            .area idata

--- 0000 00 .byte 0

            .area data

            .area text

802А _main: :

;#include <383HC12-ver1.h>

;void TOIISR(void) ;

;#pragma interrupt_handler TOIISR()

;

;#pragma abs_address:0x0B1E

;void(*Timer_Overflow_interrupt_vector[]) ()={TOIISR};

;#pragma end_abs_address

;

;unsigned char second=0x00;

;

;void main(void)

;{

;TSCR=0x80;

802А C680   ldab #128

802С 7В0086 stab 0х86

;TMSK2=0x80;

802F C680   ldab #128

8031 7B008D stab 0x8d

;TFLG2=0x80;

8034 C680   ldab #128

8036 7B008F stab 0x8f

;DDRA=0xFF;

8039 C6FF   ldab #255

803В 7В0002 stab 0x2

;CLI();

803Е 10EF   cli

8040        L3:

8040        L4:

8040 20FE bra L3

8042        X0:

;while (1) {};

;EXIT();

8042 3F     swi

; }

8043        L2:

8043        .dbline 0; func end

8043 3D     rts

8044        _TOIISR: :

;

; void TOIISR(void) {

;TFLG2=0x80;

8044 C680    ldab #128

8046 7B008F  stab 0x8f

;second += 1;

8049 f60800  ldab _second

804C 87      clra

804D C30001  addd #1

8050 7B0800  stab _second

;if(second == 122)

8053 F60800  ldab _second

8056 C17A    cmрb #122

8058 260C    bnе L7

;{

;PORTA = ~PORTA;

; vol

805A F60000  ldab 0

805D 87      clra

805E 41      comа

805F 51      comb

8060 7B0000  stab 0

;second = 0x00;

8063 790800  clr _second

;}

8066         L7:

;}

8066         L6:

8066         .dbline 0; func end

8066 0B      rti

Файл листинга обычно используется в процессе отладки прикладной программы при выявлении несоответствий между задуманными программистом действиями и реальным ходом исполнения программного кода. Кроме того, в процессе отладки иногда полезно знать, какие коды должны быть расположены в ячейках с фиксированными адресами. Последнюю информацию наиболее удобно получить из файла карты памяти *.map (иногда этот файл называют файлом символьных меток). Пример файла карты памяти для программы sample.c приведен ниже.

Area

(Attributes) Addr Size Decimal Bytes

------------ ---- ---- ------- --------

text 8000    006В = 107. bytes (rel,con)

 Addr Global Symbol

 ---- --------------

 8000 __start

 8028 _exit

 802А _main

 8044 _TOIISR

 8067 __HC12Setup

 806B __text_end

Area

(Attributes) Addr Size Decimal Bytes

------------ ---- ---- ------- -----

idata 806B   0001 = 1. bytes (rel,con)

 Addr Global Symbol

 ---- --------------

 806B __idata_start

 806C __idata_end

Area

(Attributes) Addr Size Decimal Bytes

------------ ---- ---- ------- -----

data 0800 0001 = 1. bytes (rel,con)

 Addr Global Symbol

 ---- --------------

 0800 _second

 0800 __data_start

 0801 __data_end

Area

(Attributes) Addr Size Decimal Bytes

------------ ---- ---- ------- -----

memory 0000  0B20 = 2848. bytes (abs,ovr)

 Addr Global Symbol

 ---- --------------

 0B1E  _Timer_Overflow_interrupt_vector

Files Linked [ module(s)]

C:icclibcrt12.o [crt12.s] interrupt.o [ interrup ]

<library> [psetup.c]

User Global Definitions

init_sp = 0хс00

User Bаsе Address Definitions

text = 0х8000 data =0х8000

В то время, как файл карты памяти предоставляет программисту обобщенную информацию о том, в какой области памяти располагаются коды переменных и каждой подпрограммы, файл исполняемых микроконтроллером кодов interrupt.s19 имеет следующий вид:

S10E8000CF0C0016806787CE08018EAD

S110800B080127056A000820F6CE806BCD21

S111801808008E806C2706180A307020F516BA

S1078026802A20FE8A

S1050B1E80440D

S104806B0010

S110802AC6807B0086C6807B008DC6807BEF

S1118037008FC6FF7B000210EF20FE3F3DC607

S1118045807B008FF6080087C300017B0800D3

S1118053F60800C17A260CF600008741517B26

S109806100007908000B89

S10780677900163D45

S90380007C

Каждая строка файла в формате S19 содержит информацию о типе представленных в ней данных, начальный адрес данных с строке, сами данные и контрольную сумму для этой строки. Полная расшифровка формата S19 дана в руководстве пользователя для отладочной платы M68EVB912B32.

Итак, мы рассмотрели последовательность преобразования исходного файла на Си к файлу загрузочного исполняемого кода для микроконтроллера. На языке структурных диаграмм этот процесс представлен на рис. 3.4.

3.15. Заключение по главе 3

В этой главе мы кратко рассмотрели технику программирования встраиваемых систем на Си. Мы показали некоторые особенности записи программ на Си для платы отладки MC68HC912B32EVB. Безусловно, столь краткое изложение языка Си недостаточно для разработки собственных реальных встраиваемых приложений. Поэтому для расширения познаний в области программирования на Си рекомендуем Вам обратиться к специальной литературе, приведенной в разделе 3.16.

Мы также рассмотрели процесс преобразования исходного текста программы на Си в файл исполняемых кодов для МК выбранного типа. Мы показали Вам примеры всех промежуточных генерируемых файлов по ходу этого процесса. Мы также кратко остановились на аппаратных особенностях МК семейства 68HC12/HCS12 для целей отладки, рассмотрели возможности использования аппаратных и программных средств платы MC68HC912B32EVB для тестирования и отладки примеров следующих глав данной книги.

3.16. Что еще почитать?

1. Kernighan, В. W., and D. М. Ritchie. The С Programming Language, 2nd ed. Upper Saddle River, NJ: Prentice Наll, 1988.

2. Schildt, Н. С: The Complete Reference. Osborne McGraw Нill.

3. Harbison, Samuel Р. III, and Guy Steele Jr. С А Reference Manual, 5th ed. Upper Saddle River, NJ: Prentice Наll, 2002.

4. ImageCraft С Compiler and Development Environment for Motorola HC12, ImageCraft Creations Inc., Раlo Alto, СА, 2002.

3.17. Вопросы и задания

Основные

1. Каково назначение символа «;» в программах на Си?

2. Сколько байт отводится для хранения переменной в формате integer?

3. Какое количество байт отводится для хранения переменной указателя?

4. В какой области памяти МК семейства 68HC12 размещаются переменные со статическим классом хранения?

5. Расскажите о двух назначениях символа * в программах на Си.

6. Опишите процесс преобразования файла с исходным текстом программы на Си в файл исполняемых кодов программы.

Более сложные

1. Глобальные переменные обладают свойством доступности данных из любой функции программного модуля. Почему тогда все используемые в программном модуле переменные не объявляют глобальными, ведь так программисту удобнее?

2. Создайте структуру для хранения записей телефонных абонентов. Каждая запись должна включать имя абонента, номер телефона, улицу и номер дома проживания, город, почтовый индекс.

3. В тексте программы на Си присутствует запись:

static int array[10];

Поясните, какие действия компилятора или управляющей программы соотносятся с этим выражением?

4. Поясните назначение макроопределения. Приведите примеры макроопределений в программах на Си.

5. В чем отличие макроопределения от функции?

Исследовательские

1. Напишите программу на Си, которая переключает состояние светодиодов из выключенного во включенное и наоборот каждые 5 с. Функциональная схема подключения светодиодов (в составе семисегментного индикатора) к МК семейства 68HC12 приведена на рис. 3.12.

1 ... 27 28 29 30 31 32 33 34 35 ... 150
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт.
Комментарии