Аппаратные и программные средства встраиваемых систем



Pdf көрінісі
бет222/268
Дата07.01.2022
өлшемі3,23 Mb.
#18255
1   ...   218   219   220   221   222   223   224   225   ...   268
5.2.11  Директива __naked 
Директива __naked позволяет  исключить  генерацию  вводной  части 
функции. Предполагается, что за сохранение контекста отвечает программист. 
volatile data unsigned char counter; 
 
void simpleInterrupt(void) __interrupt (1) 

  counter++; 

 
void nakedInterrupt(void) __interrupt (2) __naked 

  _asm 
   inc _counter ;Инкремент не меняет флагов, нет необходимости сохранять 
;psw 
   reti; Неоходимо явно указывать reti 
  _endasm; 

 
Без __naked получается такой код: 
_simpleInterrupt: 
  push  acc 
  push  b 
  push  dpl 
  push  dph 
  push  psw 
  mov   psw,#0x00 
  inc   _counter 
  pop   psw 
  pop   dph 


 
230 
  pop   dpl 
  pop   b 
  pop   acc 
  reti 
 
С __naked код выглядит так: 
_nakedInterrupt: 
    inc  _counter  
    reti    
5.2.12  Формат Intel HEX 
Intel HEX – формат  файла.  Основным  отличием  этого  формата  от  таких 
монстров,  как ELF и COFF является  крайняя  простота.  Формат  позволяет 
хранить  только  образ  памяти.  Ни  о  каком  перемещаемом  коде  и  возможности 
хранения объектных файлов в этом формате речи не идет. 
В  настоящий  момент  этот  формат  в  основном  используется  при 
программировании встроенных систем. Большинство компиляторов и линкеров 
умеют  выдавать  загрузочный  модуль  в  этом  формате.  Строки  файла 
представляют  собой  текстовые  записи,  в  которых  закодированы  адреса 
расположения,  команды  и  данные  в  шестнадцатеричной  системе  счисления. 
Изначально, HEX формат  использовался  для  работы  с  перфоленточными 
загрузчиками.  В  настоящее  время HEX формат  используют  для 
программирования различных контроллеров и связи с программаторами ППЗУ.  
Каждую  строку  в HEX файле  называют  записью.  Она  состоит  из 
следующих элементов:  
•  Двоеточие (:).  
•  Число байтов данных, содержащихся в этой записи. Занимает один байт 
(две  шестнадцатеричных  цифры),  что  соответствует 0…255 в 
десятичной системе.  
•  Начальный  адрес  блока  записываемых  данных – 2 байта.  Этот  адрес 
определяет абсолютное местоположение блока в EPROM.  
•  Один байт, обозначающий тип записи.  
o  0x00 – блок данных; 
o  0x01 – конец файла;  
o  0x02 – адрес сегмента (см. архитектуру процессора Intel x86); 
o  0x03 – стартовый  адрес  сегмента  (см.  архитектуру  процессора Intel 
x86); 
o  0x04 – старшая часть линейного (32-разрядного) адреса; 
o  0x05 – стартовый  адрес,  старшая  часть  линейного (32-разрядного) 
адреса. 
•  Байты данных (их число указывается в поле 2).  


 
231 
•  Последний  байт  в  записи  является  контрольной  суммой.  Если  сумма 
всех байтов в строке (без учёта переноса) равняется 00, строка считана 
правильно.  
•  Строка заканчивается стандартной парой CR/LF (0Dh 0Ah).  
•  Файл  всегда  завершается  командой 01, (получается  запись  вида 
«:00000001FF»).  
 Пример HEX-файла: 
:10010000214601360121470136007EFE09D2190140 
:100110002146017EB7C20001FF5F16002148011988 
:10012000194E79234623965778239EDA3F01B2CAA7 
:100130003F0156702B5E712B722B732146013421C7 
:00000001FF 
 
Недостатки формата: 
•  Ненадежный контрольный код (вероятность ошибки 1/256).  
•  Нет суммарного контрольного кода для всего файла.  
•  Получается  большой  файл  при HEX кодировании,  что  отрицательно 
сказывается на скорости передачи файлов в контроллер.  


Достарыңызбен бөлісу:
1   ...   218   219   220   221   222   223   224   225   ...   268




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет