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

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

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

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

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

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

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

    #define configMINIMAL_STACK_SIZE ((unsigned short)128)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Аватар профиля m--s s s6 пунктов в 7 г., 1 мес. назад
    [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 пунктов в 7 г., 1 мес. назад
    [2017-10-05 09:34:23] m-s писал(а): У него кажется появилась заинтересованность

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

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

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

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

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

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

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