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

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

    Таймерный драйвер I2C готов! Прием 2х байт на частоте 125кГц требует 189 прерываний, занимая в течение ~400uS 22% времени процессора. И, как и предыдущий софтверный драйвер, не имеет ошибок шины - проверено как на внутренней, так и на внешней шине.

    Бинарники будут чуть позже  готовы

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

    Исправлена проблема с логами, бинарники готовы

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

    также готовы бинарники с последними изменениями из апстрима

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

    где-то во французских Альпах

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

    Похоже чуду-юду поймал. 

    Преамбула. Таймерный драйвер SoftI2c, который работал на РевоМини как лапочка, на плате АирботВ2 начал давать регулярные ошибки таймаута. Раскопки показали, что иногда (!) неожиданно (!!) останавливается таймер, переставая генерировать прерывания. Отчего ожидание обмена и вылетает по таймауту. Можно конечно взять второй таймер и изобразить на нем Watchdog для прерывания первого таймера, но мин пардон, ЧТОЭТОЗАХРЕНЬ??? Таймер больше нигде не используется, так что конфликт исключается.

    Смена таймера меняет частоту глюков, но не устраняет их полностью. 

    Фабула. Похоже помеховая обстановка на платах Аирбот препятствует их реальному использованию.

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

    Что-то тут не так. Inav на airbot v2  и bn-800 gps/compass нормально работают даже на hw i2c с 0 ошибок на шине

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

    Я регулярно поглядываю в их код, и да - "что-то тут не так" (С). Потому что чудовищное количество ошибок I2C на некоторых платах с новым драйвером не раз обсуждалось на их форуме, а их SPI драйвер работает для чтения пары байт из МПУ, но не всего буфера в килобайт - проверено.

    вопрос тут один: почему таймер ИНОГДА перестает генерировать прерывания? и почему это происходит на одной плате, и не происходит на другой? В отладчике прекрасно видно - регистр управления разрешает работу таймера, а он - стоит и не считает. ЧТО ЭТО???

    Могу скриншот отладчика сделать, где видно что таймер разрешен, но не считает.

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

    Мистика какая-то. Там счётчик не обновляется или только прерывания не генерируются?

    Может как-то отключается клок у таймеров...

    Если понизить системную частоту не изчезает проблема?

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

    Счетчик не обновляется. Именно что мистика, действительно похоже что тактиривание останавливается - но происходит это и у тех таймеров что не имеют выбора источника тактов! Пробовал 4 и 9 таймеры, сегодня остальные  свободные попробую. С частотой играть не пробовал, смысла не вижу. Попробовал переключить все выводы в медленный режим - звона стало меньше, но все равно таймеры глючат.

    UPD. после снижения скорости выводов стал себя более прилично вести аппаратный I2C так что пока вернулся к нему

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

    поймал. Таймеры и плата ни при чем, это был баг шедулера, приводивший к преждевременному освобождению семафора шины и наложению операций на шине из разных задач. Самдурак, вобщем :-/

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

    Отлично, хороший стресс-тест для шедулера получился)

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

    ну кажется все

    I2C stats
    bus 1 addr 77 errors 0 last error=0
    bus 1 addr 1E errors 0 last error=0


    sleep time 28.13759%
    task 0 (0x80AE2E1) times: full 122034.1ms ( 122.03%) mean 1501.8uS max 95267uS at 1000FF58// this is main task
    task 1 (0x80AEE71200058E8) times: full 0.0ms ( 0.00%) mean 2.7uS max 9uS at 1000DEF0 // this is 10s task
    task 2 (0x80AF5B920005920) times: full 4196.5ms ( 4.20%) mean 48.2uS max 978uS at 1000D9E8 // this is compass driver
    task 3 (0x803BA0120009430) times: full 950.6ms ( 0.95%) mean 7.8uS max 47uS at 1000D4C0 // this is analog read
    task 4 (0x80AE671) times: full 8746.2ms ( 8.75%) mean 26.2uS max 996uS at 1000D048 // this is io_tasks process
    task 5 (0x803E945200094F8) times: full 1841.2ms ( 1.84%) mean 29.1uS max 996uS at 1000AFB0 // this is baro driver
    task 6 (0x8047B8D2000DF10) times: full 33621.2ms ( 33.62%) mean 262.4uS max 2902uS at 1000AA30 // this is MPU6000 driver

    IO completion time= 543.7ms ( 0.418%)
    task 80AD335200081F8 time 340.1ms ( 0.261%) mean 3.278uS // this is PPM1 parser
    task 80AD33520008320 time 0.0ms ( 0.000%) mean nanuS
    task 80AF99D20008448 time 16.2ms ( 0.012%) mean 256.762uS // this is DSM parser
    task 80AB651200084C0 time 0.0ms ( 0.000%) mean nanuS
    IO completion effectiveness= 65.515%

    мы понесли тяжелую утрату - шедулер по прерываниям таймера нас покинул. Теперь все датчики обрабатываются в задачах кооперативной многозадачности. Это позволило исключить время драйвера MPU6000, достигавшее порой 3000мкс, из времени прерывания. Оно конечно никуда не делось, но хотя бы происходит тогда когда основной процесс ждет. Также время различных задержек, которое тратилось бесполезно во время прерывания, теперь время для других задач. 

    В прерываниях остались обработчики действительно важных и быстрых задач, например RC_Input

    UPD. бинарники готовы

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

    Последняя версия на airbot v2.

    Какие-то проблемы с гироскопом/аксерерометром. Медленно грузятся параметры. С i2c проблем нет. Барометр тоже определился нормально.

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

    я знаю, уже переделал и тестю

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

    Хорошо, ждём )

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

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

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

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