реклама на сайте
подробности

 
 
> Объявление функций для интерпретатора команд
amaora
сообщение Mar 8 2016, 16:39
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Для уменьшения избыточности и повторов в коде, сделал макрос для объявления функции и одновременного объявления элемента структуры с именем функции и адресом для вызова.

Код
#define SH_DEF(name)                \
    extern void name(const char *s);                \
    const shCMD_t __CMDEF_1__ cm_ ## name = { #name, &name};    \
    void name(const char *s)

...

#define __CMDEF_1__        __attribute__ ((section (".cmdef_1")))
#define __CMDEF_2__        __attribute__ ((section (".cmdef_2")))

В ld скрипте добавил.

Код
        . = ALIGN(4);
        cmList = .;

        *(.cmdef_1)
        *(.cmdef_2)

Функция теперь объявляется просто и ее имя упоминается только в одном месте.

Код
SH_DEF(pm_scal_B1)
{
    stof(&pm.scal_B[1], s);
    printf("%4e" EOL, &pm.scal_B[1]);
}

...

const shCMD_t __CMDEF_2__ cm_NULL = {NULL, NULL};


Вопросы:

1. Какие еще есть способы? можно ли обойтись без вмешательства в ld скрипт?
2. Как можно подобно показанному автоматизировать сохранение (сериализация) полей структуры? Лишь указав при объявлении структуры какие поля надо сохранять, а дальше вызов некой save(const struct foo *p, void * dest).
3. Тот же вопрос но теперь нужна генерация команд (как та в примере) для модификации полей структур.

С++ и далее не интересуют. Внешний парсер-генератор если только очень легкий/простой. Ничего не остается?

Спасибо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 06:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016