1. Скачиваем урезанную до минимально необходимого размера (10,1Мб) версию Си компилятора IAR «ARM_Embedded_Workbench» и устанавливаем, распаковав архив в выбранную папку.
® inquis
URL: http://download.e71.ru/load/programs/IAR442A.exe
3. В браузере (например, IE) заходим по адресу svn://cbsie.dyndns.info. Открывается окошко «Repository Browser».
* Кликаем на папку svn://cbsie.dyndns.info. Там исходники многих эльфов.
* Выбираем папку ARM, заходим.
* Первым делом выбираем папки inc и SerialLib, так как они необходимы для компилирования эльфов. Кликая правой кнопкой мыши на папке, выбираем «Export…». В окошке “TortoiseSVN Export…” выбираем “Revision: HEAD revision” (головная, самая свежая), сохраняем у себя на компьютере. Для SerialLib для удобства сразу прописываем путь C:SerialLib, так как именно такой путь указан в исходниках многих эльфов.
* Содержимое папки inc с SVN копируем в папку inc ARM_Embedded_Workbench.
* Также скачиваем утилиту «_SVN_Utility», которая может оказаться полезной для автоматической подстановки номера ревизии в проект при компиляции.
4. Выбираем папку понравившегося эльфа, однако не стоит сразу копировать ее к себе на компьютер. Некоторые ревизии кода предназначены для версий эльфпака, на которые еще не было официального релиза. Кликая правой кнопкой мыши на папке, выбираем «Show log». Внимательно читаем историю изменений. Выбираем самую свежую версию (Revision), совместимую с Вашим эльфпаком, скачиваем, явно указав в опциях при экспорте номер ревизии.
5. Теперь уже можно пробовать собирать эльфов для вашего телефона. Однако некоторые из них будут требовать файлы, которые отсутствуют в скачанной «ARM_Embedded_Workbench». Поэтому тренировку лучше всего начать со сборки SerialLib, после которой появится многое, необходимое для сборки других эльфов.
* Запускаем IAR (…ARM_Embedded_WorkbenchEmbedded Workbench 4.0 EvaluationcommonbinIarIdePM), кликаем “Open existing Workspace”, кликаем SerialLib.eww. (Или в папке C:SerialLib кликаем дважды на SerialLib IAR IDE Workspace (если IAR Embedded_Workbench IDE не запускается автоматически, вручную указываем путь к приложению)).
* В “Project”->”Edit Configurations…” выбираем “Release”, т.к. скомпилированные с Debug эльфы не загрузятся!
* В “Project”->”Options”->”General Options” выбираем “Processor variant: ARM926EJ-S”, “Processor mode: Arm”.
* Теперь выбираем “Project”->”Rebuild All”.
В нижней части экрана смотрим сообщение об успешной компиляции проекта.
* Теперь скомпилируем собственно эльфа SerialTest. В окошке в выпадающем списке “Workspace” выбираем “SerialTest-Release”, и снова “Project”->”Rebuild All”.
После запуска программы “IAR” и выбора “Project”->”Rebuild All” в папке проекта создаются дополнительные папки Settings и Release. В Release находятся три папки Exe, List и Obj. В папку Exe при успешной компиляции помещается готовый эльф.
6. По описанной методике приступаем к сборке выбранного Вами эльфа.
Если в проекте присутствуют два файла XXX.eww и XXX_IAR_old.eww, открываем XXX.eww. Скомпилированные с XXX_IAR_old.eww эльфы создают .bcfg нулевого размера.
Если у Вас телефон E/El71, то в “Project”->”Edit Configurations…” выбираем “Release_ELKA”. Если такой опции нет, можно попробовать выбрать другой вариант, вдруг да заработает.
Если в проекте присутствует файл revision.h, но нет желания настраивать утилиту getsvn, пропишите в файле revision.h строку #define __SVN_REVISION__ 000, где 000 замените на номер ревизии. Если при компиляции программа требует наличия файла revision.h, а в проекте его нет, запустите приложение getsvn в папке _SVN_Utility, появившийся файл revision.h скопируйте в папку с файлами проекта.
7. Сообщения об ошибках и пути решения
Вопрос: что значит » #include «….swilib.h» » и почему на нём выдаётся ошибка?
Ответ: «….» это относительный путь. Означает, что файл лежит на два уровня ниже текущей директории. Если стереть, то должно получиться #include «swilib.h», тогда swilib будет браться из директории, где установлен IARARMINC. Можно еще написать #include «.swilib.h», тогда swilib будет браться из папки, где лежит проект.
Вопрос: что это за ошибка “Fatal Error[e72]: Segment ELFBEGIN must be defined in a segment definition option (-Z, -b or -P)”?
Ответ: в IAR’е заходишь Project->Options->Linker->Config. Там в Linker command file ставишь галочку Override default, жмешь на многоточие справа и выбираешь из папки, где лежит твой проект, файл test.xlc.
Вопрос: все примеры компилируются нормально, но они все вырубают мобилу.
Ответ: в настройках линкера какой *.xcl указан? Надо тот, который в папке с исходниками лежит, а не тот, который с IAR идет. Да, кстати, когда проект открываешь, необходимо заново прописывать xcl файл.
Вопрос: эльф получается, но при запуске создаётся нулевой (пустой) файл *.bcfg. В чём проблема?
Ответ: проверь имя сегмента для файла config_data.c в проекте: правой мышью по имени файла в дереве проекта — Options, должно стоять Override inherited settings, на вкладке Output в Segment base name — имя сегмента CONFIG (а не DATA и CODE).
Вопрос: достала ошибка: «_thumb functions can only call_swi functions with swi_number in range 0-0xFF». Как ее исправить?
Ответ: в опциях надо выбрать ARM,а не тумбу.
Вопрос: “Fatal Error[e136]: The output format ‘debug’ does not support the use of relocation areas (-V option). Did you forget a format modifier flag?” Что делать?
Ответ: ну сколько говорить, что для компиляции любого проекта необходимо ставить конфигурацию Release, а не Debug.
Вопрос: у кого-нибудь есть такой файл obexcopy.exe? А то у меня выдает ошибку, что нет такого файла.
Ответ: этот файл не является обязательным для компиляции проекта, это скорее для удобства. Чтобы не выдавала ошибку, идешь по след пути: Project-Options, выбираешь пункт Build Actions и удаляешь все из полей Pre-buid и Post-build command line.
Вопрос: IAR пишет, что не найдены div_32a, div_64a, doubleToLong, float.
Ответ: В меню Project->Options->Library Configuration выбрать Normal. Нужные библиотеки подключатся автоматически.
Предупреждение:
Собранные с исходников svn эльфы разрешены только для личного использования, в целях предварительного ознакомления и стимулирования интереса к эльфописанию. Публичное размещение скомпилированных ревизий до официального релиза без разрешения автора проекта запрещено!
Источник
Fatal error e72 segment
Здесь решил разместить разбор ошибок, которые у меня происходили при компиляции и методы их устранения.
Решение — меню Project -> Options. -> General Options -> закладка System -> поставить галочку Enable bit definitions in I/O-Include files.
В файле iom32.h стоит такой блок, который генерит это сообщение:
Чтобы поправить, нужно корректно выбрать тип процессора. Меню Project -> Options. -> General Options -> закладка Target -> из выпадающего списка Processor configuration выбрать «—cpu=m32, ATmega32».
Error[Pe104]: struct or union is too large c:asmpolymusonFlashFilefile_sys.h 114
Error[Pe104]: struct or union is too large c:asmpolymusonFlashFilefile_sys.h 117
Error[Pe095]: array is too large c:asmpolymusonFlashFilesd_cmd.c 51
Error[Pe095]: array is too large c:asmpolymusonFlashFilefile_sys.c 101
Error[Pe095]: array is too large c:asmpolymusonFlashFilefile_sys.c 2299
Решение — меню Project -> Options. -> General Options -> закладка Target -> Memory model -> выбрать из выпадающего списка Small.
a) Project -> Options. -> General Options -> закладка Heap Configuration -> меняем CLIB heap size со значения 0x10 на 0x300.
b) Project -> Options. -> General Options -> закладка System, меняем размер CSTACK c 0x20 на 0x100, а RSTACK можно оставить как было равным 16.
The debugging session could not be started. Either the debugger initialization failed, or else the file «C:asmpolymusonDebugExe1.cof» was corrupt or of an unsupported format. There might be more information in the Debug Log window.
Лог отладки показывает следующее:
Sat Jan 10 20:15:29 2009: Failed to load debugee: C:asmpolymusonDebugExe1.cof
Решение — Project -> Options. -> Linker -> закладка Output -> в поле формат выбрать Debug information for C-SPY и поставить галки With runtime control modules и With I/O emulation modules.
После первой установки и запуска появилось следующее сообщение:
Failed to read the Code Template file «C:Program FilesIAR SystemsEmbedded Workbench 4.0 EvaluationcommonconfigCodeTemplates.txt». C:Program FilesIAR SystemsEmbedded Workbench 4.0 EvaluationcommonconfigCodeTemplates.txt contains an invalid path. To select another file choose the menu Tools->Options and select the Editor Setup Files tab.
Это произошло после того, как я изменил целевую папку установки. Новое месторасположение файла CodeTemplates.txt оказалось по адресу C:Program FilesIAR Embedded Workbench 4.0 EvaluationcommonconfigCodeTemplates.txt. Осталось открыть, как и предлагалось, меню ToolsOptions. перейти на закладку Editor Setup Files и исправить путь Use Code Templates (должна стоять галочка) на правильный.
У меня при компиляции проекта, содержавшего смешанный код (ассемблер и C — это был проект с использованием библиотеки V-USB. Ассемблер был нужен для кода, критичного к времени выполнения), происходила следующая ошибка:
Error[e18]: Range error,
PC offset out of range. Valid range is -4096 (-0x1000) to 4094 (0x0FFE).
File: C:asmAVR910-protossusbdrvusbdrvasm.S, Line: 54
Source: rjmp USB_INTR_VECTOR
Where $ = __ATmega128__ + 0x4 [0x4]
in module «usbdrvasm» (c:asmAVR910-protossDebugObjusbdrvasm.r90),
offset 0x4 in segment part 0, segment INTVEC
What: (usbCrc16 + 0x32) — ($ + 2) [0x1182]
Allowed range: 0xFFFFF000 — 0xFFF
Operand: usbCrc16Append [0x1188]
in module usbdrvasm (c:asmAVR910-protossDebugObjusbdrvasm.r90),
Offset 0x32 in segment part 1, segment CODE
Проблема была в том, что команда rjmp USB_INTR_VECTOR в таблице векторов прерываний не доставала до нужной её метки (адрес метки был слишком большой для перехода по rjmp).
Метода устранения ошибки два:
a) Заменить команду rjmp на команду jmp — у неё нет тех ограничений, по дальности перехода, как у rjmp, но выполняется jmp на 1 такт дольше. В моем случае это нежелательно — код критичен к времени выполнения прерывания.
b) Поместить код, который находится по метке USB_INTR_VECTOR, ближе к началу памяти, чтобы достала команда rjmp.
Второй способ можно реализовать, добавив перед кодом с меткой, куда прыгает rjmp, директиву назначения сегмента, который размещается линкером ближе к началу памяти, чем сегмент CODE. Порядок сегментов, которого линкер по умолчанию придерживается, следующий (подсмотрел в листинге *.map):
Самый лучший кандидат на нужный сегмент для размещения кода по метке USB_INTR_VECTOR — сегмент NEAR_F. Ошибка пропала, когда я размести перед этим кодом директиву RSEG NEAR_F, вот так (метка USB_INTR_VECTOR как раз та, которая стоит в команде rjmp):
Эта ошибка срабатывала у меня на следующий кусок файла C:Program FilesIAR SystemsEmbedded Workbench 5.3avrINCiom32.h (или iom16.h):
Ошибка пропадает, если перенести строку #pragma language=restore перед последним #endif, вот так:
Segment ABSOLUTE (seg part no 5, symbol «_A_GPIOR1» in module «hid_task», address [4a-4a]) overlaps segment ABSOLUTE (seg part no 3, symbol «_A_OCR1A» in module «icp», address [4a-4b]) Error while running Linker
Происходит потому, что один из модулей проекта ошибочно использует заголовочный файл , а другой
Ошибка возникала в IAR Embedded Workbench for AVR (проект на микроконтроллере ATmega8) при попытке выделить память из 128 байт в модели памяти Tiny. На эту строчку выдавалась ошибка [Pe095]:
После того, как поменял модель памяти на Small, ошибка пропала.
Вместо raw-binary может быть intel-standart или другой формат, который не поддерживает вывод в один файл нескольких адресных пространств памяти.
Такая ошибка может возникнуть, если в проекте с AVR используете память eeprom (в коде для атрибутов переменных или массивов присутствует атрибут __eeprom), и хотите получить прошивку в обычном HEX-формате, или в двоичном файле. Ошибка может наблюдаться на IAR версий от 4.41 до 6.12, и может быть даже в других версиях.
Устранить ошибку можно, если настроить вывод в дополнительные файлы для разных типов памяти с помощью опции линкера -O. Для этого откройте свойства проекта, зайдите в раздел настроек Linker, откройте закладку Output, выберите разделе Format радиокнопку Other, в выпадающем списке Output format выберите формат ubrof 8 (этот формат позволяет в один файл запихивать данные всех секций; его надо выбрать просто для того, чтобы линкер отработал без ошибок).
Теперь проект начнет нормально компилироваться, без ошибок, но нам этого мало — надо еще получить файл прошивки в Intel HEX или сыром двоичном. Для этого применим дополнительную опцию -O. Снова откройте свойства проекта, зайдите в раздел настроек Linker, откройте закладку Extra Output, убедитесь, что снята галочка «Generate extra output file». Откройте закладку Extra Options (из всех закладок она последняя), поставьте галочку «Use command line options» и добавьте туда следующий текст:
Тут задано вывести в файл код программы (указана секция памяти CODE) в формате intel-extended (это и есть стандартный Intel HEX). Файл будет лежать в подпапке проекта ReleaseExe, и получит имя файла имяпроекта_flash.hex. То есть, к примеру, если корневой каталог проекта c:TEMPAVR245, и проект называется AVR245, то файл прошивки в формате HEX будет c:TEMPAVR245ReleaseExeAVR245_flash.hex.
Сюда же можно добавить еще несколько опций -O (по одну на строке) для вывода разных файлов в разные форматы. В качестве примера приведу вывод в двоичный формат (raw-binary) секций кода программы и секции памяти eeprom:
Источник
Adblock
detector
Started by ●November 24, 2003
- Chronological
- Newest First
Hi,
I am a new in programming the MSP430s. I was trying to run simulate
the application called "Implementing an Ultralow-power keypad
inferface with the MSP430" from the TI site.
Wen I want to "Rebuild All" I always get this error:
Fatal Error[e72]: Segment UDATA0 must be defined in a segment
definition option (-Z, -b or -P)
This is the corresponding code:
;********************************************************************
RSEG UDATA0 ; RAM Locations
;*******************************************************************
NoKey EQU 001h
NoMatch EQU 002h
Error_Flags DS 1 ; Error Flags
; xxxx xxxx
; ||
; ||-- No Key being depressed
; |----- No key match found
Does anybody know what's wrong?
Thx,
Reply by onestone ●November 24, 20032003-11-24
If I recall correctly RSEG is a Ti assembler directive, and not
recognised by IAR. there was a discussion of this a few months ago. This
is also highlighted in the IAR user manuals, on the section that covers
differences between Ti and IAR.
Cheers
Al
partytubie wrote:
> Hi,
>
> I am a new in programming the MSP430s. I was trying to run simulate
> the application called "Implementing an Ultralow-power keypad
> inferface with the MSP430" from the TI site.
> Wen I want to "Rebuild All" I always get this error:
>
> Fatal Error[e72]: Segment UDATA0 must be defined in a segment
> definition option (-Z, -b or -P)
>
> This is the corresponding code:
>
> ;********************************************************************
> RSEG UDATA0 ; RAM Locations
> ;*******************************************************************
> NoKey EQU 001h
> NoMatch EQU 002h
> Error_Flags DS 1 ; Error Flags
> ; xxxx xxxx
> ; ||
> ; ||-- No Key being depressed
> ; |----- No key match found
>
> Does anybody know what's wrong?
>
> Thx,
>
>
>
>
> .
>
>
>
> ">http://docs.yahoo.com/info/terms/
>
>
>
Reply by Anders Lindgren ●November 25, 20032003-11-25
> I am a new in programming the MSP430s. I was
trying to run simulate
> the application called "Implementing an Ultralow-power keypad
> inferface with the MSP430" from the TI site.
> Wen I want to "Rebuild All" I always get this error:
>
> Fatal Error[e72]: Segment UDATA0 must be defined in a segment
> definition option (-Z, -b or -P)
>
> This is the corresponding code:
>
> ;********************************************************************
> RSEG UDATA0 ; RAM Locations
> ;*******************************************************************
> NoKey EQU 001h
> NoMatch EQU 002h
> Error_Flags DS 1 ; Error Flags
> ; xxxx xxxx
> ; ||
> ; ||-- No Key being depressed
> ; |----- No key match found
>
> Does anybody know what's wrong?
Hi!
UDATA0 was the name that the version 1 of the IAR toolset used to
store RAM data that should be initialized to zero when the application
starts.
This segment is defined in a so-called linker command file (the file
name ends is .xcl).
Since I don't know which version of the toolset you're using, (I'm
assuming that you are using the IAR Toolset, though), the cause of the
problem could due to a number of different thing. The most probable
is that you're using version 2 of the tools. In that case all you
need to do is to replace the line with "RSEG UDATA0" with
"RSEG DATA16_Z:DATA:SORT:NOROOT(1)".
If this doesn't fix the problem, or if you're not using version 2,
please let me know.
-- Anders
--
Disclaimer: Opinions expressed in this posting are strictly my own and
not necessarily those of my employer.
Skip to main content
Welcome to EDAboard.com
Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals… and a whole lot more! To participate you need to register. Registration is free. Click here to register now.
-
Digital Design and Embedded Programming
-
PC Programming and Interfacing
You should upgrade or use an alternative browser.
IAR AVR link error: Segment TINY_Z must be defined in a segment definition option
-
Thread starterelcielo
-
Start dateMay 12, 2003
- Status
- Not open for further replies.
-
#1
- Joined
- Jun 13, 2002
- Messages
- 383
- Helped
- 15
- Reputation
-
30
- Reaction score
- 8
- Trophy points
- 1,298
- Activity points
-
3,250
Error[e72]: Segment TINY_Z must be defined in a segment definition option (-Z, -b or -P)
What means it is ?
How I fix it?
Plz help me.
-
#2
002
Member level 1
- Joined
- Nov 12, 2001
- Messages
- 32
- Helped
- 0
- Reputation
-
0
- Reaction score
- 0
- Trophy points
- 1,286
- Location
-
Italia
- Activity points
-
162
It must be defined in the files xxx.xcl configured in the linker options.
You have used that area of memory and the compiler it asks you to define.
- Status
- Not open for further replies.
Similar threads
-
Digital Design and Embedded Programming
-
PC Programming and Interfacing
-
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.








