Отговори на тема  [ 392 мнения ]  Отиди на страница Предишна  1 ... 16, 17, 18, 19, 20, 21, 22 ... 27  Следваща
The Internet of Stupid Things 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: The Internet of Stupid Things
Grubi аз не разбрах: ще правиш "бойлер" или ще си купуваш

_________________
main[-1u]={1};


Чет Фев 29, 2024 6:48 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Мар 16, 2006 9:42 am
Мнения: 12095
Местоположение: Гьотеборг
Мнение Re: The Internet of Stupid Things
Ще купувам, само остана и в бизнеса с бойлери да влизам. Щото тоя с осцилоскопите вече го оправих ;)
Но се оказа, че този който е изкарал 20 години, баща му го е преправял с някакъв колга...та леко настръхнах, но явно са свършили работата добре, щом не е имало злополуки, проблеми и течове.


Чет Фев 29, 2024 8:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: The Internet of Stupid Things
palavrov, плямпам с некъв от екипа на Zephyr
имало LLEXT зареждане от ELF...
да питам: тва LLEXT може ли да изпълнява Position-Independent Code, по-точно има ли syscall-ове към кернела
релокация на кернел функции към user app

PS: заеби ... тва е само лоадера ... за PIC, някой трябва да си играе да го допише

_________________
main[-1u]={1};


Пет Мар 01, 2024 11:24 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: The Internet of Stupid Things
Абе и аз го мернах като новина. Подозирам, че е някаква шитня от рода на .ехе файловете навремето за дос и "сегментите" на 16 битовият х86 в реален режим т.е. доналинкване по време на зареждане => специален файлов формат или тежък елф код в ОС-а. Съмнявам се да е нещо елегантно.

Та като говорим за елегантни неща - тези дни направих compile time events - в една линкерска секция вкарвам всички event handlers и като трябва да се вика някой event се обикалят всички handlers закачени в тази секция и се викат тези които трябва. Да, има runt time overhead обаче спестява адски много код за закачане и разкачане на event handlers в списъци и т.н. И това развърза толкова много неща, че разкарах сумати излишен код (и като сорс и като binary).

_________________
Мразя да мразя ...


Пет Мар 01, 2024 12:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: The Internet of Stupid Things
тва TI го правеха "нон стоп" :) обаче толкова сложно е реализирано като build, че едвам се разбира какво точно са направили
а накрая се окзава линкерска секция/таблица

Цитат:
че е някаква шитня от рода
.... е само ELF лоадер, но за PIC реализацията липсва

_________________
main[-1u]={1};


Пет Мар 01, 2024 1:06 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: The Internet of Stupid Things
Аз имам един въпрос относно това покет бигълче... Подкарах го накрая, обаче нямам идея какво да инсталирам под уиндоус за да напиша нещо за него. Има ли някакво свясно ИДЕ? (по юзърски, не 'професионално') :)
Нещо дето да си напиша кода и то да компилира и да го метне на борда. Или ако не така, какъв изобщо е процеса за писане за тия неща?

_________________
'просто' е технически синоним на 'красиво'


Пет Мар 01, 2024 2:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: The Internet of Stupid Things
трябва ти крос linux-gcc

и нещо от сорта
gcc hello.c -o hello тръгни първо от "лесното" после дири IDE
https://ioflood.com/blog/gcc-linux-command/

PS
http://jkuhlm.bplaced.net/hellobone/

hard float Linaro
https://releases.linaro.org/components/ ... gnueabihf/

как се мятка ELF-a в бигъла - нямам си на идея

_________________
main[-1u]={1};


Пет Мар 01, 2024 2:36 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: The Internet of Stupid Things
Бабане, предполагам, че има някакъв плъгин за VSCode с който да стане без усилия. Nordic са направили доста прилична поддръжка за техните чипове, би трябвало да има и нещо подобно но за какъв да е микроконтролер.

Ако не става под боза, можеш да пробваш с WSL и там да си накичиш линукските компилатори - това почти е вградено в vscode. Е, не е много юзер френдли ама то пълно щастие няма ...

