Ардупилот на платах OpenPilot Revolution / RevoMini (записей: 1756)

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад
    [2017-10-02 10:54:31] night_ghost писал(а): Хотя глюк вроде прошел после увеличения стека задачи

    Памяти-то в чипе хватает пока?

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Памяти всегда не хватает :) Но таки пока есть еще ~20к CCM которая вообще никому не нужна, ибо недоступна системному аллокатору.

    Сейчас при загрузке расписываю стек 0x55 дабы видеть кто сколько поюзал

    UPD. Залез во FreeRtos который идет вместе с Cube дабы поучиться как умные люди стек задачи выделяют. Увидел прекрасное

    #define configMINIMAL_STACK_SIZE ((unsigned short)128)

    Сижу под вчепятлением...

    UPD. я знаю что это слова а не байты, все равно весь стек под прерывания может уйти, а двустековый режим проца FreeRTOS не поддерживает

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    Посмотрел мануал. У stm32 вообще как-то не очень с защитой памяти...

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Ну там MMU бывает коий призван ограничивать для задачи доступный ей регион, но... дабы мыслить позитивно, у АТмеги с этим еще хуже :)

    Разозлился и написАл (потырил в основном, портировав) преемптивный мультитаск с минимально возможным для архитектуры временем переключения контекста. Добавлю параметром тип мультитаска - пусть официалы развлекаются :)

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад
    [2017-10-02 15:11:43] night_ghost писал(а): Добавлю параметром тип мультитаска - пусть официалы развлекаются

    Вообще странно, что тип мультитаска так ломает работу кода... Вопрос к оригинальному коду, да)

    [2017-10-02 15:11:43] night_ghost писал(а): Ну там MMU бывает коий призван ограничивать для задачи доступный ей регион

    А его на что-то полезное нельзя задействовать? Хоть тот же стек охранять.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад
    [2017-10-03 09:32:27] m-s писал(а): А его на что-то полезное нельзя задействовать? Хоть тот же стек охранять.

    Можно было б, не будь он в Кортексах опциональным :) И вот в СТМ32 его как раз и сэкономили, так что память там нежная и  безащитная. За исключением флеша, на коий таки можно настроить прерывание по попытке записи, что хоть немного но помогает в отлове случаев расстрела.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Впилил преемптивный мультитаск в ХАЛ к той же очереди задач. Как будто тут и росло :) Со всеми плюшками типа непереключения с задачи с семафором. Еще и стек для прерываний отдельный выделил (MSP/PSP). Завтра отлаживать буду, коммит компиляется но еще не запускал

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    При отладке процессор иногда переходит в странное состояние, когда некоторые команды выполняются по-новому :) Скринкаст пошагового прохода.

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    Весело. Очень похоже на несовпадение отлаживаемого бинарника и того что реально в чипе.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад
    [2017-10-04 10:45:09] m-s писал(а): Очень похоже на несовпадение отлаживаемого бинарника и того что реально в чипе

    э нет,  проверено. Это что-то с микропрограммой происходит, отчего такие вот фокусы, ибо выключение питания без препрошивки это лечит. Первый раз когда оно так покривилось, оно отказалось выполнять bx lr на некоторых страницах (закономерность искать не стал), вот я тогда помучался...

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    А вытесняющая многозадачность вообще даёт какие - то преимущества(в контексте этого проекта)?

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Мы тут с Andrew Tridgell малость пообщались, он привел аргумент в виде более постоянного времени цикла. С преемптивной ОС ошибка планирования не превышает 50uS, у меня с кооперативной порой достигает 2000uS за счет медленных задач, не умеющих звать yield() (коий можно натыкать куда надо, но я стараюсь не лезть в код за пределами HAL). Однко остался открытым вопрос о влиянии таких случаев на стабильность реального аппарата в воздухе: я считаю что однократные задержки не приводят к проблемам, вспоминая время стирания страницы флеша на 250 коптере, он же аппелирует к умозрительным аргументам стабильности и времени реакции.  Именно поэтому я и сделал преемптивный мультитаск, дабы можно было сравнить реальное поведение одного аппарата с разными режимами многозадачности. У меня есть коптер на PixhawkLite, и я не вижу разницы в поведении относительно коптера с моей прошивкой и кооперативной многозадачностью, но таки ж это не аргумент.

    Для справки, переключение контекста получилось 18 команд, сохраняющих/загружающих ~200 байт на каждое переключение, тогда как переключение добровольное это 3 команды и сохранение/восстановление 16 байт. Время добровольного переключения доли микросекунды, время принудительного примерно три микросекунды. При времени кванта 100 микросекунд оверхед составляет 3% - не много но... таки ж, CleanFlight обходится вообще без таких глупостей, а ведь как летает!

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Ну вот и завелось, все шустро мультитащится :) Осталось с приоритетами разобраться и можно собирать. В отличие от FreeRtos сделал динамические приоритеты, то есть высокоприоритетная задача не полностью захватывает проц, а оставляет низкоприоритетным долю, обратно пропорциональную разнице приоритетов. Ну и естественно задачи, заказавшие delay() или висящие в ожидании семафора из планирования исключаются, но это и раньше было. Планировщик даже проще получился - не надо накапливать статистику задачи дабы быть уверенным что она не займет времени больше чем надо

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад
    [2017-10-04 16:09:47] night_ghost писал(а): Мы тут с Andrew Tridgell малость пообщались, он привел аргумент в виде более постоянного времени цикла.

    У него кажется появилась заинтересованность запустить ardupilot на чем-то не таком монтруозном как pixhawk... 

    [2017-10-04 16:09:47] night_ghost писал(а): При времени кванта 100 микросекунд оверхед составляет 3% - не много но...

    Отлично же. Тем более по cpu ещё есть запас.

    [2017-10-05 09:15:59] night_ghost писал(а): Ну вот и завелось, все шустро мультитащится

    А по дефолту какой планировщик будет?

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад
    [2017-10-05 09:34:23] m-s писал(а): У него кажется появилась заинтересованность

    Ага, и они усиленно пилят порт под ЧибиОС.

    [2017-10-05 09:34:23] m-s писал(а): А по дефолту какой планировщик будет?

    Параметр сборки, бинарники некоторое время будут с преемптивным мультитаском. Хотел вообще в параметры HAL_ включить но слишком большая разница во многих местах.

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад
    [2017-10-05 09:54:48] night_ghost писал(а): Ага, и они усиленно пилят порт под ЧибиОС.

    Ага, видел. Есть шанс что допилят?

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Ну наверное есть, взялись серезно, и вроде как первый полет уже был

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    Этот порт все равно лучше )

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Хотелось бы надеяться. Все-таки завязка на ОС резко повышает сложность сборки и понимания происходящего, увеличивая число сущностей. о которых надо помнить.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 1 мес. назад

    Выложены бинарники с последними плюшками:

    • преемптивная многозадачность
    • независимые стеки для процессов и прерываний
    • отстроенные приоритеты процессов

    на настоящий момент аптайм составляет около 16 часов, так что похоже что баг со случайными зависами был побежден

     

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 1 мес. назад

    Малость оптимизировал мультитаск: поделил планировщик и переключаель контекста, и не переключаю если запланированной оказывается та же самая задача. Статистика

    sched time: by timer  3.02 (49.22%) sw  1.89% in yield  3.08 (50.47%) sw  4.21% in tails  3.47 ( 0.30%) sw  6.12%

    то есть добровольное переключение встречается в 50% случаев и задача меняется в ~4% из них, а для таймерного переключения вообще смена задачи в ~2% случаев.

    А вот попытка уменьшить джиттер времени задержки, сокращая квант если задачу надо будет скоро запускать, переключает задачу с вероятностью ~6%.

    Время работы планировщика без собственно переключения - около 3uS, само переключение стандартное и занимает еще ~2.5uS.

     

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 1 мес. назад
    • исправлена ошибка с логами на AirbotV2
    • исправлена проблема со спорадическими зависаниями на семафоре
    • оптимизирована многозадачность - нет переключения контекста если следующая задача совпадает с текущей. Реальное переключение контекста происходит ~ 4% вызовов планировщика
    • все работа с списком задач перенесена на уровень ISR, поэтому больше нет гонки между yield() и таймером


    бинарные файлы готовы

  • Аватар профиля m--s s s6 пунктов в 8 г., 1 мес. назад
    [2017-10-12 15:32:29] night_ghost писал(а): бинарные файлы готовы

    Отлично, спасибо! Будем пробовать)

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 1 мес. назад

    Пойман и исправлен баг с залочиванием задачи на семафоре, которым она уже владеет.Бинарники будут чуть позже готовы

    UPD. добавил контроль за длиной вектора гравитации с акселерометра (дабы не по температуре корректность данных проверять, а то повторное чтение расстраивает МПУшку ибо на этот момент данные могут быть еще не готовы), так в пределах секунды от загрузки в проскакивает один неверный отсчет (4.6 вместо 9.8). Интересно, что бы это могло бы быть?

  • Аватар профиля m--s s s6 пунктов в 8 г., 1 мес. назад
    [2017-10-13 06:18:14] night_ghost писал(а): так в пределах секунды от загрузки в проскакивает один неверный отсчет (4.6 вместо 9.8)

    Ровно один? И потом не повторяется? Странно...

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 1 мес. назад
    [2017-10-13 11:30:01] m-s писал(а): Ровно один? И потом не повторяется? Странно...

    Именно! Вот и я про то что странно. точная строка из лога:

    Init Gyro*MPU: accel len reset: mean 9.439304 got 4.717114

    А потом тишина, хоть как его крути. Я б понял если б был битым первый отсчет, но это где-то из первой сотни, уже среднее накопилось. Очень похоже  на очередной баг самой МПУшки

    PS. Вынес всю работу с семафорами на уровень планировщика через SVC. Это просто праздник какой-то! Не нужно никаких запретов прерываний, ибо прерывания одного уровня сериализуются аппаратно, и гарантированно до возврата не будет ни других семафоров, ни переключения задач, ни тем более самих задач. В итоге код семафоров стал вдвое меньше :)

    Пересобирается. UPD. готово

  • Аватар профиля m--s s s6 пунктов в 8 г., 1 мес. назад
    [2017-10-13 12:21:41] night_ghost писал(а): UPD. готово

    В этой версии qgroundcontrol не может скачать параметры по usb. 

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 1 мес. назад

    Плата, тип? У меня коптер работает и подключается на всех платах, я даже скринкаст могу положить

    В любом случае уже новые бинарники собираются, там убрана проверка MPU и добавлен еще один параметр, теперь файлсейф силами HAL надо включать явно

  • Аватар профиля m--s s s6 пунктов в 8 г., 1 мес. назад

    Airbot V2, arduplane. Подозреваю, что как минимум частично это баг qgc - походу он не умеет нормально догружать параметры. Если хоть один пакет потерялся, то опа, приплыли. MP в этом смысле интеллектуальней, но ах - не работает на телефоне.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 1 мес. назад

    может лучше тогда Tower?

← Форум группы   Все форумы К последней записи
Постов на странице:

Вы автоматически вступите в эту группу, когда ответите в теме.

Добавить ответ:

-
Рейтинг@Mail.ru