_Pasha 0 15 ноября, 2013 Опубликовано 15 ноября, 2013 · Жалоба Может, хватит флудить? Виктория, вот, убеждает меня, что тут исключительно серьёзные люди живут. Или вы тут так, проездом? Дык я же и говорю: хватит флудить. Вместо того, чтобы выложить куски проблемного кода, Вы пытаетесь напеть Карузо по телеграфу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fatlortroll 0 16 ноября, 2013 Опубликовано 16 ноября, 2013 · Жалоба Это зависит от длины байта :) В военное время может достигать числа Пи Смех смехом, но я про то, что в скрипт придётся пихать информацию о том, что uint16_t весит 16 бит, а uint8_t таки 8, т.е. делать вручную то, что компилятор уже знает. Лениво мне за компилятор работать, вот и пытаюсь оценить, что обойдётся "меньшей кровью" -- писать плагин к компилятору, или писать кусок компилятора. Дык я же и говорю: хватит флудить. Вместо того, чтобы выложить куски проблемного кода, Вы пытаетесь напеть Карузо по телеграфу OK, в понедельник зашлю куски кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 16 ноября, 2013 Опубликовано 16 ноября, 2013 · Жалоба Смех смехом, но я про то, что в скрипт придётся пихать информацию о том, что uint16_t весит 16 бит, а uint8_t таки 8, т.е. делать вручную то, что компилятор уже знает. Лениво мне за компилятор работать, вот и пытаюсь оценить, что обойдётся "меньшей кровью" -- писать плагин к компилятору, или писать кусок компилятора. вот - читаешь Ваши умозаключения - и видно, что они слишком сложные. Почему именно, - непонятно, пока не увидим код, т.е. видны признаки, что Вы не использовали какой-то простейший прием программирования и это привело Вас к противоречиям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 16 ноября, 2013 Опубликовано 16 ноября, 2013 · Жалоба Лениво мне за компилятор работать, вот и пытаюсь оценить, что обойдётся "меньшей кровью" -- писать плагин к компилятору, или писать кусок компилятора. Вы, вероятно, пропустили моё сообщение на прошлой странице. Там вариант с самой малой кровью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 17 ноября, 2013 Опубликовано 17 ноября, 2013 · Жалоба голосую неистово за вариант от AHTOXA но ради разнообразия предложе еще вариант после генерации бинаря линкер если ему сказать выплевывает мап файл с указанием всех объектов програмки их адресов и размеров. Ваш скрипт может пройтись по нему и вытащить размеры чего угодно. таким образом автоматически решится вопрос с размерами структур и тп отправляемых по шинке во внешний мир, .... добавили поле , сгенирили бинарь -скрипт опять автоматом прошелся и обновил размнр пакетика... я бы так сделал бы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fatlortroll 0 18 ноября, 2013 Опубликовано 18 ноября, 2013 · Жалоба Вы, вероятно, пропустили моё сообщение на прошлой странице. Там вариант с самой малой кровью. Прошу прощения, банально позабыл. Пятница была, всё же. :-) Вот куски кода: struct { uint8_t first; uint8_t second; uint8_t third; } TestStruct; const int16_t TestInteger = 9000; float TestFloat; struct { const char command; // Номер переменной const void* addr; // Указатель на переменную, приведённый к void* const char access; // Доступ к переменной (чтение/запись) const char len; // Размер переменной (в байтах), и, после '*', количество подобных переменных в массиве/структуре } const ptable[] = { //!PT_BEGIN {0x00, (void*) &TestStruct, A_R | A_W, 1 * 3}, // "TestStruct" {0x01, (void*) &TestInteger, A_R, 2}, // (signed) "TestInteger" {0xF0, (void*) &TestFloat, A_R | A_W, } // (float) "TestFloat or another text" }; Поскольку указатель на переменную кастуется к void*, то скрипту надо узнать её тип, и размер. Сейчас они явно указываются в самой структуре и комментарии, но есть вероятность ошибиться, или просто забыть обновить информацию после смены типа переменной, или размера массива. Вот я и захотел это дело автоматизировать. А поскольку лучше компилятора никто не знает, что творится в коде -- отдать эту работу ему. Ну и просто интересно стало, как же пишутся плагины на кросскомпилятор. голосую неистово за вариант от AHTOXA но ради разнообразия предложе еще вариант после генерации бинаря линкер если ему сказать выплевывает мап файл с указанием всех объектов програмки их адресов и размеров. Ваш скрипт может пройтись по нему и вытащить размеры чего угодно. таким образом автоматически решится вопрос с размерами структур и тп отправляемых по шинке во внешний мир, .... добавили поле , сгенирили бинарь -скрипт опять автоматом прошелся и обновил размнр пакетика... я бы так сделал бы. Идея интересная, спасибо. Но в выхлопе map-файла указывается только общий размер массива/структуры. Есть ли возможность попросить у компилятора более подробную информацию о них? Размеры полей структуры, размер элемента массива. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 18 ноября, 2013 Опубликовано 18 ноября, 2013 · Жалоба а, ну тогда заполняйте таким образом struct _interf { uint8_t first; uint8_t second; uint8_t third; } TestStruct; const ptable[] = { //!PT_BEGIN {0x00, (void*) &TestStruct, A_R | A_W, sizeof(TestStruct)}, // "TestStruct" {0x01, (void*) &TestInteger, A_R, sizeof(TestInteger)}, // (signed) "TestInteger" {0xF0, (void*) &TestFloat, A_R | A_W, sizeof(TestFloat)}, // (float) "TestFloat or another text" {0xF1, &(TestStruct.third), A_R, sizeof(TestStruct.third)} }; Команды желательно сразу в enum задать Поля желаьельно сразу из-под #define заполнять Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fatlortroll 0 18 ноября, 2013 Опубликовано 18 ноября, 2013 · Жалоба {0x00, (void*) &TestStruct, A_R | A_W, sizeof(TestStruct)}, // "TestStruct" Команды желательно сразу в enum задать Поля желаьельно сразу из-под #define заполнять Хе... Так скрипт вместо размера увидит это самое sizeof(TestStruct), и, вдогонку, не узнает количество полей в той структуре, или элементов в массиве. А какой профит от заполнения полей через define-ы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
psL 0 24 ноября, 2013 Опубликовано 24 ноября, 2013 · Жалоба Можно обойтись и без плагина - использовать один хедер для прошивки устройства и внешней утилиты, но тогда, насколько понимаю, при обновлении прошивки необходимо будет пересобирать внешнюю утилиту. В этом проблема? Видимо, предполагается включать текущую версию протокола в утилиту как текстовый файл? Как вариант, можно передавать изменения через динамическую библиотеку, которая собирается с хедером текущей версии прошивки (протокола обмена). В этом случае внешняя утилита сможет даже загружать версию библиотеки, соответствующую версии прошивки (если команда опроса версии будет одинаковой для всех версий протокола). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться