Создание собственной системы стабилизации
defconfig менял? swd-onli? а то наттиксу подавай полный jtag…
Ты уже спрашивал, не менял я ничего. Я же говорю, если GDB запустить из консоли, то все работает, остановка, запуск, регистры посмотреть, где по коду остановка произошла (глубже я не копал, потому как не умею пользоваться GDB-)
вот этого и хочу
Посмотри код MultiWii там так и сделано.
ладно надо завязывать и делать релизную версию - сегодня АЦП проверю, если пойдёт выкину в гит - блин там с этими номерами портов каша начинается как и в маплепилоте ( типа АЦП от 100-го и до забора) и сцуко прописаны в нескольких местах…
2 Sir Alex
Проблема может быть в несовместимости версий GDB и плагина C/C++ GDB Hardware Debugger.
Стек трейс может есть при падении?
Стек трейс может есть при падении?
На экран не выдается, только ошибка NullPointerException.
А логи Eclipse я пока не искал. Вечером посмотрю.
Возможно что и не совместимость, у меня стоит самый свежий toolchain 4.7
в 6500 корпус меньше и увеличена частота акселя с 1 кГц до 4кГц - больше сходу не вижу отличий…
А я не вижу - принципиальной разницы… По ходу моих изысканий пришел к выводу, что все эти “частоты опроса” особо не нужны, так как, даже имея массив из данных (больше или меньше) отфильтровать их не получается … 😦
В последнем варианте своей ИНС, поставил частоту опроса аж 100 Гц (ради эксперимента) - работает не хуже и не лучше чем 1000 Гц… так и оставлю…
Производители похоже клепают эти чипы как “пазлы” , ничего не меняя в принципе, несомненное удобство только в том что тупо меньше корпусов размещать и паять…
Проблема может быть в несовместимости версий GDB и плагина C/C++ GDB Hardware Debugger. Стек трейс может есть при падении?
Стек в конце поста, судя по всему эклипс не может проинициализироваться, какие то пути не находит. Тут надо сделать одно отступление. Исходники которые поднимаются в проект - это Ардукоптер, а вот исходников NuttX и PX4Firmware в проекте нету.
Кроме того, для запуска GDB, указывается firmware.elf который генерируется после make и в проекте его как бы то же нет. Возможно что это все и сбивает с толку Эклипс.
java.lang.NullPointerException
at org.eclipse.cdt.debug.internal.core.model.CDebugTarget.getSourceLookupPath(CDebugTarget.java:1889)
at org.eclipse.cdt.debug.internal.core.model.CDebugTarget.getSourceLookupPath(CDebugTarget.java:1910)
at org.eclipse.cdt.debug.internal.core.model.CDebugTarget.getSourceLookupPath(CDebugTarget.java:1910)
at org.eclipse.cdt.debug.internal.core.model.CDebugTarget.setSourceLookupPath(CDebugTarget.java:1863)
at org.eclipse.cdt.debug.internal.core.model.CDebugTarget.initializeSourceLookupPath(CDebugTarget.java:385)
at org.eclipse.cdt.debug.internal.core.model.CDebugTarget.initialize(CDebugTarget.java:286)
at org.eclipse.cdt.debug.internal.core.model.CDebugTarget.<init>(CDebugTarget.java:279)
at org.eclipse.cdt.debug.core.CDIDebugModel$1.run(CDIDebugModel.java:127)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326)
at org.eclipse.cdt.debug.core.CDIDebugModel.newDebugTarget(CDIDebugModel.java:132)
at org.eclipse.cdt.debug.core.CDIDebugModel.newDebugTarget(CDIDebugModel.java:230)
at org.eclipse.cdt.debug.gdbjtag.core.GDBJtagLaunchConfigurationDelegate.launch(GDBJtagLaunchConfigurationDelegate.java:70)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:855)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:704)
at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1047)
at org.eclipse.debug.internal.ui.DebugUIPlugin$7.run(DebugUIPlugin.java:1133)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
А вот лог работы GDB из под эклипса:
19-gdb-set confirm off
19^done
(gdb)
20-gdb-set width 0
20^done
(gdb)
21-gdb-set height 0
21^done
(gdb)
22-interpreter-exec console echo
22^done
(gdb)
23-gdb-show prompt
23^done,value="(gdb) "
(gdb)
24-gdb-set new-console on
24^error,msg="No symbol table is loaded. Use the \"file\" command."
(gdb)
25 symbol-file /home/sa/mpng/PX4Firmware/Build/px4fmu-v1_APM.build/firmware.elf
&"symbol-file /home/sa/mpng/PX4Firmware/Build/px4fmu-v1_APM.build/firmware.elf\n"
symbol-file /home/sa/mpng/PX4Firmware/Build/px4fmu-v1_APM.build/firmware.elf
25^done
(gdb)
26 target remote :3333
&"target remote :3333\n"
target remote :3333
=thread-group-started,id="i1",pid="42000"
=thread-created,id="1",group-id="i1"
~"0x00000000 in ?? ()\n"
0x00000000 in ?? ()
*stopped,frame={addr="0x00000000",func="??",args=[]},thread-id="1",stopped-threads="all"
26^done
(gdb)
27 info proc
&"info proc\n"
&"Undefined info command: \"proc\". Try \"help info\".\n"
27^error,msg="Undefined info command: \"proc\". Try \"help info\"."
(gdb)
28 info program
&"info program\n"
~"Debugging a target over a serial line.\n"
~"Program stopped at 0x0.\n"
~"Type \"info stack\" or \"info registers\" for more information.\n"
28^done
(gdb)
29 info threads
&"info threads\n"
~" Id Target Id Frame \n"
~"* 1 Remote target 0x00000000 in ?? ()\n"
29^done
(gdb)
30-stack-info-depth
30^done,depth="2"
(gdb)
31-stack-list-frames 0 2
31^done,stack=[frame={level="0",addr="0x00000000",func="??"},frame={level="1",addr="0x00000000",func="??"}]
(gdb)
32-data-list-changed-registers
32^done,changed-registers=["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25"]
(gdb)
33 info sharedlibrary
&"info sharedlibrary\n"
~"No shared libraries loaded at this time.\n"
33^done
(gdb)
УРЯЯ!!! Заработало!
ubuntuone.com/4H4LjJnMKr5360ci477YAd
В общем, готовый проект для Eclipse я взял в одном из сторонних репозиториев, ссылку я давал раньше. Суть в том, что там были ссылки на LinkedFolders которых у меня не было, я их удалил из проекта и отладчик заработал ))))))))))))))
😒
Вопрос к Александру (rual), Ваш новый разрабатываемый софт на базе RTOS ??
Если нет, то хотелось бы узнать как будет (или уже есть) реализован автопилот/возврат домой ?? Дело в том, что в данный момент начал у себя писать алгоритмы полета по заданному курсу и столкнулся с явной необходимостью реализации длительных циклов ожидания разных положений аппарата в процессе полета, в этом случае идеально подходит RTOS, а если нет, - то как ??
В “сети” много подходов… Ваше мнение, если не сложно…
90% придётся использовать распределение процессов, так что, думаю, от РТОС никуда, или куча проб и ошибок (в смысле собирание имерических данных и т.п.)…
Дааааа… “тупой” мосх придётся учиииить…
или куча проб и ошибок
Некоторые программеры, я смотрю, активно ратуют за т.н. “конечный автомат”, типа самодельного переключения задач в основном цикле программы, но че то не очень красивый код получается, а скажем тот же CoOs практически не имеет внятной документации из-за своей (как некоторым кажется) простоты…
Кстати, энтот CoOs я запустил за два дня, действительно работает,… НО вдруг аппаратное прерывание стало зависать, и найти причину не представляется возможным из-за этой “простоты”, которая как говорится хуже воровства… Пока я в раздумьях…
если интересно - могу выложить чот типа мелкой ОС, простой и понятной, требующей всего 1 таймер и основанной на сообщениях. Вызов функции + параметр для нее можно вызвать сообщением либо по таймеру, настройка - на лету (создание привязки/отвязки, привязка/удаление таймера и т.п.).
В итоге в главном цикле у нас остается единственный вызов функции - dispatchMessages
П.С. - не мое, с изиэлектроникс, я прост нашел то что мне больше всего понравилось и приконопатил к себе
для примера - сейчас делаю проектик… таймер на 1мс (мин.время), задачи (таймер) каждые: 1мс-опрос энкодера, 20мс-обработка кнопок, 200мс - вывод буфера на дисплей, 1000мс - опрос 3-х DS1822, по нажатию кнопок/энкодера - работа с меню, и т.д…
АЦП так и не работает 😦 надо рыть глубже…
чёт я неправильно делаю - надо сначала в натиксе убедиться, что оно работает, а потом править арду…
Вопрос к Александру (rual), Ваш новый разрабатываемый софт на базе RTOS ??
пока нет.
столкнулся с явной необходимостью реализации длительных циклов ожидания
у меня все процессы и функции проходные, т.е. вызов-проверка условий- вычисление - запоминаем состояние - выход. Полет по точкам пока только симулировал ))) В реале боязно…
Тоже планирую перейти на РТОС, ибо это удобно программировать, но пока не до того.
активно ратуют за т.н. “конечный автомат”
Наилучшее решение, и не важно под РТОС или без.
Наттикс сообщает, что на 13 входе АЦП 2.54В - что примерно равно батарейке в 3 секции (почему примерно - старая нелётная батарейка около 11 вольт - точно не смотрел) так что само АЦП работает-надо рыться в арду - везде где встретится 100 лапа - менять на 103…
везде где встретится 100 лапа - менять на 103…
Только не менять, а выносить в дефайн. Мало ли как схемотехника в дальнейшем поменяется.
что само АЦП работает-надо рыться в арду - везде где встретится 100 лапа - менять на 103…
Арда разве лапами оперирует? Надо искать ссылку на канал АЦП или память созначением АЦП
Арда разве лапами оперирует?
АЦП она считает начиная с 100(10 вход АЦП) и до забора (макс. 16) в PX4 как раз 100 лапа для батарейки - у нас получается 103…
На сайте кокоса есть описание всех функций CoOs. Крайний дринкеропилот использует именно ейо, до этого была фриртос, но ввиду проблем с задержкой прерываний я от нее отказался.
могу выложить чот типа мелкой ОС
Если можно, хотябы ссылочку на источник …
На сайте кокоса есть описание всех функций CoOs. Крайний дринкеропилот использует именно ейо, до этого была фриртос, но ввиду проблем с задержкой прерываний я от нее отказался.
тогда к Вам вопрос (может что подскажете…):
у меня всего одно прерывание по таймеру на IMU 100 Гц (приоритет поставил “0”), так вот при его включении вся ОС виснет, отключаю - работает без проблем…
Вроде, по документации на CoOs, прерывания не использующие функции самой ОС, никак не влияют на работу системы и должны тупо прерывать планировщик…(ды оно и логично, ведь планировщик - это всего лишь прерывание SysTick с низким приоритетом)… и никаких дополнительных действий по оформлению не требуют…
Больше, к сожалению в доках ничего не нашел… В чем у меня проблема ???
Если можно, хотябы ссылочку на источник …
пока не у компа - у тещи на выходные - скину ссылку на источник
easyelectronics.ru/organizaciya-drevovidnogo-menyu…
там он как раз используется для меню на дисплее…
все что требуется для переделки под себя - переписать код таймера под свой проц (в оригинале 100Гц, у меня 1кГц) и обозвать удобными для себя именами идентификаторы функций и идентификаторы таймеров (если нужны)
to oleg70 очень мало инфо. Какой проц, среда разработки, как именно назначено прерывание и самое главное - без ртос работает? Если проц стм32ф4 то там есть нюанс с фпу.