motofan logo
61 страниц V < 1 2 3 4 > »         
> 

Учимся писать эльфов вместе, Обсуждение процесса кодинга

Andy51
сообщение 29.10.2007, 20:13 Закрепленное сообщение!


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255

Рейтинг: 1224



Вот и долгожданное обновление SDK до v0.2

Основные новшества с прошлой версии:
+ Добавлено множество функций в SDK
+ Добавлено два новых примера - на этот раз GUI

Что внутри:
Папка SDK - ну, и так ясно, заголовочные файлы. За описаниями функций заглядываем в эту папку.

helloworld_snd - первый пример эльфа. Несколько нестандартный HelloWorld, заменяет озвучку цифровой клавиатуры системными звуками. Предназначен в основном для изучения структуры приложения (Application), ну и как пример приложения, работающего в фоне.

helloworld_gui - классический HelloWorld эльф, на этот раз с использованием GUI. Выводит сообщение с помощью диалога Notice. Предназначен для изучения структуры простейшего GUI-приложения.

ListTest - пример использования диалога List. Значительно более сложный пример, предназначен для изучения возможностей и принципов управления диалогами.

make_*.bat - батники для сборки эльфов-примеров. Эльфы расчитаны на компиляцию с комплектом ADS. Из-за правил форума, я не могу включить его в SDK, однако оставляю ссылки
http://ifolder.ru/3937671
http://slil.ru/25060171
http://rapidshare.com/files/67580866/ads.7z.html

Lib.o - для функционирования эльфа под моим загрузчиком, необходимо подлинковать этот файл к проекту (в make.bat уже прописан).
Внимание! Этот файл не зависит от конкретной версии прошивки, под которую собирается эльф, но, тем не менее, зависит от версии библиотеки!
В этом SDK уже включен Lib.o для библиотеки v071218 (оч. старый - не забудьте обновить, если понадобятся новые функции)

Пара слов об т.н. Application.
В телефонах motorola есть система AFW, которая позволяет, не затрачивая лишних ресурсов процессора на обеспечение "полноценной" многозадачности, достаточно полноценно работать нескольким приложениям, ориентированным на диалог с пользователем. Как это работает: приложения представляют собой, фактически, набор обработчиков событий(ивентов, events) + структура данных приложения. Откликаясь на те или иные события, приложения поочерёдно обрабатывают списки накопившихся ивентов. Таким образом, мы фактически имеем невытесняющую многозадачность.
Есть теоретическая возможность писать и эльфы, выделенные в отдельный процесс(task), но эта часть всё ещё в разработке.

Книги по Си
  1. Руководство полного идиота по программированию (на языке Си) - Не смотря на такое название все азы разжёваны. Если вы вообще никогда не видели Си, начните с этой книги
  2. Герберт Шилдт, "Полный справочник по С (4-е издание)"
    Прикрепленный файл Spr_po_C.rar   ( 934.62 килобайт ) Кол-во скачиваний: 1070
  3. "Язык программирования C"
    Прикрепленный файл C_book.zip   ( 220.86 килобайт ) Кол-во скачиваний: 814
Исходники эльфов
  1. SRC by om2804
  2. SRC by G-XaD
SDK
  1. SDK by om2804
  2. SDK by G-XaD
Эльфостроение на motoWiki

Компилятор + исходники от om2804 для EP1 скачать

Сообщение отредактировал om2804 - 3.5.2011, 13:59
Прикрепленный файл SDKv02.rar   ( 24.88 килобайт ) Кол-во скачиваний: 2043
Прикрепленный файл C_book.zip   ( 220.86 килобайт ) Кол-во скачиваний: 814
Прикрепленный файл Spr_po_C.rar   ( 934.62 килобайт ) Кол-во скачиваний: 1070
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
conanxu
сообщение 2.11.2007, 15:32


Новичок
*

Группа: Пользователи
Сообщений: 7
Регистрация: 30.10.2007
Пользователь №: 152 263
Модель телефона: 13816523558

Рейтинг: 0



to Vilko:
it didn't show warning message,but when i run it,my phone will also restart.Can you help me to find which mistake i have make?<
Attachment is my source file.
Thank you.

Сообщение отредактировал conanxu - 2.11.2007, 15:32
Прикрепленный файл ToneDBKiller.rar   ( 1.87 килобайт ) Кол-во скачиваний: 341
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 2.11.2007, 16:53


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255

Рейтинг: 1224



conanxu, first of all - have you updated the library to 071029? Most likely it is the problem.

