Jump to content

    

demiurg_spb

Свой
  • Content Count

    2777
  • Joined

  • Last visited

Everything posted by demiurg_spb


  1. Виртуальная машина

    Забейте в гугле "beremiz руководство" и увидите доку на русском языке...
  2. Виртуальная машина

    1. Проект не портируется, а создаётся Ваш плагин для интеграции вашего таргета в IDE Beremiz. По времени - всё зависит от квалификации разработчика от (нескольких дней до нескольких месяцев или даже лет). 2. "Их" компилятор - это Ваш родной компилятор Си, которым Вы обычно собираете прошивку для своего таргета. Поэтому как вы захотите так и будет. Хоть есть ОС в проекте, хоть нет. Глобальный смысл - дать возможность конфигурировать _пользовательскую_ часть СИ-проекта через интерфейс IDE Beremiz, не затрагивая базовых модулей проекта, коих может быть целая куча (интерфейсы, протоколы, алгоритмы и т.п.). Эти базовые модули уже скомпилированы заранее в системную библиотеку, ассоциированную с вашим плагином. Если будут дополнительные вопросы, то почитайте эту ветку https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=132105 и подпишитесь на рассылку beremiz-devel@lists.sourceforge.net.
  3. Виртуальная машина

    А квалифицированных, способных заниматься реверс-инжинирингом, в пределах статистической погрешности. Не льстите им...
  4. Виртуальная машина

    Пересобирать ВЕСЬ проект не надо. Надо лишь пересобрать ТОЛКО пользовательскую часть и СЛИНКОВАТЬ с библиотекой (она не в исходных кодах...)
  5. Виртуальная машина

    Да. Я дописал сообщение, но не меняя его смыла. А что страшного в передаче пользователю библиотеки для линковки проекта? Вы думаете, что кто-то позарится на Вашу интеллектуальную собственность? Да шансы есть. Тогда можно сделать двухуровневый загрузчик и вынести туда ту часть которую вы хотите сокрыть. Всегда есть варианты...
  6. Виртуальная машина

    Решать всё равно Вам, я лишь предложил пройденный нами путь.
  7. Виртуальная машина

    Да. И что? Вся прошивка заливается заново всякий раз как пользователь что-то изменил в алгоритме. Неизменный лишь bootloader. Это оптимально для маленьких контроллеров: никаких виртуальных машин и интерпретаторов.
  8. Виртуальная машина

    Вольному - воля...
  9. Виртуальная машина

    Логическое реле это тот же ПЛК, просто мало входов-выходов. А пользователю конечному гораздо удобнее работать с такими изделиями стандартными средствами (языки МЭК 61131-3), а не Си и т.п.... Мы подобное даже на AVR делали. Так что по поводу ресурсов не переживайте - там генерируется Си-код, который компилируется нативным компилятором и готовая прога по bootloader загружается в контроллер.
  10. Виртуальная машина

    Вы случаем не ПЛК изобретаете? Если так, то Вам сюда дорога https://beremiz.org/
  11. STM32F7XX + RTOS

    Начиная с версии ядра 2.5.46, проект был объединён с основной линией разработки ядра Linux. Грег Ангерер (автор μClinux порта для ColdFire) продолжил активную работу по внедрению поддержки μClinux в основную линию разработки ядра Linux серии 2.6. Таким образом μClinux перестал быть отдельным ответвлением Linux.
  12. STM32F7XX + RTOS

    Даже на AVR8 делает вид, что работает http://dmitry.gr/?r=05.Projects&proj=07.+Linux+on+8bit
  13. STM32F7XX + RTOS

    Умеючи повесить можно что угодно... Ваш вопрос не имеет никакого ответа, т.к. никто кроме вас не знает никаких подробностей.
  14. Вчера столкнулся с удивительным на мой взгляд явлением. После переноса части исходников из рабочего проекта для bare-metal embedded в проект Qt под linux неожиданно стал появляться SEGMENTATION FAULT. После недолгой отладки выяснил что падает при попытке записи байта в строку (прошу заметить не константную строку!!!). void foo(char* s) { s[4] = '\0'; } foo("prog"); // segmentation fault inside! Погуглил, оказалось вот в чём причина. Я выпал в осадок... https://stackoverflow.com/questions/164194/why-do-i-get-a-segmentation-fault-when-writing-to-a-string-initialized-with-cha
  15. Си строки. Мир рухнул...

    Ладно. Обсуждать тут больше нечего. Ко всему можно привыкнуть. Удивляет лишь молчаливая компиляция заведомо нерабочего кода. Вроде как язык со строгой типизацией, но такой странной... Логичнее было бы какой тип слева от равно (const не const) туда и класть элементы. И тогда всё само собой бы разрулилось. int printf( const char *format, ... ); // всё бы в RO закинулось, а в моём примере в RW
  16. Си строки. Мир рухнул...

    Это правильный пример в контексте необходимости дублирования функций (const и не const) для достижения целей оптимизации. Дайте ссылку что-ли на стандарт где хоть как-то упоминается о том что Си приводит char const * -> char *. Это нонсенс. ИМХО.
  17. Си строки. Мир рухнул...

    void foo(char* str) {puts(str);} void cfoo(const char* str) {puts(str);} int main(void) { const char str[] = "123"; // const char* str = "123"; // так тоже самое foo(str); cfoo(str); return 0; } test_const.c: In function ‘main’: test_const.c:20:6: warning: passing argument 1 of ‘foo’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] foo(str); ^~~ test_const.c:5:16: note: expected ‘char *’ but argument is of type ‘const char *’ void foo(char* str) ~~~~~~^~~
  18. Си строки. Мир рухнул...

    to: jcxz Ничего страшного не будет. Компилятор выдаст ошибку, что неявно const char* приводится к char* - это стандартное поведение. Мне не ясно почему он мне не дал этого предупреждения (из примера в первом посте). Он же знал что строковый литерал положит в RO и смолчал. А функций действительно будет больше в 2 раза. Печаль. Я понял что так принято и ничего с этим уже не сделать. Понять и простить...
  19. Си строки. Мир рухнул...

    Ну да. Палка о двух концах. Теперь исходники не так красиво будут выглядеть. char str[] = "prog"; foo(str); вместо foo("prog"); Но я всё равно против. Для решения указанных Вами задач я бы использовал две отдельные функции. cprintf(const char*, ...) printf(char*, ...)
  20. Си строки. Мир рухнул...

    Это не С++, а Си модуль подключенный к плюсатому проекту. Так что Ваше замечание не в тему. ИМХО.
  21. Си строки. Мир рухнул...

    Не понимаю зачем это сделано. Ведь когда мне будет явно нужно сделать строку константной то я сам это и сделаю const char* str1 = "abc"; А когда не надо, то без const. Логичнее некуда. Не согласны?
  22. Опять клеим #defines

    #define _f0(x) (((x) & 0xF0) >> 4 | ((x) & 0x0F) << 4) #define _cc(x) (((x) & 0xCC) >> 2 | ((x) & 0x33) << 2) #define _aa(x) (((x) & 0xAA) >> 1 | ((x) & 0x55) << 1) #define REV_BYTE(x) _aa(_cc(_f0(x))) - так нагляднее будет)
  23. В общем случае никак. Тут что фильтрацию с большой постоянной времени применяй, что ваши гистерезисы - всё это внесёт в динамике дополнительную погрешность.
  24. Ключевое слово МОЖЕТ. ИМХО вероятность такого дрожания как минимум в 2 раза ниже при увеличении разрядности АЦП вдвое.
  25. Это нормальный подход, когда вы собираетесь зарегистрировать свой прибор в реестре средств измерений) Хотя я с вами согласен. Все идут по пути удешевления.