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

  • Аватар профиля kozin Алексей Козин в 7 г., 10 мес. назад

    а если в случае если назначен drdy вместо таймера назначать прерывание.

    благо у вас в хале уже для этого все есть

    https://github.com/night-ghost/ardupilot/blob/master/libraries/AP_HAL_REVOMINI/GPIO.cpp#L112

    типа

    _dev->register_periodic_callback(1000, FUNCTOR_BIND_MEMBER(&AP_InertialSensor_Invensense::_poll_data, bool));

    на attach_interrupt

     

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

    Ну не хочу я до принятия в мейнстрим что-то улучшать... И так приходится и предубеждения преодолевать, и конкурирующий контроллер продавливать - а если их еще и в лужицы тыкать каждый раз то вообще шансы будут ниже нуля... 

    Вот недавно оформил issue  - так в полчаса закрыли, типО дубликат, а по обсуждению становится понятно "мы пробовали нам слабО". А ведь у меня 90% под это есть!

     

  • Аватар профиля kozin Алексей Козин в 7 г., 10 мес. назад

    мы пробовали пробить в мэйнстрим свой хал f4by, но попытка была неудачной. в принципе будем пытаться еще...

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

    попробовал собрать ваши исхдники в эклипсе, мэйком. бинарник собрался.

     

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 10 мес. назад
    [2017-01-03 12:51:03] kozin писал(а): стена бюрократии что зачем, давай так, нет переделай наоборот

    Ага, я наблюдал сие действо. Самое забавное что даже полное выполнение всех требований еще не гарантирует принятия! Я делал простейший PR - поддержка телеметрии DEVO. Около 200 строк, все претензии устранены, и - тишина... 

    ...а за это время INAV, который пилит один человек, пополнился поддержкой пары десятков контроллеров, и вообще заметно продвинулся вперед.

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

  • Аватар профиля kozin Алексей Козин в 7 г., 10 мес. назад

    решил попробовать расставить пины для f4by. c тем чтобы не плодить папки хала решил сделать пока просто дефайн пинаутов разных плат.

    но все равно видимо не обойтись одним файлом дефайнов

    вот что пока получилось https://github.com/kozinalexey/ardupilot/commit/f8327d6830d8af534eff20dd1894de85339bf970

     

  • Аватар профиля kozin Алексей Козин в 7 г., 10 мес. назад

    если платформа планируется как универсальная, то возможно пригодятся мои заметки.

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

     

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

    Таам все совсем не так должно делаться.

    1.  называем свою плату как-нибудь
    2. в папке wirish/boards создаем папку с этим именем и туда копируем все из папки revomini_MP32V1F4
    3. правим в папке с именем своей платы таблицу PIN_MAP под свой камень - у него ж явно ног больше
    4. в папке /mk файл board_REVOMINI.mk копируем в  что-то свое, и в нем заменяем BOARD  ?= revomini_MP32V1F4 на свое
    5. и только после этого дефайны :)

    А пока я вижу сначала полное удаление файла  gpio.cpp а затем его создание заново - хотя его-то вообще можно не трогать, а только сделать нужные дефайны для оной usb_connected. Щасс сделаю :) UPD. Как-то не предполагал что кому-то может еще понадобиться, вот и не вычищал прямое указание ног. Сейчас сделал правильно, через дефайн и пинмап

    PS. в этой папке файлы system_stm32f4xx.c и revomini_MP32V1F4_startup.S - получены из СТМовского генератора файлов инициализации

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 10 мес. назад
    [2017-01-04 09:23:23] kozin писал(а): без субмодулей не обойтись

    А то я не знаю :) Описание сборки "максимальной аутеничности"

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

    Поймал точку возникновения бага с MPU - ничего не понимаю :(

    Файл GPIO.h класс REVOMINIDigitalSource метод write() 

    Если я его оборачиваю в #pragma GCC optimize ("O0") / #pragma GCC pop_options  то все работает. Код в этом случае имеет такой вид

    write(b)
    08099050:   push    {r7, lr}
    08099052:   sub     sp, #8
    08099054:   add     r7, sp, #0
    08099056:   str     r0, [r7, #4]
    08099058:   mov     r3, r1
    0809905a:   strb    r3, [r7, #3]
    0809905c:   ldr     r3, [r7, #4]
    0809905e:   ldr     r1, [r3, #4]
    08099060:   ldr     r3, [r7, #4]
    08099062:   ldrb    r2, [r3, #8]
    08099064:   ldrb    r3, [r7, #3]
    08099066:   mov     r0, r1
    08099068:   mov     r1, r2
    0809906a:   mov     r2, r3
    r0=dev r1=4 r2=0
    0809906c:   bl      0x8099008 <gpio_write_bit(gpio_dev const*, uint8_t, uint8_t)>
    08099070:   adds    r7, #8
    08099072:   mov     sp, r7
    08099074:   pop     {r7, pc}
    
     собственно   gpio_write_bit(gpio_dev const*, uint8_t, uint8_t):
    08099008:   movs    r3, #1
    0809900a:   lsls    r3, r1
    0809900c:   uxth    r3, r3
    173           if (val) {
    0809900e:   cbz     r2, 0x8099016 <gpio_write_bit(gpio_dev const*, uint8_t, uint8_t)+14>
    174       	dev->GPIOx->BSRRL = bv;
    08099010:   ldr     r2, [r0, #0]
    08099012:   strh    r3, [r2, #24]
    08099014:   bx      lr
    176       	dev->GPIOx->BSRRH = bv;
    08099016:   ldr     r2, [r0, #0]
    
    ; запись r2=0x40020000 r3=0x10
    08099018:   strh    r3, [r2, #26]
    0809901a:   bx      lr
    

    В таком виде все работает.

    Если же я комментарю прагму отмены оптимизации, то код приобретает такой вид

    0809903c:   ldr     r2, [r0, #4]
    171           uint16_t bv = BIT(pin);
    0809903e:   ldrb    r0, [r0, #8]
    08099040:   movs    r3, #1
    08099042:   lsls    r3, r0
    08099044:   uxth    r3, r3
    173           if (val) {
    08099046:   cbz     r1, 0x809904e <REVOMINI::REVOMINIDigitalSource::write(unsigned char)+18>
    174       	dev->GPIOx->BSRRL = bv;
    08099048:   ldr     r2, [r2, #0]
    0809904a:   strh    r3, [r2, #24]
    0809904c:   bx      lr
    176       	dev->GPIOx->BSRRH = bv;
    0809904e:   ldr     r2, [r2, #0]
    ; запись r2=0x40020000 r3=0x10
    08099050:   strh    r3, [r2, #26]
    08099052:   bx      lr
    
    

    В тот же самый регистр пишется то же самое значение - и НЕ РАБОТАЕТ.

    Ничего не понимаю :(

     

  • Аватар профиля kozin Алексей Козин в 7 г., 10 мес. назад

    > этой папке файлы system_stm32f4xx.c и revomini_MP32V1F4_startup.S - получены из СТМовского генератора файлов инициализации

    это stm32cubeMX ? скачал но не могу с ним разобраться, при запуске сгенерить, дает ошибку что невозможно скачать депенденсы.

    Может инструкция есть какая как или у кого нибудь есть настроенная среда чтобы сгенерить эти файлы для 100 пин stm32F407VG?

     

     

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

    Тогда проще взять готовые файлы инициализации из вашего ХАЛа и "доработать напильником", тулзы от СТМ это что-то с чем-то. Всего-то нужно вектора прерываний для камня и настройку всех внутренних генераторов и PLL

  • Аватар профиля kozin Алексей Козин в 7 г., 10 мес. назад

    при виде ассемблера у меня начинает мутиться в глазах)  разве что глянуть на шину снаружи каким либо аналайзером.

    случайно заметил что у вас пин cs шины и cs мпу установлены идентично. поскольку на шине нет ни мультиплексора ни буффера нужен ли ?

    #define MPU6000_CS_PIN        51

    #define BOARD_SPI1_NSS_PIN      D51
       #define BOARD_SPI1_CS_BR_PIN    51

     

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 10 мес. назад
    [2017-01-04 15:04:18] kozin писал(а): разве что глянуть на шину снаружи каким либо аналайзером.

    был бы...

    Я сам ассемблер АРМа вижу третий раз, но  первым был взлом драйвера в телефоне, так что щасс полегче :)

  • Аватар профиля kozin Алексей Козин в 7 г., 10 мес. назад

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

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

    То-то и оно что единственный... Вышеприведенный код это тяжкое наследие, дефайны по шине не используются. Сейчас почищу.

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

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

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

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