Как портировать исходники в IAR. Руководство от cbn 0.2
http://cbn.narod.ru/ e-mail: cbn@yandex.ru

Несмотря на обилие исходников (open source) приложений
на телефонах сименс в виде эльфов они практически не встречаются :(
Казалось бы что проще: перекомпилировать и готово!
Но их нет. Почему? Причин много: отсутствие фунций POSIX в телефоне,
"кривая" работа эльфов с GCC, отсутствие SDK, лень разработчиков,
сложность портирования и т.п.
Данная статья поможет вам в переводе кода (надеюсь :)

Допустим Вы нашли исходники и хотите по ним сделать эльф.
Вот несколько советов:

1. Исходный код потребует значительной доработки,
т.к. в телефоне отсутствуют многие функции стандарта POSIX,
под которые заточены GNU GCC проеты и нет SDK.
От вас потребуется время и старание.
Проект должен быть несложным. Не беритесь сразу за 300+ файлов
с 10000 строк кода! Выберите что попроще.

2. Исходники должны быть на ANSI C без всяких С++ наворотов,
в ++ придется править все места с конструкторами/дестр., new/delete, a:b и т.д.
Убедитесь что в коде нет типов float и double.
Типы с плавающей точкой не поддерживаются ввиду отсутствия сопроцессора.
Проще взять сорцы под dos/linux. Полностью выкинуть: звук, интерфейс windows.

3. ВАЖНО! Убедитесь что выбраный код рабочий и работает так, как вам нужно (без глюков),
скомпилируйте его на PC если возможно либо запустите уже выложенный бинарник.
Глупо проделать кучу работы и убедиться, что были выбраны нерабочие исходники!

4. Требуется несколько раз просмотреть все исходники, чтобы иметь представление где что делается,
какие функции и в каком порядке вызываются при старте и завершении,
как и где организован интерфейс: ввод с клавиатуры и вывод на экран.
Позже от вас потребуется переписать ввод данных с клав., вывод на экран, работу таймеров.

5. Более менее сложный проект не удастся реализовать без долгой нудной отладки (не надейтесь!),
желательно в продвинутом отладчике типа vc. Поэтому код придется переписывать дважды:
под vc или gcc например, и под iar.
Подберите примеры для отладки, они должны быть разнообразными
и по возможности тестировать основные возможности программы (крайние точки).
Получив один раз рабочий вариант, после КАЖДОГО изменения убеждайтесь,
что эти примеры продолжают работать как положено. Если нет - делайте откат.
Двигайтесь маленькими шажками.

6. Обратите внимание на места *(long*) *(int*) *(short*) и данные внутри struct{},
попадающие на некратную 4 или нечетную границу. У нас это вызовет пикофф.
Поменять *(int*) *(long*) на вызов функции:
int getint(void *ptr){
if((int)ptr & 3) return *(unsigned char*)ptr | *((unsigned char*)ptr+1)<<8\
| *((unsigned char*)ptr+2)<<16 | *((unsigned char*)ptr+3)<<24;
else return *(int*)ptr;}
*(short*) аналогично.
Если в настройках есть Little endian, выбрать его.

7. Функций у нас необходимый минимум (все в swilib.h) и не все рабочие
(например у меня не работала memset().
Замените недостающие функции самописными аналогами.
Перепишите файловые операции под свои функции.
Чтобы не использовать отсутствующие функции, переименуйте папку IAR\ARM\INC
в какое либо другое имя либо замените стандартные библиотеки пустыми.

8. Выделение памяти.
В проектах часто не следят за освобождением памяти полагаясь на компилятор,
чуть только нужна память - сразу делают malloc().
У нас КАЖДЫЙ malloc() должен иметь свой mfree().

9. Ну и напоследок:
0.1  SiemenSDK.rar
Эмулятор/отладчик эльфов в среде VisualC++ 6.0
Для создателей сложных эльф проектов :)

Любой эльфописец сталкивался с почти полным отсутствием
отладочных средств на телефоне. Все что мы можем - это писать лог,
выводить значения на экран и наблюдать многочисленные пикофф. :(

Нынче времена изменились! Теперь эльфы можно создавать и отлаживать
на компьютере в среде Visual Cu с дальнейшей перекомпиляцией в IAR
без значительных изменений! :)

Возможности эмулятора:
пошаговая отладка в мощном VC отладчике
просмотр всех перемен./знач-й, памяти
перенос готового кода в IAR без значительных изменений

Ограничения:
Поддерживаются ТОЛЬКО эльфы на основе библ. Siemens.c
Данные экрана периодически сбрасываются в .bmp файл
Клавиатура не поддерживается.
Отсутствие вызова спец.функций и проверки пикофф при
обращении по нечетному адресу типа *(int*)(char+5);
Встроена поддержка только небольшого числа функций из swilib.h

Удачи! :)
Hosted by uCoz