_________________
Мразя да мразя ...


Пет Мар 01, 2024 3:45 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: The Internet of Stupid Things
Ами успях да компилирам някакво 'hello' и да го заметна натам... Даже и работи, така че вече съм 'експерт' :)

_________________
'просто' е технически синоним на 'красиво'


Пет Мар 01, 2024 3:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: The Internet of Stupid Things
TheWizard написа:
тва TI го правеха "нон стоп" :) обаче толкова сложно е реализирано като build, че едвам се разбира какво точно са направили
а накрая се окзава линкерска секция/таблица


Мразим излишното усложняване. Моята реализация е супер изчистена - 50-100 реда код общо.

Това е хедър файла:

Код:
typedef struct event_t
{
    const char* const name;
    void* value;
} event_t;

typedef void (*handler_t)(const void* const old_value, const void* const new_value);
typedef struct event_handler_t
{
    const event_t* const event;
    const handler_t handler;
} event_handler_t;

void event_notify(const event_t* const event, const void* const old_value, const void* const new_value);

/* Events generator */

#define __DECLARE_EVENT(_name, _type, _default_value, _event, _value_t, _value, _set, _get) \
                                                                                            \
    typedef _type _value_t;                                                                 \
                                                                                            \
    _value_t _value __attribute__((weak)) = _default_value;                                 \
                                                                                            \
    event_t _event __attribute__((weak, section(".events"))) = {                            \
        .name = #_name,                                                                     \
        .value = &_value,                                                                   \
    };                                                                                      \
                                                                                            \
    __attribute__((weak)) void _set(_type value)                                            \
    {                                                                                       \
        event_notify(&_event, &_value, &value);                                             \
        _value = value;                                                                     \
    }                                                                                       \
                                                                                            \
    __attribute__((weak)) _type _get(void)                                                  \
    {                                                                                       \
        return _value;                                                                      \
    }

#define DECLARE_EVENT(_name, _type, _default_value) \
    __DECLARE_EVENT(                                \
        _name,                                      \
        _type,                                      \
        _default_value,                             \
        CONCAT_N(__, _name, _event),                \
        CONCAT_N(__, _name, _value_t),              \
        CONCAT_N(__, _name, _value),                \
        CONCAT_N(_name, _set),                      \
        CONCAT_N(_name, _get))

#define __EVENT_SUBSCRIBE(_event, _handler, _wrapper, _list, _value_t)                            \
    __attribute__((weak)) void _wrapper(const void* const old_value, const void* const new_value) \
    {                                                                                             \
        _handler((const _value_t* const)old_value, (const _value_t* const)new_value);             \
    }                                                                                             \
                                                                                                  \
    event_handler_t _list __attribute__((weak, section(".event_handlers"))) = {                   \
        .event = &_event,                                                                         \
        .handler = _wrapper                                                                       \
    }

#define EVENT_SUBSCRIBE(_name, _handler)          \
    __EVENT_SUBSCRIBE(                            \
        CONCAT_N(__, _name, _event),              \
        _handler,                                 \
        CONCAT_N(__, _name, _wrapper_, __LINE__), \
        CONCAT_N(__, _name, _list_, __LINE__),    \
        CONCAT_N(__, _name, _value_t))


Има само една функция в Ц файла:

Код:
extern const event_t __events_start[];
extern const event_t __events_end[];

extern const event_handler_t __event_handlers_start[];
extern const event_handler_t __event_handlers_end[];

void event_notify(const event_t* const event, const void* const old_value, const void* const new_value)
{
    /* cppcheck-suppress comparePointers */
    for (const event_handler_t* event_handler = __event_handlers_start; event_handler < __event_handlers_end; event_handler++)
        if (event_handler->event == event)
            event_handler->handler(old_value, new_value);
}


Линкерския файл за Зефир, не е проблем да се подкара за какъв да е базиран на ГЦЦ/ЦЛАНГ билд

