FAQ по самостоятельной сборке эльфов

1. Скачиваем урезанную до минимально необходимого размера (9,44 Мб) версию Си компилятора IAR “ARM_Embedded_Workbench” и устанавливаем, распаковав архив в выбранную папку. 
URL: http://allsiemens.com/soft/other/ARM_Embedded_Workbench.rar 

2. Скачиваем клиента “TortoiseSVN” (8,78 Мб), устанавливаем. 
URL: http://heanet.dl.sourceforge.net/sourcef....4.3.msi 

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_Workbench\Embedded Workbench 4.0 Evaluation\common\bin\IarIdePM), кликаем “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 будет браться из директории, где установлен IAR\ARM\INC. Можно еще написать #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. Нужные библиотеки подключатся автоматически.