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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Написание плагинов к кросскомпилятору GCC
_Pasha
сообщение Nov 15 2013, 12:25
Сообщение #16


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(fatlortroll @ Nov 15 2013, 09:42) *
Может, хватит флудить? Виктория, вот, убеждает меня, что тут исключительно серьёзные люди живут. Или вы тут так, проездом?

Дык я же и говорю: хватит флудить. Вместо того, чтобы выложить куски проблемного кода, Вы пытаетесь напеть Карузо по телеграфу
Go to the top of the page
 
+Quote Post
fatlortroll
сообщение Nov 16 2013, 17:17
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 16-08-13
Из: Ставрополь
Пользователь №: 77 934



Цитата(MrYuran @ Nov 15 2013, 16:13) *
Это зависит от длины байта sm.gif
В военное время может достигать числа Пи

Смех смехом, но я про то, что в скрипт придётся пихать информацию о том, что uint16_t весит 16 бит, а uint8_t таки 8, т.е. делать вручную то, что компилятор уже знает. Лениво мне за компилятор работать, вот и пытаюсь оценить, что обойдётся "меньшей кровью" -- писать плагин к компилятору, или писать кусок компилятора.

Цитата(_Pasha @ Nov 15 2013, 16:25) *
Дык я же и говорю: хватит флудить. Вместо того, чтобы выложить куски проблемного кода, Вы пытаетесь напеть Карузо по телеграфу

OK, в понедельник зашлю куски кода.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 16 2013, 17:29
Сообщение #18


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(fatlortroll @ Nov 16 2013, 20:17) *
Смех смехом, но я про то, что в скрипт придётся пихать информацию о том, что uint16_t весит 16 бит, а uint8_t таки 8, т.е. делать вручную то, что компилятор уже знает. Лениво мне за компилятор работать, вот и пытаюсь оценить, что обойдётся "меньшей кровью" -- писать плагин к компилятору, или писать кусок компилятора.

вот - читаешь Ваши умозаключения - и видно, что они слишком сложные. Почему именно, - непонятно, пока не увидим код, т.е. видны признаки, что Вы не использовали какой-то простейший прием программирования и это привело Вас к противоречиям.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 16 2013, 19:23
Сообщение #19


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(fatlortroll @ Nov 16 2013, 23:17) *
Лениво мне за компилятор работать, вот и пытаюсь оценить, что обойдётся "меньшей кровью" -- писать плагин к компилятору, или писать кусок компилятора.

Вы, вероятно, пропустили моё сообщение на прошлой странице. Там вариант с самой малой кровью.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 17 2013, 19:05
Сообщение #20


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



голосую неистово за вариант от AHTOXA
но ради разнообразия предложе еще вариант
после генерации бинаря линкер если ему сказать выплевывает мап файл с указанием всех объектов програмки их адресов и размеров. Ваш скрипт может пройтись по нему и вытащить размеры чего угодно. таким образом автоматически решится вопрос с размерами структур и тп отправляемых по шинке во внешний мир, .... добавили поле , сгенирили бинарь -скрипт опять автоматом прошелся и обновил размнр пакетика...
я бы так сделал бы.
Go to the top of the page
 
+Quote Post
fatlortroll
сообщение Nov 18 2013, 05:12
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 16-08-13
Из: Ставрополь
Пользователь №: 77 934



Цитата(AHTOXA @ Nov 16 2013, 23:23) *
Вы, вероятно, пропустили моё сообщение на прошлой странице. Там вариант с самой малой кровью.


Прошу прощения, банально позабыл. Пятница была, всё же. :-) Вот куски кода:

Код
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*, то скрипту надо узнать её тип, и размер. Сейчас они явно указываются в самой структуре и комментарии, но есть вероятность ошибиться, или просто забыть обновить информацию после смены типа переменной, или размера массива. Вот я и захотел это дело автоматизировать. А поскольку лучше компилятора никто не знает, что творится в коде -- отдать эту работу ему.
Ну и просто интересно стало, как же пишутся плагины на кросскомпилятор.

Цитата(klen @ Nov 17 2013, 23:05) *
голосую неистово за вариант от AHTOXA
но ради разнообразия предложе еще вариант
после генерации бинаря линкер если ему сказать выплевывает мап файл с указанием всех объектов програмки их адресов и размеров. Ваш скрипт может пройтись по нему и вытащить размеры чего угодно. таким образом автоматически решится вопрос с размерами структур и тп отправляемых по шинке во внешний мир, .... добавили поле , сгенирили бинарь -скрипт опять автоматом прошелся и обновил размнр пакетика...
я бы так сделал бы.


Идея интересная, спасибо. Но в выхлопе map-файла указывается только общий размер массива/структуры. Есть ли возможность попросить у компилятора более подробную информацию о них? Размеры полей структуры, размер элемента массива.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 18 2013, 06:16
Сообщение #22


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



а, ну тогда заполняйте таким образом

Код
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 заполнять

Go to the top of the page
 
+Quote Post
fatlortroll
сообщение Nov 18 2013, 06:33
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 16-08-13
Из: Ставрополь
Пользователь №: 77 934



Цитата(_Pasha @ Nov 18 2013, 10:16) *
Код
   {0x00, (void*) &TestStruct,   A_R | A_W, sizeof(TestStruct)}, //              "TestStruct"

Команды желательно сразу в enum задать
Поля желаьельно сразу из-под #define заполнять


Хе... Так скрипт вместо размера увидит это самое sizeof(TestStruct), и, вдогонку, не узнает количество полей в той структуре, или элементов в массиве.

А какой профит от заполнения полей через define-ы?
Go to the top of the page
 
+Quote Post
psL
сообщение Nov 24 2013, 19:48
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Можно обойтись и без плагина - использовать один хедер для прошивки устройства и внешней утилиты, но тогда, насколько понимаю, при обновлении прошивки необходимо будет пересобирать внешнюю утилиту.
В этом проблема? Видимо, предполагается включать текущую версию протокола в утилиту как текстовый файл?
Как вариант, можно передавать изменения через динамическую библиотеку, которая собирается с хедером текущей версии прошивки (протокола обмена). В этом случае внешняя утилита сможет даже загружать версию библиотеки, соответствующую версии прошивки (если команда опроса версии будет одинаковой для всех версий протокола).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th July 2025 - 17:23
Рейтинг@Mail.ru


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