Задать вопрос
  • Как заменить вывод текущей скорости консольной speedtest или подобной на построчный (LF - CRLF)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если записать вывод данных в файл
    # /opt/speedtest/speedtest | tee spdt.log
    то в файле не видно промежуточных значений значений.

    Дело в том, что консольная программа может определить, направлен ли её вывод в терминал или в файл, и вести себя по разному, в зависимости от этого. Понаблюдать, что и как именно программа выводит можно запустив её под strace, например так:
    strace -f -e ioctl,write -o log <program command line>

    Соответственно, поймать что такая программа выводит в процессе можно только предоставив ей в качестве вывода эмуляцию терминала.
    Ответ написан
    1 комментарий
  • Ошибка с ESP32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что это значит

    подозреваю, что вот эта часть: ���`�B��Χh� �l<*�� !����� -- это вывод скетча на 9600. Откуда LoadProhibited -- непонятно.

    можно ли это как-то исправить?

    только разобравшись, что происходит. idf.py monitor обычно декодирует стек трейс и выводит соответствующие строчки исходников, можно начать отсюда.
    Ответ написан
  • Try/catch и goto?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Для выхода из вложенных циклов при try/catch в случае исключения произойдёт свертка стека

    stack unwinding или развёртка стека происходит при выходе из одного или более вложенных вызовов, т.е. когда текущим должен стать более ранний кадр стека. При выходе из вложенных циклов в пределах одной функции кадр стека не меняется, но по правилам языка автоматические переменные из покинутых блоков должны быть уничтожены. Компилятор генерирует для этого код вызова деструкторов и вставляет его вызовы на пути выхода из блоков. В случае stack unwinding компилятор генерирует код вызова деструкторов, но вызов этого кода происходит более сложным путём. О том, как делается stack unwinding в gcc почитать можно здесь, о том как в этот процесс встраивается вызов деструкторов -- здесь.

    будет ли тоже самое для goto?

    То же самое будет и для goto.
    Ответ написан
    Комментировать
  • Как включить SVGA VESA режим в x86 GAS?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    movw $0x4F02, %ax
    movb $0x03, %bl
    int $0x10

    в bh остался мусор, а этот вызов принимает аргумент в bx.
    Ответ написан
    Комментировать
  • Можно ли в ESP32-Cam одновременно использовать SD карту и периферийное устройство общающееся по SPI?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как это сделать вместе?

    Повесить второе SPI-устройство на отдельную линию CS. Я вижу, что сигнал U2RXD с разъёма P1 можно для этого использовать, если речь об этом модуле.
    Ответ написан
  • Возможно ли собрать 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.
    Ответ написан
    Комментировать