Код:
SECTION_DATA_PROLOGUE(.events,,)
{
    __events_start = .;
    KEEP(*(SORT(.events*)));
    __events_end = .;
} GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)

SECTION_DATA_PROLOGUE(.event_handlers,,)
{
    __event_handlers_start = .;
    KEEP(*(SORT(.event_handlers*)));
    __event_handlers_end = .;
} GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)


Дефиниране на евънт за управление на аналогов изход:

Код:
DECLARE_EVENT(analog_output, volts_t, volts_0);


Закачане на евънт хендлър:

Код:
void analog_output_event_handler(const volts_t* const old, const volts_t* const new)
{
    uint32_t pulse_width = volts_to_int(volts_mul(volts_from_int(PWM_PD0_OC0A.period / 10), *new));


    int ret = pwm_set_pulse_dt(&PWM_PD0_OC0A, pulse_width);
    if (ret)
    {
        LOG_ERROR("Error %d: failed to set pulse width\n", ret);
    }
}

EVENT_SUBSCRIBE(analog_output, analog_output_event_handler);


Извикване на евънта от някъде:

Код:
            analog_output_set(volts_from_fraction(registers[i], 1000));


Това горното е орязан и изтестване работещ код. Тънкото освен линкерските секции е да се ползват weak attributes за да не мрънка линкера, че се предефинират едни и същи неща.

_________________
Мразя да мразя ...


Пет Мар 01, 2024 4:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: The Internet of Stupid Things
Тоя еклипс не знам за кой път го пробвам и все се убеждавам че е правен за 'девелопъри' (т.е. ония дето живеят пред мониторите) :)
Чисто нов проект, и вече не може да го компилира. Не бил конфигуриран. Баси тъпотията...
Май ще трябва да стоя на CLI

_________________
'просто' е технически синоним на 'красиво'


Пет Мар 01, 2024 4:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: The Internet of Stupid Things
експерта, обясни кво направи :)

palavrov правих подобно за Position Independent Code
https://github.com/Wiz-IO/OpenAPI

_________________
main[-1u]={1};


Пет Мар 01, 2024 4:11 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: The Internet of Stupid Things
Жоре, аз много си се кефя на този код. Това ми е решението на 15 годишен омазан спагети код където хоризонтално всички модули си викаха калл баци помежду си и в един момент никой вече не го знае как и защо работи. И като трябва да се добави нова функционалност се пипа във всички файлове с което омазването във времето става още по голямо.

А така с тази простичка реализация там където се ти трябва да викнеш някакъв евънт не добавяш никакъв код пълен с ифдеф а имаш само един ред. Недостатъка е, че се извърта един цикъл в LUT за да се намери съответните хендлъри ама за не хард РТОС проекти това е приемливо. Пък и на практика не само, че не генерира излишен код ами даже го намалява т.е. теоретично трябва да успея да го подкарам и на старата им платформа с някакви атмеги.

_________________
Мразя да мразя ...


Пет Мар 01, 2024 4:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: The Internet of Stupid Things
Бабане, предполагам си с Windows
инстал тва (ADB) https://dl.google.com/android/repositor ... indows.zip

вържи платчeто и пиши в терминала
adb devices
ако се покаже платчето, качаването става така:

Код:
adb push PATH/application /home/root   // src --> dst
adb shell
cd /home/root                               
chmod +x application_name    // права за executable
./application                // старт

_________________
main[-1u]={1};


Съб Мар 02, 2024 1:38 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: The Internet of Stupid Things
TheWizard написа:
Бабане, предполагам си с Windows


Естествено, че съм с уиндоус. Аз си ценя времето на тоя свят и дори намека че може да съм с линукс е малко обиден :D
Между другото, тия тулове не стават. Но аз вече намерих начина - качвам файла през ssh и така...

_________________
'просто' е технически синоним на 'красиво'


Съб Мар 02, 2024 1:47 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 392 мнения ]  Отиди на страница Предишна  1 ... 16, 17, 18, 19, 20, 21, 22 ... 27  Следваща

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 12 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни