Микропроцессорная техника: практический курс : учебное пособие для студентов Физико-технологического института, обучающихся по направлениям подготовки "Ядерная физика и технологии", "Биомедицинская инженерия"
Download 0.63 Mb. Pdf ko'rish
|
978-5-321-02171-21 2012 (1)
Практические рекомендации. Исходный текст стартовой функции
?C_STARTUP находится в библиотечном архиве в файле STARTUP.A51 и доступен для редактирования. Это дает возможность осуществить корректную настройку для работы с библиотеками в конкретных усло- виях. В качестве примера оптимизируем настройки Keil µVision для кор- ректной работы с библиотеками на лабораторном стенде SDK-1. 1. В настройках инструментальной среды Keil µVision для нашего проекта ‘Target 1’ укажем начальный адрес внешней памяти SRAM лабораторного стенда 2000H. Для этого на вкладке Project\Options for 'Target 1'\Target в окне Off-Chip Code memory/Start наберем 0x2000. Как видно из примера, адреса на вкладке набираются не в постфиксном виде как 106 4.5. Арифметические функции библиотеки в ассемблере, а в префиксном виде как в языке C51. Отметим, что на этой же вкладке в окне Off-Chip X-data memory/Start можно при необходимости задать начальный адрес XDATA для размещения сегментов данных. На другой вкладке Project\Options for 'Target 1'\BL51 Locate следует выбрать Use Memory Layout from Target Dialog. 2. В копии файла STARTUP.A51 необходимо заменить директи- ву CSEG AT 0H на директиву CSEG AT 2000H. Отредактированный файл STARTUP.A51 можно подключить к проекту одним из трех воз- можных способов. Во-первых, этот файл можно ассемблировать до объектного фор- мата и заменить им исходную версию функции ?C_STARTUP в биб- лиотеке. Однако мы не рекомендуем этот путь, так как в этом случае библиотеки Keil µVision перестанут быть стандартными библиотека- ми и появится проблема с переносимостью программ. Во-вторых, к проекту можно прямо подключить исходный текст отредактированной копии файла STARTUP.A51. Здесь важно соблю- дать правильный порядок подключения файлов. STARTUP.A51 под- ключается первым, потом идут файлы с программой пользователя, затем библиотечные файлы в строго установленном порядке – снача- ла C51FPx.lib, потом C51x.lib. Смысл такого порядка: компонов- щик в указанном порядке будет искать внешние функции до их первого обнаружения. Например, при поиске внешней функции ?C_STARTUP компоновщик обнаружит ее в файле STARTUP.A51 и прекратит даль- нейший поиск этой функции. Таким образом, стандартная версия этой функции, содержащаяся в файле C51x.lib, будет проигнорирована. Данный способ дает возможность вносить правки, не модифицируя ни файлы стандартных библиотек, ни программы пользователя. Од- нако данный способ имеет серьезный недостаток: если мы забыли под- ключить к проекту отредактированную копию файла STARTUP.A51, то это не вызовет ошибки ни при ассемблировании, ни при компо- новке. Компиляция пройдет успешно, но получившаяся программа будет неработоспособной. Такую ошибку найти чрезвычайно трудно. Она может быть выявлена только при анализе исполняемого файла в бинарных кодах или загрузочного файла в HEX-кодах. В-третьих, можно воспользоваться директивой макроассемблера #include . Для этого отредактированную копию стартового файла переименовываем в SDK-startup.inc и помещаем в рабочую ди- ректорию проекта. В тексте программы (рис. 4.4) указываем директи- ву #include "SDK-startup.inc". Обратите внимание, что ранее использовавшаяся директива EXTRN CODE (?C_STARTUP) , 107 4. Стандартные библиотеки Keil µVision ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ðÒÉÍÅÒ ×ÙÚÏ×Á ÂÉÂÌÉÏÔÅÞÎÏÊ ÆÕÎËÃÉÉ. ; íÏÄÉÆÉËÁÃÉÑ ÚÁÇÏÌÏ×ËÁ ÐÒÏÇÒÁÍÍÙ. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;óÔÁÒÔÏ×ÙÅ ÎÁÓÔÒÏÊËÉ #include "SDK-startup.inc" ;äÅËÌÁÒÁÃÉÑ ÓÅÇÍÅÎÔÁ ?PR?primer SEGMENT CODE ;æÕÎËÃÉÑ ÂÉÂÌÉÏÔÅËÉ EXTRN CODE (?C?FPDIV) PUBLIC main ; éÍÑ ÇÏÌÏ×ÎÏÊ Æ-ÃÉÉ RSEG ?PR?primer ; îÁÞÁÌÏ ÓÅÇÍÅÎÔÁ main: ; îÁÞÁÌÏ Æ-ÃÉÉ main ;................................................. ;................................................. SJMP $ ; ëÏÎÅà ÆÕÎËÃÉÉ main END ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Рис. 4.4. Модификация заголовка программы (рис. 4.1) в этом файле отсутствует, поскольку функция ?C_STARTUP теперь со- держится в файле SDK-startup.inc и является внутренней функцией данного модуля. Это наиболее надежный способ модификации стар- товой функции. В этом случае, если программа ассемблер не найдет модифицированный файл SDK-startup.inc, то мы получим сооб- щение о соответствующей ошибке. Во всех трех случаях стартовым адресом при запуске программ пользователя будет адрес 2000H. Download 0.63 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling