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

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-10 12:31:26] night_ghost писал(а): все части HAL теперь собираются с оптимизацией -O2, что заметно УМЕНЬШИЛО место

    Я бы попробовал собрать все с -O2 и -flto, ещё больше уменьшит бинарник, мне кажется. 

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-10 14:39:29] m-s писал(а): и -flto, ещё больше уменьшит бинарник, мне кажется.

    лто портит код так что ничего не работает, так что отпадает

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-10 14:11:48] m-s писал(а): Огонь.

    там куда не залезь, так "чем дальше в лес тем толще партизаны". От некоторых открытий аж плющит, да. А потом "а почему время цикла у вас такое плохое?"

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

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-10 14:22:37] m-s писал(а): блок после we reserve some space не нужен и вреден

    посмотрел и... ничего не понял, что там вообще делается. Вообще мне вся подсистема выдачи МАВлинк представляется чудовищно переусложненной. Но вроде как-то работает - так что особым желанием туда лезть я не горю.

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

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-10 20:10:22] night_ghost писал(а): UPD. Бинарники готовы

    Попробую вечером. Должно помочь, в px4 как-то же работает.

    Если не поможет , выпилю этот блок, который сообщения дропает.

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

    Вообще да, там ужас-ужас. В принципе большая часть сообщение действительно идёт через очередь. Но не все (

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-11 12:12:49] m-s писал(а): Если не поможет , выпилю этот блок, который сообщения дропает.

    не надо, лучше тогда попробовать увеличить буфер передачи до килобайта

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-10 20:10:22] night_ghost писал(а): UPD. Бинарники готовы

    Ура, починилось!

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-12 05:44:37] m-s писал(а): починилось!

    Вот и ладушки.

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

    новые бинарники с последними изменениями из апстрима, включая Plane 3.8.3.

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

    В качестве промежуточного итога - бонусы отказа от ОС.

    Код Ардукоптера для Пиксхока перевалил за мегабайт и перестал лезть в память старым версиям процессоров. Все платы семейства Revolution сотоварищи имеют тот же самый мегабайт, вот только даже у Ардукоптера последней версии со всеми плюшками в виде OSD и USB MassStorage остается еще 145кб свободного места.

    PS, что на данный момент меня расстраивает больше всего, так это снижение точности в канале выхода на моторы: все расчеты ведутся во флоате, а затем преобразуются к историческому диапазону 1100-1900 (всего 800 шагов) и в таком виде передаются в HAL. Тогда как разрешение современных ESC составляет 2000 шагов, и логичнее было передавать в HAL именно Float значение, дабы он уже сам разбирался с управлением моторами.

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

    Кстати максимальный размер мавлинк пакета не 255, а 280 байт(с учётом id, crc и прочего). Может поэтому у людей логи через мавлинк не закачиваются...

    Может попробовать 512 буфер + 256 запас?

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-14 05:31:55] night_ghost писал(а): В качестве промежуточного итога - бонусы отказа от ОС. Код Ардукоптера для Пиксхока перевалил за мегабайт и перестал лезть в память старым версиям процессоров. Все платы семейства Revolution сотоварищи имеют тот же самый мегабайт, вот только даже у Ардукоптера последней версии со всеми плюшками в виде OSD и USB MassStorage остается еще 145кб свободного места. 

    Кажется это давно не новость)

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-14 07:51:16] m-s писал(а): Может попробовать 512 буфер + 256 запас?

    Тогда уж 512+512, чтоб 2 пакета почти законно и еще один влез насильно. Закончу очередную пепяку - пересоберу.

    [2017-11-14 07:57:18] m-s писал(а): Кажется это давно не новость

    Что именно "это"? Что не лезет или что места еще много?

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-14 11:02:58] night_ghost писал(а): Что именно "это"? Что не лезет или что места еще много?

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

    И да, пару лет уже даже китайцы с нормальным 2мб процессором продают.

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-14 11:02:58] night_ghost писал(а): Тогда уж 512+512, чтоб 2 пакета почти законно и еще один влез насильно. Закончу очередную пепяку - пересоберу.

    Хорошо, если есть место в ccm, то 512+512 ещё лучше.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-14 11:29:14] m-s писал(а):  Когда несколько лет назад про то, что второй мегабайт нельзя использовать, узнали - тогда уже где-то 800кб прошивка была.

    Дык в том-то и дело что 3.4 лезла, а вот последняя уже перестала, даже с установленным по умолчанию флагом MINIMIZE_FEATURES. А TYT все еще лезет несмотря на кучу дополнительных фич.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-14 11:33:20] m-s писал(а): если есть место в ccm

    еще 20кб, и кроме как на стек и буферизацию его больше ни для чего невозможно использовать. Поэтому я щасс транжирю память - буферизовал также OSD EEPROM, сделал два экрана и пересылаю в DMA только изменившиеся символы, ну вот и UARTы до кучи. Буфер приема также увеличил до 512, чтобы целый пакет лез.

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-14 11:38:20] night_ghost писал(а): А TYT все еще лезет несмотря на кучу дополнительных фич.

    Отлично. Надеюсь маинстрим не увеличится в ближайшее время ещё больше )

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-14 11:44:10] night_ghost писал(а): Буфер приема также увеличил до 512, чтобы целый пакет лез.

    Хорошо, будем пробовать. В целом большие буферы тоже плохо - латентность канала увеличивается. Но что же поделаешь, если так спроектировано (

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-14 12:12:55] m-s писал(а): В целом большие буферы тоже плохо - латентность канала увеличивается

    отчего ж увеличивается? Я не использую принудительное наполнение, обработка/передача начинается по первому доступному байту, так что с латентностью все в порядке.

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

    что-то не ладится у меня со встроенным чипом MAX. Скриншот:

    это - символы 5,6 и 7, то есть адреса регистров MAX7456_DMAH, MAX7456_DMAL и MAX7456_DMDI соответственно. Происходит это после выполнения такого вот фрагмента, да впрочем как и любого другого обращения к. 

       while(len--){
            MAX_write(MAX7456_DMAH_reg, cnt>>8);
            MAX_write(MAX7456_DMAL_reg, cnt&0xFF);
            MAX_write(MAX7456_DMDI_reg, 0x20);
            cnt++;
        }

    Как они попадают в память символов - непонятно, используется тот же драйвер SPI как и для других устройств. Но они работают, а это вот так вот издевается. Без осциллографа никак :(

     

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-15 05:00:00] night_ghost писал(а): Без осциллографа никак

    Spi прослушивать ? Тогда скорее логический анализатор нужен.

  • Аватар профиля An_private An_private в 8 г. назад

    Купите китайский клон Saleae Logic16. Где-то 30-35$. Обалденно удобная штука - пользуюсь таким и не нарадуюсь :)

     

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-15 07:41:09] anprivate писал(а): Купите китайский клон Saleae Logic16

    Уже заказал, едет.

    [2017-11-15 06:54:27] m-s писал(а): Тогда скорее логический анализатор нужен.

    Одно другому не третье, логическим анализатором завалы фронтов не посмотришь. 

    UPD. А именно они и были (скорее всего) одной из причин что для SPI ранее требовалась оптимизация -O0, ибо выводы CS настраивались по умолчанию на скорость 2МГц. Второй причиной была необходимость дожидаться окончания передачи последнего байта, и выдерживать интервал до снятия CS.

  • Аватар профиля m--s s s6 пунктов в 8 г. назад
    [2017-11-15 07:48:49] night_ghost писал(а): А именно они и были (скорее всего) одной из причин что для SPI ранее требовалась оптимизация -O0, ибо выводы CS настраивались по умолчанию на скорость 2МГц.

    Ах вот оно что.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-17 07:53:26] m-s писал(а): Ах вот оно что.

    Это только рабочее предположение, ибо я как-то упустил точный момент когда именно оно перестало капризничать, но таки именно такие изменения были непосредственно перед запуском SPI через DMA. 

    Меня больше всего расстраивает что железо SPI в режиме мастера во-первых  не умеет вызвывать прерывание по спаду Busy, а во-вторых не умеет само управлять выводом NSS (за исключением режима совместимости TI, в коем оно игнорирует практически все настройки). В АТмеге прерывание пришло - значит передача окончена и все свободны,  а тут блин двойная буферизация, коя приводит к необходимости ждать передачу двух байт прежде чем можно отпустить CS. В прерывании, ага. Убил бы...

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

    Ну в stm32hal  ждут в прерывании. Скорее всего лучше не сделаешь.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-17 09:54:07] m-s писал(а): Ну в stm32hal  ждут в прерывании. Скорее всего лучше не сделаешь.

    СТ-шный Хал писАли индусы и я от него вообще в ужасе, по сравнению с ним SPL покойная просто лапочка была. Не просто ж так в свежих версиях оного ХАЛа появилось семейство функций _ll_, предоставляющее практически ту же функциональность что и SPL :)

     Во всяческих бета-/клин- и прочих флаях тоже ждут в прерывании, аж глаза от такого вытекают   8-O

    void max7456_dma_irq_handler(dmaChannelDescriptor_t* descriptor)
    {
    if (DMA_GET_FLAG_STATUS(descriptor, DMA_IT_TCIF)) {
    #ifdef MAX7456_DMA_CHANNEL_RX
    DMA_Cmd(MAX7456_DMA_CHANNEL_RX, DISABLE);
    #endif
    // make sure spi dmd transfer is complete
    while (SPI_I2S_GetFlagStatus (MAX7456_SPI_INSTANCE, SPI_I2S_FLAG_TXE) == RESET) {};
    while (SPI_I2S_GetFlagStatus (MAX7456_SPI_INSTANCE, SPI_I2S_FLAG_BSY) == SET) {};

    но как говорится  - "на горбатых не равняются", и таки есть способ лучше :) Я вот только что доделал отправку данных по SPI со стробированием каждого байта CS-ом, как этого MAX требует, и без малейшего ожидания в прерывании.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г. назад
    [2017-11-17 10:23:33] night_ghost писал(а): доделал отправку данных по SPI со стробированием каждого байта CS-ом, как этого MAX требует

    Вот и отладил, все отлично работает.  Можно конечно делать как в Бета/Клин-флаях, отправляя через DMA установку внутреннего адреса и сам байт, только у меня это приводило к периодическим зависаниям MAX7456, и судя по  наличию кода проверке и реинициализации, у них тоже. Ибо по даташиту MAX требует стробирования CS-ом каждого обмена, а в автоинкрементном режиме вообще каждого байта, и как неоднократно было проверено еще с АТмегой, без этого нормально не работает. А железный SPI STM-ки так не умеет.

    Также пришлось добавить задержки на 100нс для обеспечения времени предустановки CS перед SCK, для тормозной АТмеги это было не нужно, а тут пришлось.

    Бинарники с работающим ОСД собираются. 

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

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

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

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