• Возможно ли собрать libffi под esp32(esp-idf)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Возможно ли собрать libffi под esp32(esp-idf)?

    Да. В коде порта libffi для xtensa никаких сложностей при сборке под esp32s3 быть не должно. Но, я подозреваю, что прийдётся разобраться с тем, как совместить libffi с idf.
    Ответ написан
  • Makefile не правильно раскрывает переменные, почему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    SRC_DIR := src/brick_game/tetris # Папка с исходным кодом

    вот из этой строки нужно убрать все пробелы после слова tetris. Потому что иначе они попадают в переменную SRC_DIR. Комментарий можно оставить только впритык. Это же относится и к определениям остальных переменных.
    Ответ написан
    2 комментария
  • Какое напряжение на контактах spi esp32s3 n16r8?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    какое напряжение на контактах FSPI на esp32 s3 n16r8

    Это недостаточно точное обозначение, потому что функция FSPI может быть включена у разных пинов через IOMUX, не говоря уже о том, что через GPIO matrix эти сигналы могут быть выведены вообще на любые пины. С напряжением всё более определённо, esp32s3 TRM в разделе 6.10.2 говорит, что GPIO33 ~ GPIO37 and GPIO47 ~ GPIO48 can be powered either by VDD_SPI or VDD3P3_CPU, и что VDD_SPI can be configured to use an internal LDO. The LDO input and output both are 1.8 V. If the LDO is not enabled, VDD_SPI is connected directly to the same power supply as VDD3P3_RTC. На всех остальных пинах с выбранной цифровой функцией будет 3.3в в активном состоянии.
    Ответ написан
  • Каким образом прерывания работают в esp8266?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нашел документацию по ISA Xtensa

    Если вопрос действительно "каким образом прерывания работают", то isa book -- правильное место чтобы начать разбираться.

    В memory map esp8266 этот вектор заносится по адресу 0x40000050
    Не уверен, конечно, что это так


    Это так, можно посмотреть в конфигурационном оверлее.
    Ответ написан
  • Есть ли модуль реального времени в AI Thinker ESP32 (ESP32 CAM)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нет. То что в esp32 называется RTC -- это не энергонезависимые часы.
    Ответ написан
    3 комментария
  • Как вернуться к текущей ветке после git reset HEAD~1?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    посмотреть в git reflog, сделать git reset <commit> с нужным хешем. Если с момента выполнения git reset HEAD~1 не было больше никаких reset/checkout, это можно записать как git reset HEAD@{1}.
    Ответ написан
    Комментировать
  • Почему время выполнения программы так сильно различается?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    … 75% cpu 2:23,52 total
    … 113% cpu 1:22,71 total
    … 73% cpu 2:20,75 total
    количество потоков в программе равно количеству потоков процессора (в моём случае - 8…

    Похоже, что твоя программа не справляется с загрузкой всех ядер, едва одно ядро она нагружает. Я бы смотрел в то как потоки взаимодействуют друг с другом и искал там явную или скрытую сериализацию.
    Ответ написан
    Комментировать
  • Как задать, что бы компилятор при -fdump-rtl-expand, выдавал абсолютный путь?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я думаю, что никак -- в каком виде пути к файлам компилятору переданы -- в таком виде они и будут использованы, как для чтения, так и для вывода в диагностике.
    Ответ написан
    Комментировать
  • Нету структуры file_operation, в хедере fs.h, как исправить? как установить полные хедеры ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    изучаю разработку модулей ядра,попытался скомпилировать модуль использующий структуру file_operation - ошибка,как оказалось в моих хедерах ядра(/usr/include/linux/) нету данной структуры

    Хедеры ядра которые устанавливаются в системе -- это интерфейс между ядром и юзерспейсом (uapi). Хедер который тебе нужен -- внутренний хедер ядра. Чтобы собрать модуль ядра нужно иметь сконфигурированные исходники этого ядра. Почитать можно здесь.
    Ответ написан
    Комментировать
  • 2 переменные в одном адресе Си11 ARM STM32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Может, дело в отладчике?

    Может и в отладчике. Поскольку обе переменные глобальные, то для проверки можно посмотреть в вывод readelf -a -- там должны быть их адреса. Или напечатать адреса из программы.
    Ответ написан
  • Почему функция неправильно изменяет динамический массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Можете подсказать причину?

    Неправильная работа с указателями. Конкретно:

    void test(char** array){
    	array = malloc(sizeof(char*));
    	array[0] = malloc(255 * sizeof(char));
    	strcpy(array[0], "Hello world!");
    }

    Если имелось в виду выделение и возврат массива строк, то должно быть так:
    void test(char*** array){
    	*array = malloc(sizeof(char*));
    	(*array)[0] = malloc(255 * sizeof(char));
    	strcpy((*array)[0], "Hello world!");
    }


    char** array;
    test(array);

    Здесь должно быть
    char** array;
    test(&array);
    Ответ написан
    3 комментария
  • Как вводить и выводить отрицательные числа turbo assembler?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    возможно, я неправильно использую sf флаг?
    mov al, mas[si]
    cmp ax, ax
    jns positiveOut   ;;;;

    cmp ax, ax сравнивает ax с самим собой, результат немного предсказуем: они равны, т.е. sf = 0, zf = 1. Чтобы узнать знак числа нужно либо сравнивать его с нулём, либо использовать вместо cmp логическую операцию -- test, or или and.

    Кстати, mov al, mas[si] загружает из памяти только al, в ah остаётся мусор от предыдущих операций. По-нормальному после mov нужно сделать знаковое расширение al в ax, если собираешься дальше работать с ax, например так:
    mov al, mas[si]
    cbw


    sub ax, 1                 
    not ax

    Зачем две инструкции, когда есть neg ax?
    Ответ написан
    Комментировать
  • Почему неправильно считается количество строк глобами?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    myvar=$(find "/tmp/folders" -iname "App *" -type d -maxdepth 1)
    count=${#myvar[@]}
    echo $count


    И в ответ получаю число 120, которое означает количество символов, а не строк

    И это верно.

    2. Почему в моем примере выводится количество символов в переменной, а не количество строк?

    Потому что ${#myvar[@]} -- это длина массива. Если идея была создать в первой строке массив из имён файлов, то там не хватает пары скобок:
    myvar=( $(find "/tmp/folders" -iname "App *" -type d -maxdepth 1) )

    С таким определением myvar становится массивом а ${#myvar[@]} выведет длину этого массива, т.е. количество строк в нём.
    spoiler
    Имена файлов с пробелами, кстати, эту стройную картину малость испортят.
    С вашим определением выводится длинна массива, но в качестве массива выступает одна строка, так что это длина строки в символах.

    1. Реально ли подсчитать количество строк в файле или переменной с помощью глобов, как показано тут - https://stackoverflow.com/a/32727260 ?

    Да. Но использование для этой цели массивов оболочки выглядит странно и расточительно. В shell канонично считать строки командой wc -l.
    Ответ написан
    1 комментарий
  • Почему компьютеры не используют двоично-десятичный формат для вычислений?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему компьютеры не используют четырехбитный формат для вычислений?
    Разве не лучше представлять цифры в полубайтах от 1(0001) до 9(1001)?

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

    мы получим нормальную десятичную систему счисления без приближений в таких числах, как 2,1;3,4;45,9 и т.д.

    Когда нужна точная арифметика с фиксированным количеством знаков после запятой обычно используют целые числа, так что проблем с этим нет ни в десятичной ни в двоичной системе.
    С другой стороны никакая система счисления не может представить в конечном виде дроби, в знаменателе которых есть множители, не входящие в основание этой системы счисления. Почему бы тогда не использовать 12-ричную (тоже, кстати, цифра влезет в 4 бита) или 60-ричную систему, только из-за привычности десятичной?
    Ответ написан
  • Как не запрашивать логин / пароль Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как это исправить?

    добавить -f в опции login:
    login -f test

    Но вообще, пользоваться командой login для этого странно, когда есть su.
    Ответ написан
    Комментировать
  • Как создать диалоговое окно без ресурсов?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как быть?

    CreateDialogIndirect принимает на вход в параметре lpTemplate указатель на структуру описывающую диалог.

    понял что проект VS обязательно должен быть оконным, в противном случае тупо не будет ресурсов

    вроде нет никаких ограничений по прикреплению ресурсов к консольным приложениям. Версия-то у них есть, а это же тоже ресурс.
    Ответ написан
    Комментировать
  • Как исправить ошибку в rc файле: "RC2135 file not found" C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как исправить ошибку в rc файле: «RC2135 file not found» C++?

    То, что в rc-файле -- это не C++.

    RC2135 file not found: back.wav

    Компилятор ресурсов не может найти файл. Помести файл там, где rc сможет его найти.
    Ответ написан
    3 комментария
  • Как обрабатывать прерывания дальномера VL53L0X?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нужно как-то переписать ее чтобы можно было переключаться между 3 i2c.

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

    Как обрабатывать прерывания дальномера VL53L0X?

    Как обычные прерывания GPIO?
    Ответ написан
    Комментировать
  • Почему теряется часть массива символов при его передаче по сокету?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    выяснил что проблема в sizeof(buf) который почему то равен 8 после передачи в функцию

    https://qna.habr.com/answer?answer_id=2411176#answ...
    Ответ написан
    Комментировать
  • Как в io_uring отправить sqe, чтобы sqe выполнилось через 3 секунды после io_uring_submit?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как выполнить задержку не понимаю

    Для организации таймаута в liburing есть io_uring_prep_timeout, но кроме этого нужно сериализовать таймаут и все предыдущие команды (чтобы таймаут начинался после их окончания) и следующую после таймаута команду и сам таймаут (чтобы последующие команды не стартовали вместе с таймаутом). Сериализация делается установкой флага IOSQE_IO_DRAIN для sqe, почитать об этом можно например здесь. У меня нарисовался следующий пример, который записывает в файл (stderr), делает паузу в одну секунду, а потом записывает ещё:
    #include <fcntl.h>
    #include <liburing.h>
    #include <stdio.h>
    #include <sys/mman.h>
    
    #define QUEUE_DEPTH 16
    
    int main(int argc, char **argv)
    {
            int i;
            struct io_uring ring;
            struct io_uring_cqe *pcqe;
            static const char msg0[] = "before timeout\n";
            static const char msg1[] = "after timeout\n";
            struct io_uring_sqe *sqe;
    
            io_uring_queue_init(QUEUE_DEPTH, &ring, 0);
            io_uring_prep_write(io_uring_get_sqe(&ring), 2, msg0, sizeof(msg0), 0);
    
            sqe = io_uring_get_sqe(&ring);
            io_uring_prep_timeout(sqe, (struct __kernel_timespec[]){{.tv_sec = 1}},
                                  -1, IORING_TIMEOUT_ETIME_SUCCESS);
            io_uring_sqe_set_flags(sqe, IOSQE_IO_DRAIN);
    
            sqe = io_uring_get_sqe(&ring);
            io_uring_prep_write(sqe, 2, msg1, sizeof(msg1), 0);
            io_uring_sqe_set_flags(sqe, IOSQE_IO_DRAIN);
            io_uring_submit(&ring);
            for (i = 0; i < 3; ++i) {
                    int rv = io_uring_wait_cqe(&ring, &pcqe);
                    if (rv < 0) {
                            errno = -rv;
                            perror("io_uring_wait_cqe");
                    } else {
                            io_uring_cqe_seen(&ring, pcqe);
                    }
            }
    }
    Ответ написан
    Комментировать