Перейти к содержанию
    

garlands

Свой
  • Постов

    357
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о garlands

  • Звание
    Местный
    Местный

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. разобрался. Оказывается сам начудил. Сделал виртуальное наследование у "проблемных" классов.
  2. Продолжаю пытаться понять что не так. Как видно по дизасму, сначала в r3 грузим значение из памяти по адресу r4+8 (0x20000164 + 😎 на скриншоте выделено синим. И это не правильно. правильная ячейка памяти (MemoryBrowser) сдвинулась на 4 байта (выделил красным) Что это за вставка такая? Почему так отличаются? Неужели какой то глюк компилятора? (с трудом верится, такое крайне редко бывает, скорее всего я что то не то делаю, но что?..) в Memory Browser<1> зеленым выделил правильное положение этих полей. проверил куб 1.11 - поведение аналогичное
  3. scr->setup(ui) - это указатель на функцию. и в классе у него правильное значение - 0х800ххх но при вызове этой функции непонятно почему прыгает на 0х200ххх в окне дизассемблера видно что выполняется blx r3, и r3 при этом содержит адрес в озу - 0х200ххх
  4. Нид хелп. Уже всю голову сломал. Есть абстрактный класс class Screen{ public: //Screen& operator=(const Screen&) = delete; virtual void setup_init(lv_ui *ui) const = 0; virtual void events_init(lv_ui *ui) const = 0; virtual void event_cb(lv_event_t * event) const = 0; void load(lv_ui *ui, Screen * scr_ptr = NULL) const; Screen(lv_obj_t **iscr, setup_func_t isetup) : scr{iscr}, setup_scr{isetup} {} private: lv_obj_t **scr; // guider_ui - *screen const setup_func_t setup_scr; inline static const Screen *cur_scr; }; class Screen2 : public Screen{ public: virtual void setup_init(lv_ui *ui) const override; virtual void events_init(lv_ui *ui) const override; virtual void event_cb(lv_event_t * event) const override; Screen2(lv_obj_t **iscr, setup_func_t isetup) : Screen(iscr, isetup) {} }; остальные аналогично от него наследую и определяю дочерние классы ScreenMain scr_main(&guider_ui.main, setup_scr_main); Screen2 scr_2(&guider_ui.screen_2, setup_scr_screen_2); Screen3 scr_3(&guider_ui.screen_3, setup_scr_screen_3); Screen4 scr_4(&guider_ui.screen_4, setup_scr_screen_4); в них ничего интересного, вызываются функции lvgl А вот в Screen::load происходит непонятное. void Screen::load(lv_ui *ui, Screen * scr_ptr) const { Screen const *scr = ( scr_ptr == NULL ) ? this : scr_ptr; scr->setup_scr(ui); <<< scr->events_init(ui); scr->setup_init(ui); lv_scr_load( *scr->scr ); const Screen *old_scr = cur_scr; if (old_scr != NULL){ lv_obj_clean( *old_scr->scr ); lv_obj_del( *old_scr->scr ); } cur_scr = scr; } при переключении на scr_main и scr_2 все нормально. а вот 3 и 4 - в отмеченной строке - пытается вызвать функцию из ОЗУ. При этом если смотреть .setup_scr в памяти - указывает правильно. На первом скриншоте видно что setup_scr содержит правильный адрес, но r3 указывает в оперативку На втором - все правильно Меня смущает что для двух классов все нормально работает, а для двух - нет. Понимаю если бы вообще не работало. А так... %) gcc c++17 gnu extensions, cubeide 1.12.1, stm32l562. если это важно.. ЧЯДНТ?
  5. Да, протупил не очень внимательно прочитал.
  6. Про "делают сложнее" еще можно добавить вариант высокой частоты переключения - тогда нужен драйвер, который может вдуть в затвор значительный ток (амперы) чтобы снизить потери на переходные процессы. Меджикивис , 1) картинка только для пояснения. 2) исключительно применительно к топику (DC12В, 2А). 3) на картинке видно, откуда картинка утянута. Ну и немного придерусь к "А если напряжение на нагрузке 300 вольт?" - мало данных.
  7. Да, именно так. А зачем сложнее? Напряжение низкое, ток небольшой, шим низкочастотный (относительно).
  8. usart stm32l

    http://we.easyelectronics.ru/STM32/uart-us...m32l-stm32.html
  9. Как-то так: (левая картинка) Параллельно двигателю диод катодом на плюс питания. Затвор на PWM ардуины. На всякий случай можно резистор ~10К с затвора на землю. В качестве транзистора пойдет любой логический N-канальный полевик (IRLML2402/2502/0020/0030). Да тысячи их.
  10. Вот. Да и вообще весь раздел к изучению раз
×
×
  • Создать...