-
Постов
1 611 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Весь контент juvf
-
Коды завершения функции
juvf ответил ViKo тема в Программирование
а я ушел от синглтонов. Сам писал синглтоны, чужой код смотрел/сопровождал с синглтонами..... абсолютно ненужная сущность. Скажу так - обратно к синглтонам не вернусь, ибо к хорошему привыкаешь быстро :rolleyes: -
Коды завершения функции
juvf ответил ViKo тема в Программирование
Да, не исключен. Но он не универсальный для всех случаев жизни. для двигателя я привел енум. Там не будет DEVICE_NOT_FOUND или ERROR_OPEN_FILE. Я же говорил, что чужой код всегда гэ. "говнокод" - это не ругательство, а синоним слова "чужой код" (хотя может "чужой код" - это и есть ругательство ))) . У AlexandrY код то ещё ни кто не глянул, но зато уже пошла критика, и только за то, что там глобальные переменные. А может его код с глобальными переменными гораздо понятнее и безопаснее, чем ваши ООП-эшные извраты. то, что там кто-то не может разгрести чьи-то спагетти с глобальными, так это проблема не глобальных переменных, а проблема автора и/или читателя кода. Автор мог написать вам код без глобальных переменных так, что вы бы вообще не разобрались. если всё крутиться на ПК, то я на нижнем уровне генерирую сигнал с текстовым сообщением для юзера, а ГУИ поток этот сигнал обрабатывает слотом с выводом MessageBox и логированием. между платой датчика и платой управления двигателя свой протокол обмена. в этом протоколе определены свои коды ошибок. плата управления двигателем обрабатывает эту ошибку. например у меня два датчика. датчик передает код ошибки "превышение вращения". Плата управления обрабатывает эту ошибку по своему алгоритму и делает соответствующие действия, в скаду передается (по совершенно другому протоколу) "превышение вращения с датчика 2". Или вообще может передаться интегральное состояние всего привода. Т.е. тут уже свой набор ошибок. -
Коды завершения функции
juvf ответил ViKo тема в Программирование
Чаще я ошибки обрабатываю на месте и мне не нужно их передавать выше. Если нужно выше передать, то делаю общий енум кодов ошибок для отдельного куста. -
Кто и что мне чего то там доверяет или не доверяет? У вас это из темы в тему. Это вам кроме красной кнопки похоже чего-то не доверяют, вот вы и считаете, что кому-то что-то кто-то должен доверить. Как обычно - пустослов. Говорите за себя. А по теме ни чего не сказали..... хотя судя по вашим высказываниям про стрес-тест - с вам говорить дальше не о чем. готов подискутировать, но не в этой теме.
-
ППКС нет там этого аппаратно. там транспортный уровень аппаратный, а протокольного нет. Например преобразователь протоколов CAN-USART (кан в любой серийный... Modbus, Гранит, МЭК-101, Лисна-Ч....) По кану от датчика приходят данные, их надо передать по МЭК-101 на OPC-сервер. Раз в секунду датчик передает пакет, преобразователь преобразовывает и передает дальше. Если пакеты от датчика пойдут 100 раз в сек.... - преобразователь может не успеть их обрабатывать... Если пакеты от датчика буферезировать, то может переполниться буфер. Ни какой аппаратный кан не поможет. Делаем. Нет катастрофы. Например эл.счетчик. Запрос-ответ, запрос-ответ. Начинаем часто запрашивать - тот отвечает или пропускает запросы, но не виснет. Можно послать запрос и не дожидаясь ответа послать ещё запрос - счетчик не должен зависнуть. Легко. На китах типа дискавери, на китах ПЛИСовых, на ПК. Если система легла - то в ней ошибка. Не важно от чего она зависла, от стрес-теста, от действия оператора или от положения звёзд на небе. Как мою плату положет тестировщик - мне не важно. Мне важно, чтобы я мог повторить эти действия и плата легла. Если стрестест её положит за минуту - это замечательно. Попробую под дебагом положить плату, буду смотреть почему лежит, буду смотреть стек вызовов. Либо без дебага, но с дебажними вставками и журналированием. Вобщем если раз в минуту я могу положить плату, то бага находиться быстро. ps в один прекрасный момент отказался от WDT. Эта штука как минимум не нужна, как максимум опасна. Если плата зависла - в программе есть ошибка, нужно её устранять. WDT пересбросит плату и ни кто не узнает о проблеме, пока гильотина не отрежет руку или не упадет самолёт не случиться непоправимое. Если плата работает круглые сутки, годами, без зависаний и без WDT - для меня это показатель, что ошибок нет.
-
Чтобы попадать в баг не раз в месяц, а раз в 1 минуту (или хотя бы раз в час, как можно чаще). Чем чаще бага проявляется, тем легче её найти. Согласен. Но как стоит условие задачи - "глюки начинают вылазить при оживленном траффике". Нужно на столе смоделировать оживленный трафик, а также стресс-тест. Если бы было в условии "глюки начинают вылазить при ОПРЕДЕЛЁННОМ оживленном траффике, а при другом оживленном трафике нет баги", то тут сложнее, тут да, лови и моделируй нужный трафик.
-
Коды завершения функции
juvf ответил ViKo тема в Программирование
не получиться универсального енума, глупости это. ИМХО. Тем более 8 или всего 4 значения. У каждой функции своя задача и свои возвращаемые значения. мой черновик функции включения вращения антенны /* * -1 если нет связи с двигателем. * -2 если двигатель уже вкл. * -3 если есть превышение ветра или нет связи с анемометром при включении * -4 если нет связи с датчиком вращения антенны * -5 если открыт люк * -6 если антенна заброкированна * 1 включен двигатель 1 * 2 включен двигатель 2 * 0 выключены оба двигателя */ офф Слышали такое слово "говнокод"? Я думаю это порождение среди прогеров с/с++. Чужой код - всегда гавно. Каким бы он ни был. Либо он "не правильный", либо простой (можно услышать "фу, это аля си"), либо сложный для понимания читателя, либо он просто написан не в том стиле вплоть до того, что табы вместо пробелов, коменты на русском и т.п. Почему среди с/с++ - потому что одно и тоже можно написать 100500 способами, в отличие от других языков. С/С++ даёт творческий подход к решению задачи, и каждый поэт волен и считает что его поэма самая крутая. Язык не ограничивает пределы фантазий. Можно замутить такой оверинженеринг - шопипец, и при этом показать "смотри какой я крутой, как я могу?" -
нувыблиндаёте!!! Вы же нашли, можно сказать, багу и продолжаете гадать на кофейной гуще. Прибор на стол и эмулируем не то что оживленный трафик, перегруженный трафик. Во первых бага быстро появиться, во вторых вы обязаны были разработчик обязан был на столе проверить, что будет, если трафик будет перегружен.
-
А чем этот вариант не правильный? Собираю бинарник кросскомпилятором с динамической линковкой. Собираю из бинарника пакет без всяких либ (а можно и с либами, если на таргете инета не будет), только мой бинарь. При установке линукс сам подтянет зависимсти. Правильно как раз - это кросс-компиляция. Ваши средства сборки могут не поместиться на таргете. Для openWrt свой пакет и нужные либы добавлял в сборку линукса. Всё делал на десктопе (отладку проги, компиляцию проги, сборку образа линукс). На выходе образ с моей прогой и нужными либами.
-
Тогда нажимем кнопку Debug в Eclipse, прога загрузиться на таргет и запуститься. Хоть статически, хоть динамически. Стандартные есть в составе тулчейна. Особые библиотеки можно отдельно на десктопе кросс-компилятором собрать, можно перетянуть. Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!
-
может тогда не стоит браться за это? Какой именно тулчейн - не подскажу, возможно любой для кортекса-а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? Смотрите какие компиляторы установил этот пакет, какой у них префикс и где они расположились.
-
QtCreator-у ещё нужно подрасти до Eclipse. А что касается тормознутости - так это как любое жаваприложение - старт чуть подольше, а работа без каких-либо тормозов. Тем более автор знает еклипс. В одной ИДЭ и проекты для bare metal/RTOS на МК, и проекты для Linux. ps Раньше был плуг Qt для Eclipse, сейчас нет. Плохо.
-
Для 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. При отладке видим в консоли эклипса вывод (см скрин)
-
С этого тему начинать нужно было. Я тоже с++ использую везде и всюду. Но FreeRTOS написана на Си. У меня проект(ы) собирает файлы *.с компилятором си, *.срр компилятором с++. Если указать, чтобы FreeRTOS собрать компилятором с++, не тошто куча ворнингов, куча ошибок в коде ртос, проект вообще не собирается. ФрииРТОС написана на пуре си, собирайте её невдумчего сишными компиляторами. Зачем туда вообще g++, если код написан и отлажен на си? Или же вдумчего перелопачевайте фриртос на с++.
-
У меня в проекте 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 какие нить особые ключи компилятору передала?
-
Можно заглушить этот ворнинг. Но не должно быть ни каких ворнингов изначально. У меня не разу не выскакивал подобный ворнинг, специально его я не глушил. А можете показать в каком месте FreeRTOS этот ворнинг и какая версия OС?
-
спасибо, стал искать загрузчик и наткнулся на мануал Он есть в идэ. походу даже разбираться с фьюзами не нужно
-
Не знаю. Я думаю так сложилось исторически, скорее так принято. Но он, считается, более безопасным, т.е. в нем сложнее себе в ногу стрельнуть.
-
Есть плата ардуино на Atmega328. В своё время на нужные пины платы подрубил JTAG и сделал полноценный проект в аврстудии. Сейчас хочу в ардуиноIDE перепрограммировать плату, использовать для теста. ардуиноIDE не видит мою ардуиноПлату. Может какой-то ардуиновский загрузчик прибит? Как плату для ардуино оживить? Может джитагом какойнить ардуино загрузчик прописать? может какиенить фьзы пережечь? Есть у когонить опыт/мануалы по запуску ардуиноПлаты с голым процессором?
-
Не ради спора, а чтоб расширить кругозор.... на сколько мне известно, все ПО работающее на борту пишется на Ада, также для на борту крутится какая-то АдаОС. То, что я увидел по вашей ссылке про аирбас, так это то, что они в матлабе на симулинке написали модель топливного менеджера и симулировали различные условия. по рабочекрестьянски - они годогенератором делают модели и тестбенчи. Я не носитель аглицкого, но упоминаний, что на борту использут с/с++ и годогенерированый код я не увидел. Если есть информациа о написании бортового ПО на с/с++, поделитесь пожалуйста. более того, в беспилотных ам тоже самое, что и в аирбасе... ps да такое вообще могло произойти и без ПО, педаль могла банально за коврик зацепиться.
-
Нашел Это я к тому, что в ответственных приложениях не используют CubeMX кодогенератор не потому, что у генератора код глючный.
-
Кто нибудь в курсе какие ОС и какой язык программирования используют для написания ПО для беспилотных автомобилей?