Перейти к содержанию
    

juvf

Свой
  • Постов

    1 611
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент juvf


  1. а я ушел от синглтонов. Сам писал синглтоны, чужой код смотрел/сопровождал с синглтонами..... абсолютно ненужная сущность. Скажу так - обратно к синглтонам не вернусь, ибо к хорошему привыкаешь быстро :rolleyes:
  2. Да, не исключен. Но он не универсальный для всех случаев жизни. для двигателя я привел енум. Там не будет DEVICE_NOT_FOUND или ERROR_OPEN_FILE. Я же говорил, что чужой код всегда гэ. "говнокод" - это не ругательство, а синоним слова "чужой код" (хотя может "чужой код" - это и есть ругательство ))) . У AlexandrY код то ещё ни кто не глянул, но зато уже пошла критика, и только за то, что там глобальные переменные. А может его код с глобальными переменными гораздо понятнее и безопаснее, чем ваши ООП-эшные извраты. то, что там кто-то не может разгрести чьи-то спагетти с глобальными, так это проблема не глобальных переменных, а проблема автора и/или читателя кода. Автор мог написать вам код без глобальных переменных так, что вы бы вообще не разобрались. если всё крутиться на ПК, то я на нижнем уровне генерирую сигнал с текстовым сообщением для юзера, а ГУИ поток этот сигнал обрабатывает слотом с выводом MessageBox и логированием. между платой датчика и платой управления двигателя свой протокол обмена. в этом протоколе определены свои коды ошибок. плата управления двигателем обрабатывает эту ошибку. например у меня два датчика. датчик передает код ошибки "превышение вращения". Плата управления обрабатывает эту ошибку по своему алгоритму и делает соответствующие действия, в скаду передается (по совершенно другому протоколу) "превышение вращения с датчика 2". Или вообще может передаться интегральное состояние всего привода. Т.е. тут уже свой набор ошибок.
  3. Чаще я ошибки обрабатываю на месте и мне не нужно их передавать выше. Если нужно выше передать, то делаю общий енум кодов ошибок для отдельного куста.
  4. IAR 8.10

    помог способ VladislavS, спасибо. Способ technik-1017 помогает, но только в одном открытом файле. Нужно в каждый заходить и править.
  5. IAR 8.10

    У меня не получилось. Я исходники иаровского проекта импортировал в Eclipse. Для stm8 пишу в еклипсе, собираю в иаре (для stm32 всё в эклипсе). Иар нормально отображает кириллицу.
  6. Кто и что мне чего то там доверяет или не доверяет? У вас это из темы в тему. Это вам кроме красной кнопки похоже чего-то не доверяют, вот вы и считаете, что кому-то что-то кто-то должен доверить. Как обычно - пустослов. Говорите за себя. А по теме ни чего не сказали..... хотя судя по вашим высказываниям про стрес-тест - с вам говорить дальше не о чем. готов подискутировать, но не в этой теме.
  7. ППКС нет там этого аппаратно. там транспортный уровень аппаратный, а протокольного нет. Например преобразователь протоколов CAN-USART (кан в любой серийный... Modbus, Гранит, МЭК-101, Лисна-Ч....) По кану от датчика приходят данные, их надо передать по МЭК-101 на OPC-сервер. Раз в секунду датчик передает пакет, преобразователь преобразовывает и передает дальше. Если пакеты от датчика пойдут 100 раз в сек.... - преобразователь может не успеть их обрабатывать... Если пакеты от датчика буферезировать, то может переполниться буфер. Ни какой аппаратный кан не поможет. Делаем. Нет катастрофы. Например эл.счетчик. Запрос-ответ, запрос-ответ. Начинаем часто запрашивать - тот отвечает или пропускает запросы, но не виснет. Можно послать запрос и не дожидаясь ответа послать ещё запрос - счетчик не должен зависнуть. Легко. На китах типа дискавери, на китах ПЛИСовых, на ПК. Если система легла - то в ней ошибка. Не важно от чего она зависла, от стрес-теста, от действия оператора или от положения звёзд на небе. Как мою плату положет тестировщик - мне не важно. Мне важно, чтобы я мог повторить эти действия и плата легла. Если стрестест её положит за минуту - это замечательно. Попробую под дебагом положить плату, буду смотреть почему лежит, буду смотреть стек вызовов. Либо без дебага, но с дебажними вставками и журналированием. Вобщем если раз в минуту я могу положить плату, то бага находиться быстро. ps в один прекрасный момент отказался от WDT. Эта штука как минимум не нужна, как максимум опасна. Если плата зависла - в программе есть ошибка, нужно её устранять. WDT пересбросит плату и ни кто не узнает о проблеме, пока гильотина не отрежет руку или не упадет самолёт не случиться непоправимое. Если плата работает круглые сутки, годами, без зависаний и без WDT - для меня это показатель, что ошибок нет.
  8. Чтобы попадать в баг не раз в месяц, а раз в 1 минуту (или хотя бы раз в час, как можно чаще). Чем чаще бага проявляется, тем легче её найти. Согласен. Но как стоит условие задачи - "глюки начинают вылазить при оживленном траффике". Нужно на столе смоделировать оживленный трафик, а также стресс-тест. Если бы было в условии "глюки начинают вылазить при ОПРЕДЕЛЁННОМ оживленном траффике, а при другом оживленном трафике нет баги", то тут сложнее, тут да, лови и моделируй нужный трафик.
  9. не получиться универсального енума, глупости это. ИМХО. Тем более 8 или всего 4 значения. У каждой функции своя задача и свои возвращаемые значения. мой черновик функции включения вращения антенны /* * -1 если нет связи с двигателем. * -2 если двигатель уже вкл. * -3 если есть превышение ветра или нет связи с анемометром при включении * -4 если нет связи с датчиком вращения антенны * -5 если открыт люк * -6 если антенна заброкированна * 1 включен двигатель 1 * 2 включен двигатель 2 * 0 выключены оба двигателя */ офф Слышали такое слово "говнокод"? Я думаю это порождение среди прогеров с/с++. Чужой код - всегда гавно. Каким бы он ни был. Либо он "не правильный", либо простой (можно услышать "фу, это аля си"), либо сложный для понимания читателя, либо он просто написан не в том стиле вплоть до того, что табы вместо пробелов, коменты на русском и т.п. Почему среди с/с++ - потому что одно и тоже можно написать 100500 способами, в отличие от других языков. С/С++ даёт творческий подход к решению задачи, и каждый поэт волен и считает что его поэма самая крутая. Язык не ограничивает пределы фантазий. Можно замутить такой оверинженеринг - шопипец, и при этом показать "смотри какой я крутой, как я могу?"
  10. нувыблиндаёте!!! Вы же нашли, можно сказать, багу и продолжаете гадать на кофейной гуще. Прибор на стол и эмулируем не то что оживленный трафик, перегруженный трафик. Во первых бага быстро появиться, во вторых вы обязаны были разработчик обязан был на столе проверить, что будет, если трафик будет перегружен.
  11. А чем этот вариант не правильный? Собираю бинарник кросскомпилятором с динамической линковкой. Собираю из бинарника пакет без всяких либ (а можно и с либами, если на таргете инета не будет), только мой бинарь. При установке линукс сам подтянет зависимсти. Правильно как раз - это кросс-компиляция. Ваши средства сборки могут не поместиться на таргете. Для openWrt свой пакет и нужные либы добавлял в сборку линукса. Всё делал на десктопе (отладку проги, компиляцию проги, сборку образа линукс). На выходе образ с моей прогой и нужными либами.
  12. Тогда нажимем кнопку Debug в Eclipse, прога загрузиться на таргет и запуститься. Хоть статически, хоть динамически. Стандартные есть в составе тулчейна. Особые библиотеки можно отдельно на десктопе кросс-компилятором собрать, можно перетянуть. Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!
  13. может тогда не стоит браться за это? Какой именно тулчейн - не подскажу, возможно любой для кортекса-а9. Собирают тулчейн из исходников с gcc.gnu.org, но забудьте про это, по крайне мере сейчас. Ищите готовый компилятор. Возможно поиск подскажет Первая ссылка уже всё украдено Oxygen, Luna, Mars - внешне одно и тоже. Работайте в кислороде, под марс могут каиенибудь плуги не заработать. есть пакет компиляторов gcc, g++, gbd, c++. Есть тулчейн arm-linux-gnueabinf, в него входят компиляторы arm-linux-gnueabinf-gcc, arm-linux-gnueabinf-g++, arm-linux-gnueabinf-c++. Что толку ставить префикс arm-linux-gnueabinf и искать arm-linux-gnueabinf-g++, если вы поставили тулчейн cross-armv6hl-gcc48-icecream-backend? Смотрите какие компиляторы установил этот пакет, какой у них префикс и где они расположились.
  14. QtCreator-у ещё нужно подрасти до Eclipse. А что касается тормознутости - так это как любое жаваприложение - старт чуть подольше, а работа без каких-либо тормозов. Тем более автор знает еклипс. В одной ИДЭ и проекты для bare metal/RTOS на МК, и проекты для Linux. ps Раньше был плуг Qt для Eclipse, сейчас нет. Плохо.
  15. Для MOXA UC-8410 был мануал. там на таргете поднимался гдб-сервер, эклипс цеплялся к нему. Сейчас настроил Eclipse для кросс-компиляции и отладки программ на Raspberry. (я сейчас в виндах, на моксе работал в дебьяне, но принцип одинаковый). тоже был разрыв шаблона.... не понимал как это делается работает.... Вобщем с Linux для МК схема такая.... 1)Если есть на МК готовая сборка линукса, то переходим на шаг 3 2)Собирается OS Linux + U-Boot + FS. Полученный образ размещается в памяти таргета. Boot МК натравливается на U-Boot. При старте МК стартует загрузчик U-Boot, который загружает ядро линукса... разворачивается FS и далее на мк живет обычный линукс, как на вашем десктопе, отдельно от ваших программ. Программы запускаются динамически также, как и на вашем десктопе. Это отличие от статических RTOS (хотя и на них, при желании, можно отделить мух от котлет). 3)Линукс запускает ваше ПО. 4)Профит!!! Вам нужен тулчейн. Либо сами соберайте, либо скачайте с инета готовый. на таргете должен работать ssh на десктопе в Eclipse делается проект с++, выберается Cross GCC в свойствах проекта c/c++ build->settings->cross settings указываем префикс arm-linux-gnueabihf- и путь до папки с кросс-компиляторами. можно собирать холловорд Дебаг: теоретически..... десктоп полученный бинарник закидывает на таргет, запускает на таргете gdbserver, на десктопе arm-linux-gnueabihf-gdb цепляется к тагрету и запускает отлаживаемую программу. Далее как на десктопе. практически: в Eclipse заходим в Debug as ..., там должно в списке быть "c/c++ remote Application". Если нет, то нужно доставить какойто плуг, не помню какой. Далее.... на майне Remote Absolute File Path for c/c++ App:" пишем полный путь /home/pi/myProgDir/myProg На вкладке Debugger путь до отладчика D:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-gdb.exe на таргете ставим гдб sudo apt-get install gdbserver или другим путем его ставим. Eclipse при дебаге будет удаленно запускать gdbserver на таргете. Ещё.... нужно создать коннекшин, на вкладке main в окне Debug configuration кнопка New, там выбрать ssh, ip таргета, логин пароль.... Всё! Запускаем дебаг - наслаждаемся дебагом под Eclipse. При отладке видим в консоли эклипса вывод (см скрин)
  16. FreeRTOS в Nordic nRF52

    С этого тему начинать нужно было. Я тоже с++ использую везде и всюду. Но FreeRTOS написана на Си. У меня проект(ы) собирает файлы *.с компилятором си, *.срр компилятором с++. Если указать, чтобы FreeRTOS собрать компилятором с++, не тошто куча ворнингов, куча ошибок в коде ртос, проект вообще не собирается. ФрииРТОС написана на пуре си, собирайте её невдумчего сишными компиляторами. Зачем туда вообще g++, если код написан и отлажен на си? Или же вдумчего перелопачевайте фриртос на с++.
  17. FreeRTOS в Nordic nRF52

    У меня в проекте FreeRTOS V8.2.1. Глянул на этот макрос - оба аргумента объявлены как volatile. PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY; PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL; ребилд олл.... выхлоп компилятора tasks.c iccarm.exe D:\Work\ip\terem5\github\terem5\freertos\tasks.c -D USE_STDPERIPH_DRIVER -D STM32F401xx -D USE_USB_OTG_FS -o D:\Work\ip\terem5\github\terem5\Debug\Obj --no_cse --no_unroll --no_inline --no_code_motion --no_tbaa --no_clustering --no_scheduling --debug --endian=little --cpu=Cortex-M4 -e --char_is_signed --fpu=VFPv4_sp --dlib_config D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.4\arm\INC\c\DLib_Config_Normal.h -I D:\ Work\ip\terem5\github\terem5\freertos\ -I D:\Work\ip\terem5\github\terem5\ -I D:\Work\ip\terem5\github\terem5\Libraries\STM32F4xx_StdPeriph_Driver\inc\ -I D:\Work\ip\terem5\github\terem5\Libraries\Usb\inc\ -I D:\Work\ip\terem5\ github\terem5\Libraries\Usb\ -I D:\Work\ip\terem5\github\terem5\Libraries\CMSIS\Device\ST\STM32F4xx\Include\ -I D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.4\arm\CMSIS\Include\ -I D:\Work\ip\terem5\github\ terem5\Libraries\STM32F4xx_StdPeriph_Driver\inc\ -I D:\Work\ip\terem5\teremSrc\Libraries\usb2\ -On 6 130 bytes of CODE memory 28 bytes of CONST memory 252 bytes of DATA memory Errors: none [b]Warnings: none[/b] Специально какие либо настройки компилятора не делал. Может IDE какие нить особые ключи компилятору передала?
  18. FreeRTOS в Nordic nRF52

    Можно заглушить этот ворнинг. Но не должно быть ни каких ворнингов изначально. У меня не разу не выскакивал подобный ворнинг, специально его я не глушил. А можете показать в каком месте FreeRTOS этот ворнинг и какая версия OС?
  19. спасибо, стал искать загрузчик и наткнулся на мануал Он есть в идэ. походу даже разбираться с фьюзами не нужно
  20. STM32СubeMX и подобные

    Не знаю. Я думаю так сложилось исторически, скорее так принято. Но он, считается, более безопасным, т.е. в нем сложнее себе в ногу стрельнуть.
  21. Есть плата ардуино на Atmega328. В своё время на нужные пины платы подрубил JTAG и сделал полноценный проект в аврстудии. Сейчас хочу в ардуиноIDE перепрограммировать плату, использовать для теста. ардуиноIDE не видит мою ардуиноПлату. Может какой-то ардуиновский загрузчик прибит? Как плату для ардуино оживить? Может джитагом какойнить ардуино загрузчик прописать? может какиенить фьзы пережечь? Есть у когонить опыт/мануалы по запуску ардуиноПлаты с голым процессором?
  22. STM32СubeMX и подобные

    Не ради спора, а чтоб расширить кругозор.... на сколько мне известно, все ПО работающее на борту пишется на Ада, также для на борту крутится какая-то АдаОС. То, что я увидел по вашей ссылке про аирбас, так это то, что они в матлабе на симулинке написали модель топливного менеджера и симулировали различные условия. по рабочекрестьянски - они годогенератором делают модели и тестбенчи. Я не носитель аглицкого, но упоминаний, что на борту использут с/с++ и годогенерированый код я не увидел. Если есть информациа о написании бортового ПО на с/с++, поделитесь пожалуйста. более того, в беспилотных ам тоже самое, что и в аирбасе... ps да такое вообще могло произойти и без ПО, педаль могла банально за коврик зацепиться.
  23. STM32СubeMX и подобные

    Нашел Это я к тому, что в ответственных приложениях не используют CubeMX кодогенератор не потому, что у генератора код глючный.
  24. STM32СubeMX и подобные

    Кто нибудь в курсе какие ОС и какой язык программирования используют для написания ПО для беспилотных автомобилей?
×
×
  • Создать...