Oops, ive forgot to add mem functions sad.gif Add this to the SDK by yourself:
Ой, я забыл добавить функции для работы с памятью в SDK sad.gif Добавьте в SDK:
Код
void *suAllocMem(UINT32 size, INT32 *result); //result can be NULL
void suFreeMem(void *ptr);

Use it instead of malloc and free
Используйте их вместо malloc и free

If you still have problems with u_atou, then you haven't updated the SDK to v0.1a

Vilko, так не получится - нельзя определить, импорт "известный" или нет sad.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
conanxu
сообщение 3.11.2007, 3:35


Новичок
*

Группа: Пользователи
Сообщений: 7
Регистрация: 30.10.2007
Пользователь №: 152 263
Модель телефона: 13816523558

Рейтинг: 0



Andy51, thank you for your help. the string convert is normal. Now,there is a new problem. I try to implement the function.when i press star double, it will delete the tonedbfiles. when i press star first and then press pound, it will exit. but in practice, i only press star once at first. it will delete the tonedbfiles. i press other key at first , then press star double. it works normal.here is my code for keyevent handle function.
Код

UINT32 HandleKeypress( EVENT_STACK_T *ev_st,  void *app )
{
    static BOOL bPressStar = FALSE;
    EVENT_T     *event = AFW_GetEv(ev_st);

    UtilLogStringData(" *** ELF *** HelloWorld: key pressed 0x%X", event->data.key_pressed);

    DL_AudPlayTone(event->data.key_pressed, 6);
    
    if(event->data.key_pressed == KEY_STAR)
    {
        if(bPressStar == FALSE)
            bPressStar = TRUE;
        else
        {
            DelToneDBFile();
            return ToneDBKillerExit(ev_st, app);
        }
    }
    else
    {
        if(bPressStar == TRUE && event->data.key_pressed == KEY_POUND)
            return ToneDBKillerExit(ev_st, app);
        bPressStar = FALSE;
    }
    
    return RESULT_OK;
}


i think the var bPressStar maybe is TRUE at first.

Сообщение отредактировал Andy51 - 3.11.2007, 12:42
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 3.11.2007, 12:51


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255

Рейтинг: 1224



conanxu, edited your message... About the question: try to catch EV_KEY_RELEASE event and make in its handler bPressStar = TRUE. The cause could be that you're catching the event twice.

btw, maybe Vilko would be so kind to explain how to use UtilLogStringData? wink.gif It would be quite a help to all interested programmers smile.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
conanxu
сообщение 4.11.2007, 12:28


Новичок
*

Группа: Пользователи
Сообщений: 7
Регистрация: 30.10.2007
Пользователь №: 152 263
Модель телефона: 13816523558

Рейтинг: 0



I modified my code.
Код

BOOL bPressStar = FALSE;

/* Handler of the HW_STATE_ANY event (it used in every state) */
const EVENT_HANDLER_ENTRY_T any_state_handlers[] =
{  
    { EV_KEY_PRESS,             HandleKeypress },
    { EV_KEY_RELEASE,           HandleKeyrelease },

    // The list must always end with such record
    { STATE_HANDLERS_END,           NULL           },
};

UINT32 HandleKeypress( EVENT_STACK_T *ev_st,  void *app )
{
    EVENT_T     *event = AFW_GetEv(ev_st);

    UtilLogStringData(" *** ELF *** HelloWorld: key pressed 0x%X", event->data.key_pressed);

    DL_AudPlayTone(event->data.key_pressed, 6);
    
    if(event->data.key_pressed == KEY_STAR)
    {
        if(bPressStar == TRUE)
        {
            UtilLogStringData(" *** ELF *** ToneDBKiller: key pressed star double");
            DelToneDBFile();
            return ToneDBKillerExit(ev_st, app);
        }
        else
            UtilLogStringData(" *** ELF *** ToneDBKiller: key pressed star once");
    }
    else
    {
        if(bPressStar == TRUE && event->data.key_pressed == KEY_POUND)
        {
            UtilLogStringData(" *** ELF *** ToneDBKiller: key pressed star and pound");
            return ToneDBKillerExit(ev_st, app);
        }
        else
            UtilLogStringData(" *** ELF *** ToneDBKiller: key pressed other");
    }
    
    return RESULT_OK;
}

UINT32 HandleKeyrelease( EVENT_STACK_T *ev_st,  void *app )
{
    EVENT_T     *event = AFW_GetEv(ev_st);

    if(event->data.key_pressed == KEY_STAR)
    {
        if(bPressStar == FALSE)
            bPressStar = TRUE;
    }
    else
        bPressStar = FALSE;
    return RESULT_OK;
}

