Jump to content

    

fatlortroll

Участник
  • Content Count

    26
  • Joined

  • Last visited

Community Reputation

0 Обычный

About fatlortroll

  • Rank
    Участник
  • Birthday 09/29/1982

Информация

  • Город
    Ставрополь
  1. Проблемы при линковке C++-кода обычно возникают при попытках использовать декорированные функции, как обычные C-шные. А вообще было бы неплохо в первом же сообщении эти проблемы и продемонстрировать. Пытаться угадать, что-же сломалось без какой-либо информации -- тяжко.
  2. Visual Studio 2010, tcpclient

    Цитатаесть буфер byte[] buffer = new... Он "местного значения" Выделяется память, и не освобождается. Уже проблема. Почему-то выделяется _tcpСlient.Available байт памяти, а читать пытается buffer.Length (кстати, откуда у buffer, который простой массив, берётся Length? как это вообще компилируется?). Ну и в конце концов, отчего не передать в ns.Read указатель на глобальный массив, и его размер? Не надо будет каждый раз выделять память в потоке.
  3. Вот здесь пишут, что привилегированный режим по умолчанию доступен сразу после сброса контроллера: Thread mode is privileged out of reset, but you can change it to user or unprivileged by...
  4. расположить массив в памяти (Си)

    А в прошивке используется выделение памяти на куче (операторы new, new[]), или всё статически на этапе компиляции задаётся?
  5. расположить массив в памяти (Си)

    Массив с изменяемыми данными, или с константами? Насколько сильно отбирает ОЗУ остальная программа? Если добавить-убрать глобальных переменных, расположенных в ОЗУ, размер массива, с которого появляется ошибка, будет изменяться?
  6. Можно и в OpenModelica попрактиковаться. Вполне достойная штука, много примеров, хорошая справочная система.
  7. Ещё с утра смотрел -- не было, а тут вот какая радость! Будем пробовать.
  8. Скопируй ту переменную в оперативку, и изменяй её, как хочешь. И, кстати, используется встроенная flash-память контроллера, как я понимаю? Она, разве, позволяет изменять данные меньше, чем страницей?
  9. Цитата(_Pasha @ Nov 18 2013, 10:16) Код   {0x00, (void*) &TestStruct,   A_R | A_W, sizeof(TestStruct)}, //              "TestStruct" Команды желательно сразу в enum задать Поля желаьельно сразу из-под #define заполнять Хе... Так скрипт вместо размера увидит это самое sizeof(TestStruct), и, вдогонку, не узнает количество полей в той структуре, или элементов в массиве. А какой профит от заполнения полей через define-ы?
  10. Цитата(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-файла указывается только общий размер массива/структуры. Есть ли возможность попросить у компилятора более подробную информацию о них? Размеры полей структуры, размер элемента массива.
  11. Float-ядро для double операций

    Цитата(AlexeyT @ Nov 16 2013, 15:18) Вопрос - есть ли способ использовать float-сопроцессор для операций формата double? Хотя бы для самых простых - сложение и вычитание?Если не смутит ссылка на Хабр, то здесь достаточно подробно описаны внутренности чисел с плавающей точкой, и сразу станет ясно, отчего более короткие float не удастся приспособить под работу с double, которые длиннее их.
  12. Цитата(MrYuran @ Nov 15 2013, 16:13) Это зависит от длины байта В военное время может достигать числа Пи Смех смехом, но я про то, что в скрипт придётся пихать информацию о том, что uint16_t весит 16 бит, а uint8_t таки 8, т.е. делать вручную то, что компилятор уже знает. Лениво мне за компилятор работать, вот и пытаюсь оценить, что обойдётся "меньшей кровью" -- писать плагин к компилятору, или писать кусок компилятора. Цитата(_Pasha @ Nov 15 2013, 16:25) Дык я же и говорю: хватит флудить. Вместо того, чтобы выложить куски проблемного кода, Вы пытаетесь напеть Карузо по телеграфу OK, в понедельник зашлю куски кода.
  13. Цитата(msalov @ Nov 15 2013, 12:16) Вообще-то упомянутые вами типы данных строго определены стандартом. Во floate 4 байта на всех платформах, а в uint16_t 16 бит (2 байта) тоже на всех платформах. Потому что эти типы вводились как раз для переносимости между платформами. Может отличаться только порядок байт. float и double, если я не ошибаюсь, могут иметь одинаковый размер, а могут и разный. По крайней мере мне вспоминается, что на AVR sizeof(float) == sizeof(double). И опять же, не хочется выносить во внешний скрипт часть парсера C-C++, хочется отдать максимум работы компилятору.
  14. Прерывания ARM946E

    А как сам контроллер зовут? STM-овский?
  15. Цитата(Виктория @ Nov 15 2013, 10:57) Но, ведь, как я понимаю, нужна ещё конкретная инфа от контроллера о тегах и фукциональных кодах? Как это передать? Вытащить наружу таблицу символов линковщика? Нет, этого, пожалуй, не требуется. Если очень кратко -- то структура в контроллере содержит следующие поля: номер, под которым структура значится в массиве; адрес переменной (или функции), приведённый к void*; доступ к переменной (функции) -- чтение/запись/выполнение; длина в байтах переменной (для функции неактуально). В сгенерированный файл пишется: имя переменной (или функции); идентификация поля, как переменной, или функции; номер структуры; кодовое обозначение типа данных для переменной; длина переменной в байтах. Уф... Вроде, всё. Из этого файла общалка формирует запросы к контроллеру, а тот пытается их обработать в соответствии с полями структуры.