Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Статьи > Средства разработки

реклама

 




Мероприятия:




Компоновка

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

	
   arm-none-eabi-ld  -Tl.ld ex1.o -o ex1.elf 
	 

Параметр -T задаёт скрипт линкера. Это текстовый файл, на специальном языке управления процессом линковки. Параметр -o задаёт имя выходного файла, по умолчанию генерируется файл формата ELF исполнимый. Среди параметров задаётся список объектных файлов подлежащих связыванию.

Скрипт линкера:

	
  1 SECTIONS {
  2          . = 0x00000000;
  3          .text : {
  4            ex1.o (.text);
  5                  }
  6         }

Важнейшая команда - SECTIONS . Именно эта команда определяет, как будут связаны секции и по каким адресам размещены. В командном файле линкера может располагаться только одна команда SECTIONS. Напомню, что секции объектного файла, называются входными секциями, а секции исполнимого файла - это выходные секции.

Специальная переменная линкера "." ("точка") всегда содержит текущее значение адреса. Во второй строке скрипта, текущее значение адреса устанавливается в ноль. Хотя это не обязательно, так как по умолчанию начальное значение этой переменной ноль. Но допустимо присваивать переменной линкера произвольное значение. В 3-ей строке задано имя выходной секции .text , именно в эту выходную секцию будет загружаться информация. С учётом предыдущего оператора, начало секции .text , будет располагаться с нулевого адреса. В 4-ой строке указано, из какого источника, из объектного файла ex1.o переместить секцию .text. Так же линкер будет выполнять и другие операции, например настройку адресов. Так как название объектного файла указано в скрипте, то задавать это название в параметрах командной строки, при вызове линкера, не обязательно. Возможен и такой вариант:

	
  1 SECTIONS {
  2          . = 0x00000000;
  3          .text : {
  4            * (.text);
  5                  }
  6         }
	

Здесь название конкретного файла заменено шаблоном "*". Нужно понимать так, секции всех объектных файлов заданных в командной строке, перенести в выходную секцию. Результатом процесса связывания станет исполнимый файл формата ELF. Получить бинарный образ для записи во Flash, можно командой:

	
    arm-none-eabi-objcopy -O binary ./ex1.elf ./ex1.bin 
	 

Шестнадцатеричный дамп бинарного файла ex1.bin:

	
       hd ./ex1.bin
  00000000  00 20 00 20 1d 00 00 00  41 00 00 00 41 00 00 00  |. . ....A...A...| 
  00000010  41 00 00 00 41 00 00 00  41 00 00 00 4f f0 05 00  |A...A...A...O...| 
  00000020  0f f2 28 01 0a 68 02 eb  00 01 02 b4 4f f0 00 01  |..(..h......O...| 
  00000030  02 bc ff f7 f4 ef 65 78  61 6d 70 6c 65 00 00 bf  |......example...| 
  00000040  00 f1 01 00 01 f1 01 01  ff f7 fa bf 44 33 22 11  |............D3".| 
  00000050
		 

В начале можно увидеть значение указателя стека, далее вектор сброса и значения остальных векторов прерывания. При анализе надо учесть обратный порядок следования байтов в бинарном файле (little endian). После заданной в программе строки текста, идут 2 нулевых байта, результат действия директивы .aling . Содержимое файла - двоичный код без служебной информации. Записать бинарный файл в микроконтроллер можно командой:

	
   st-flash  write  v1  ./ex1.bin  0x8000000 
		 
<-- Предыдущая страница Оглавление Следующая страница -->





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники