Задать вопрос
  • Как в Google Mock задать последовательность вызовов?

    max_dark
    @max_dark Автор вопроса
    Диванный эксперт
    Воспользовался комбинацией из .InSequence и .After + добавил .Times(0) для особого случая

    TEST_F(RV32I_Handler_System, CSR_RS)
    {
        auto impl = create<csrrs>();
        constexpr Code funcA = 0b0010;
    
        ASSERT_TRUE(impl->getId().equal(expectedId(funcA)));
        for (register_no src = 0; src < vm::register_count; ++src) {
            vm::register_t csr_id = 0;
            vm::register_t csr_val = 0;
            vm::register_t src_val = 0;
            register_no dst = RegAlias::t0;
            auto code = encode(funcA, dst, src, csr_id);
            MockVM mockVm;
    
            Sequence csr_get, csr_set;
            Expectation was_read = EXPECT_CALL(mockVm, control_get(csr_id, _))
                    .InSequence(csr_get);
            EXPECT_CALL(mockVm, set_register(dst, _))
                    .InSequence(csr_get);
            if (src == 0)
            {
                EXPECT_CALL(mockVm, control_set(_, _))
                    .Times(0);
            }
            else
            {
                EXPECT_CALL(mockVm, get_register(src))
                        .InSequence(csr_set)
                        .WillOnce(Return(0));
                EXPECT_CALL(mockVm, control_set(csr_id, _))
                        .InSequence(csr_set)
                        .After(was_read);
            }
            impl->exec(&mockVm, &code);
        }
    }
    Ответ написан
    Комментировать
  • Как установить инструменты разработчика на SteamDeck?

    max_dark
    @max_dark Автор вопроса
    Диванный эксперт
    С виртуалками/docker вопрос пока не решен - есть ограничения самой OS.

    С компилятором/IDE - пока что установил QtCreator из FlatPack - компилятор идет в комплекте, но нужных библиотек нет.

    Скрипты на Python, JS, PHP etc вполне можно разрабатывать.
    Но мне нужен C/C++ и заголовочные файлы ядра =\
    Ответ написан
    Комментировать
  • Установка SteamOS Holo в VM. Как добавить виртуальный NVME в KVM?

    max_dark
    @max_dark Автор вопроса
    Диванный эксперт
    Оказалось NVME необязателен - в скрипте "tools/repair_device.sh" присутствуют переменные, отвечающие за имя устройства:
    #DISK=/dev/nvme0n1
    #DISK_SUFFIX=p
    DISK=/dev/sda
    DISK_SUFFIX=
    Ответ написан
  • Как исправить ошибку при старте отладки через OpenOCD "unknown flash device"?

    max_dark
    @max_dark Автор вопроса
    Диванный эксперт
    Для патча потребуются номера команд чтения/записи и размеры блоков.
    Номера основных команд у этого класса устройств совпадают у большинства производителей.

    Для первого нужно добавить:
    FLASH_ID(
        "by25q128es", // название чипа
        0x03,         // "Read Data" - команда чтения
        0x0b,         // "Quick Read" - ускоренное чтение
        0x02,         // "Page Program" - записать "страницу"
        0xd8,         // "64K Block Erase" - стереть блок
        0xc7,         // "Chip Erase" - стереть всё
        0x00184068,   // ID производителя / устройства
        0x100,        // 256 байт, размер "страницы" для записи
        0x10000,      // 64KiB, размер стираемого блока(в байтах)
        0x1000000     // 16MiB, общий объём памяти(в байтах)
    ),


    Для второго отличие только в объеме (4MiB):
    FLASH_ID("zbit zb25vq32"  ,       0x03, 0x0b, 0x02, 0xd8, 0xc7, 0x0016405e, 0x100, 0x10000, 0x0400000),


    UPD0:
    Для RP2040 есть другой способ - нужно пропатчить "target/rp2040.cfg" для поддержки указания размера flash

    # allow skip flash auto_probe
    if { [info exists FLASH_SIZE] } {
    	set _FLASH_SIZE $FLASH_SIZE
    } else {
    	set _FLASH_SIZE 0
    }
    
    # flash bank $_FLASHNAME rp2040_flash 0x10000000 0 0 0 $_FLASH_TARGET
    flash bank $_FLASHNAME rp2040_flash 0x10000000 $_FLASH_SIZE 0 0 $_FLASH_TARGET
    
    if { $_BOTH_CORES } {
    	# Alias to ensure gdb connecting to core 1 gets the correct memory map
    	# flash bank $_CHIPNAME.alias virtual 0x10000000 0 0 0 $_TARGETNAME_1 $_FLASHNAME
    	flash bank $_CHIPNAME.alias virtual 0x10000000 $_FLASH_SIZE 0 0 $_TARGETNAME_1 $_FLASHNAME
    
    	# Select core 0
    	targets $_TARGETNAME_0
    }

    Но это работает только для OpenOCD, собранного из исходников, полученных из основного репозитория.
    Ответ написан
    Комментировать
  • Какие есть особенности использования GPIO с платами Wemos D1 R32 и NodeMCU-32S (модуль ESP32-WROOM32)?

    max_dark
    @max_dark Автор вопроса
    Диванный эксперт
    Описание можно найти в документации ESP32-Wroom32 datasheet
    • 2.2 Pin description
      • GPIO [6..11] подключены к flash модуля и не рекомендуются для использования в других целей.


    • 2.3 Strapping pins
      Имеют особое назначение при запуске MCU
      • MTDI(GPIO12) - выбор напряжения питания flash памяти, не может быть выставлено в "1"
      • GPIO0 + GPIO2 - выбор режима загрузки
      • MTDO(GPIO15) - включение/отключение загрузочных логов
      • GPIO5 - вместе с MTDO определяют "Timing of SDIO Slave"


    • 7 Peripheral Schematics
      GPIO [12..15] используются для подключения через JTAG

    Ответ написан
    Комментировать
  • Почему не фильтруются шрифты в QFontDialog?

    max_dark
    @max_dark
    Диванный эксперт
    Метод QFontDialog::getFont является static
    Его вызов создает объект диалога самостоятельно.
    (вызов static метода на объекте скорее всего является ошибкой)

    Для задания параметров фильтрации опции можно передать через параметр в расширенной версии этого метода.

    #include <QApplication>
    #include <QFontDialog>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        {
            bool ok;
            QFont tmp;
            QWidget* parent = nullptr;
            auto font = QFontDialog::getFont(
                &ok
                , tmp
                , parent
                , QStringLiteral("Title")
                , QFontDialog::MonospacedFonts | QFontDialog::DontUseNativeDialog
                );
        }
        return 0;
    }
    Ответ написан
    Комментировать