Заходим в папку HelloWorld и запускаем файл HelloWorld.eww, в появившемся окне слева сверху, где написано Debug, щёлкаем по стрелке вниз и выбираем пункт Release. Далее ниже ищем файл main.c и выбираем его. Откроется окно с кодом:
BOOK * CreateHWBook() { HWBook= new BOOK; CreateBook(HWBook,onCloseHWBook,&base_page,"Example",-1,0); return(HWBook); }
int main (void) { CreateHWBook(); // выводим текст в "заметки" на StandBy StatusIndication_ShowNotes(STR("Hello World!")); // запускаем таймер на 0.5 сек. timer=Timer_Set(500,onTimer,0); return(0); }
Функция main (void) самая главная и в неё обычно вставляют обработчики клавиш и событий, функции которые необходимо запустить при старте эльфа и другие.
Следующая часть кода это реализация поддержки эльфа BookManager:
Код:
BOOK * HWBook;
int TerminateElf(void * ,BOOK* book) { FreeBook(book); return(1); }
BOOK * CreateHWBook() { HWBook= new BOOK; CreateBook(HWBook,onCloseHWBook,&base_page,"Example",-1,0); return(HWBook); }
И наконец начальная часть кода это определение переменных и констант (но это можно сделать и не только в начале кода) и инклудов (файлов со списком функций):
Это создание переменных lamp_level и lamp_status которые отвечают за яркость (максимальная яркость 100) фонарика и его статус (1-включен, 0-выключен).
После функции отключения эльфа печатаем:
Код:
//создание функции обрабатывающей нажатие клавиш int NewKey(int key, int r1 , int mode) { if (key==KEY_CAMERA_FOCUS) //нажата ли клавиша camera_focus? { if (mode==KBD_SHORT_PRESS) //короткое ли нажатие? { // можно также прописать if (!lamp_status); проверяем выключен ли фонарик if (lamp_status==0) { // создаём цикл for для плавного включения фонарика for (lamp_level=0; lamp_level<=90; lamp_level+=10) { //после каждой проверки задаём уровень яркости функцией SetLampLevel SetLampLevel(lamp_level); delay(25); //задержка для того чтобы //цикл не проходил сразу и фонарик включился плавно } lamp_status=1; // после выхода из цикла устанавливаем //что фонарик включен } } return(-1); // после проверки нажатой //клавиши делаем //"заглушку" чтобы клавиша //не реагировала на стандартные //функции, осторожно ставьте "заглушку" //особенно на джойстик } return(0); //указываем что функция завершилась успешно }
И так эта часть кода плавно включает фонарик но если вы захотите скомпилировать эльф то при нажатие на клавишу фокус камеры ничего не произодёт. А теперь в функцию main добавим наш обработчик:
ModifyKeyHook(NewKey,1);
Теперь сделаем выключения эльфа на кнопку выключение, добавляем после обработки нажатия кнопки camera_focus:
Код:
if (key==KEY_POWER) //нажата ли клавиша power? { if (mode==KBD_SHORT_PRESS) //короткое ли нажатие? { //убираем обработчик, иначе //при выключение эльфа кнопки ещё будут обрабытываться. ModifyKeyHook(NewKey,0); //устанавливаем нулевую яркость для //фонарика чтобы после выключения эльфа фонарь не горел SetLampLevel(0); //указываем что фонарик выключен lamp_status=0; //выполняем процесс завершения эльфа SUBPROC(elf_exit); //указываем что всё завершилось успешно return(0); } return(-1); }
int NewKey(int key, int r1 , int mode) { if (key==KEY_CAMERA_FOCUS) { if (mode==KBD_SHORT_PRESS) { if (lamp_status==0) { for (lamp_level=0; lamp_level<=90; lamp_level+=10) { SetLampLevel(lamp_level); delay(25); } lamp_status=1; } } return(-1); } if (key==KEY_POWER) { if (mode==KBD_SHORT_PRESS) { ModifyKeyHook(NewKey,0); SetLampLevel(0); lamp_status=0; SUBPROC(elf_exit); return(0); } return(-1); } return(0); }
int main (void) { ModifyKeyHook(NewKey,1); return(0); }
Тепрь можно скомпилировать этот простенький эльф и посмотреть на результат, также попытайтесь сделать плавное выключения фонарика на кнопку camera_focus (не зря же мы создавали переменную lamp_status) и выключение эльфа с плавным выключением фонарика.
Примечание: в кусках кода после // идут комментарии и их не обязательно вписывать в код эльфа. Чтобы скомпилировать эльф необходимо нажать на клавишу F7. Также необходимо хотябы немного почитать учебники по языку Си.
За урок сильно не пинать и я думаю он пригодится новичкам.
Автор: Arban Специально для se-team.com & supertrubka.org
#7 [09.01.09, 04:27] Re: Урок 1. Создание простого эльфа Фонарик
Все инклуды подключил, но всё-таки есть ошибка
Код:
Building configuration: main - Debug Updating build tree...
6 file(s) deleted. Updating build tree... func.asm Error[109]: Expression is too complex C:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\examples\include\func.asm 52 Error[109]: Expression is too complex C:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\examples\include\func.asm 57 Error while running Assembler main.c
Total number of errors: 2 Total number of warnings: 0
Выбивает в следующих строках: - DC32 (SFE(DYN_CONST)-SFB(DYN_CONST))>>2 - DC32 (SFE(DYN_PAGE)-SFB(DYN_PAGE))>>3
SkiF-1
Patcher
Регистрация: 8.9.08 Сообщений: 37 Репутация: 50 Откуда: Между небом и землёй
#8 [09.01.09, 06:51] Re: Урок 1. Создание простого эльфа Фонарик
У меня возник вопрос. С Си я не очень разбираюсь (точнее не разу не пробывал), а вот язык Турбо Паскаля знаю хорошо. Так сам вопрос, язык Си сильно отличается от Паскаля ?
arban, забыл указать, что нужно ещё скачать с СВН папку С++
И ещё, у меня нет фонарика на теле (к810), проверьте пожалуйста кто-нибудь этот эльфик (ну кому не сложно). Попробывал создать плавное выключение фонарика (только кнопку выключения не менял, осталась как в первом посте)
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.