now, it works normally

Edit by A51 - Do not forget to use [code][/code] tags!

Сообщение отредактировал Andy51 - 4.11.2007, 13:35
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 6.11.2007, 14:06


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



Код

UINT8 DL_FsWriteFile( void* buffer,
                      UINT32 size,
                      UINT32 count,
                      FILE_HANDLE_T handle,
                      UINT32* written);

Для чего параметр written?
Долго эксперементировал с функциями файловой системы, но тело постоянно уходило в ребут при вызове DL_FsWriteFile. В конце концов добился правильной работы вот так:
Код

UINT8 fwrite( void* buffer, UINT32 size, UINT32 count, FILE f ) {
    return DL_FsWriteFile( buffer, size, count, f, (((UINT32*)buffer)-4) );
}

Вот только я не уверен правильно ли это?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 6.11.2007, 16:17


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255

Рейтинг: 1224



G-XaD, ты ведь работал с fwrite? Если помнишь, она возвращает количество записанных блоков размером size. Так вот DL_FsWriteFile вместо этого возвращает код ошибки, а количество записанных блоков - через параметр written.
Т.е. правильно так:
Код
UINT32 fwrite( void* buffer, UINT32 size, UINT32 count, FILE f )
{
    UINT32 written;
    DL_FsWriteFile( buffer, size, count, f, &written);
    return written;
}


Сообщение отредактировал Andy51 - 6.11.2007, 16:18
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 15.11.2007, 12:23


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



теперь сделать бекап PDS совсем легко. Не прийдется даже переводить телефон во флеш-режим.
Эльф делает бекап памяти длинной в 0x10000 байт начиная с адресса 0x10010000 в файл /b/PDS.smg.

Закачиваем эльф, запускаем.
жмем на теле 1 чтобы сделать бекап (будет звук).
2 чтобы проверить существование бекап-файла (будет звук: да/нет).
3 чтобы удалить бекап (будет звук: да/нет).
* или # чтобы закрыть эльф (будет звук).
Прикрепленный файл PDSBackuper.rar   ( 3.04 килобайт ) Кол-во скачиваний: 548
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
S@modelkin
сообщение 18.11.2007, 7:37


Интересующийся
**

Группа: Пользователи
Сообщений: 81
Регистрация: 18.11.2007
Из: Нововаршавка, Омская обл.
Пользователь №: 154 260
Модель телефона: L7
Прошивка: Iron FX E0R

Рейтинг: 33



Andy51,
1) Когда выйдет новый SDK? А то я уже все функции перепробовал...
2) Кстати, я нашёл тут gnuarm. В нём много стандарных библиотек c++, но я просто не успел ещё им воспользоваться. Самое, что меня радует - это то, что в нём есть stdio.h smile.gif И ВОПРОС! Можно ли им пользоваться при написании эльфов? (там папочка есть arm-elf, и в ней много загололвочных файлов)
3) Наверное немного неуместный вопрос, но откуда взялась функция из dl.h (она там одна, просто забыл как называется), ну на проигрывание тона? Её в стандартных библиотеках нет, значит это наверное стандартная функция прошивки... И ещё: где можно(если можно) взять все эти функции?

Сообщение отредактировал S@modelkin - 18.11.2007, 7:40
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 18.11.2007, 10:39


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255

Рейтинг: 1224



Цитата(S@modelkin @ Сегодня, 10:37)

Когда выйдет новый SDK? А то я уже все функции перепробовал...
*

Это не так просто делается...
Цитата(S@modelkin @ Сегодня, 10:37)

Можно ли им пользоваться при написании эльфов?
*

Можно, но далеко не всеми функциями. printf-ы использовать не получится, а всякие sprintf - пожалста. Статическая линковка не рекомендуется, лучше использовать функции, которые уже есть в прошивке.
Цитата(S@modelkin @ Сегодня, 10:37)

где можно(если можно) взять все эти функции?
*

Берёшь из эльфа gsm_flash_dev. Найдёшь там кстати функции libc - можешь добавить в библиотеку и юзать на здоровье. Да и если получится - поможешь тем самым расширению SDK wink.gif

Сообщение отредактировал Andy51 - 18.11.2007, 10:42
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Учимся писать эльфов вместе, Обсуждение процесса кодинга · Эльфы, их разработка и портирование · Forum
 

61 страниц V < 1 2 3 4 > » 
Ответ в темуСоздание новой темы
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.3.2024, 23:37

Форум живёт: