Задать вопрос
  • В чем возникает проблема при работе с драйвером порта - UART4?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Речь идет именно о RS485, UART подключен к микросхеме трансивера RS485. Пин RTS используется для организации полудуплексной передачи.

    Ок, я проглядел это место, давай попробуем ещё раз.

    Если вывод dev_err() поставить перед spin_lock_irqsave(&port->lock, flags); то всё работает.

    Верно ли, что когда всё работает (со вставленным dev_err), serial8250_em485_stop_tx вызывается после передачи только из serial8250_console_write, а когда всё не работает эта функция не вызывается вообще?

    Глядя в функцию serial8250_handle_irq я вижу, что обработка окончания передачи зависит от того, используется DMA или нет. Используется ли в вашей конфигурации DMA? Работает ли передача, если DMA отключить?
    Ответ написан
  • Как хранится c++ struct в памяти и как определить размер вручную?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    поэтапаный алгоритм определения размера

    Если откинуть тонкости связанные с битовыми полями, то алгоритм простой. Обозначим выравнивание всей структуры A, размер всей структуры S, размер головы структуры из i полей Si, размер i-го поля SFi, выравнивание i-го поля AFi, операцию округления X вверх до ближайшего кратного Y R(X, Y) (т.е., например, R(4, 4) = 4, R(5, 4) = 8), количество полей структуры n. Тогда

    S0 = 0
    Si = R(Si - 1, AFi) + SFi
    A = maxi = 1..n(AFi)
    S = R(Sn, A)

    Второй и третий шаги гарантируют, что в выравненной структуре каждое поле тоже выравнено.
    Четвёртый шаг гарантирует, что если такие структуры поместить в массив, то все элементы массива будут одинаково выравнены.

    Разумеется всю эту математику имеет смысл делать если пишешь компилятор, во всех остальных случаях размеры и выравнивания структур можно узнать непосредственно у компилятора.
    Ответ написан
    Комментировать
  • Как в С++ проверить double на целочисленность?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #include <cmath>
    int isInteger(double num)
    {
        return num == trunc(num);
    }

    Ну и нужно понимать, что с некоторого (в зависимости от конкретной разрядности double) значения порядка любой double станет целочисленным из-за ограниченности длины мантиссы.
    Ответ написан
    8 комментариев
  • Почему библиотека не ставится?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Пытаюсь поставить библиотеку, не получается
    почему?
    file INSTALL cannot find
    "/home/durachok/HTTPParser/build/_deps/ethernet-src/include/Ethernet.h": No
    such file or directory.


    Потому что здесь написана какая-то фигня, ссылающаяся на несуществующий файл.
    Ответ написан
    Комментировать
  • Почему при запуске программы через командную строку на mac выходит segmentation fault 11?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    atoi(argv[1]) ожидает, что у программы при запуске будет как минимум один параметр командной строки. Segfault который ты видишь -- это результат запуска программы без аргументов.
    Ответ написан
    1 комментарий
  • Не работает код, что делать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    ; Вывод суммы элементов выше главной диагонали
        mov ah, 2
        mov dl, cl
        int 21h

    функция 2 прерывания int21h выводит один символ с кодом в dl. Если код суммирования работает верно, это 2 + 3 + 6 = 11. Символ с кодом 11 -- непечатный, и, даже если бы он был печатным, подозреваю, что это не то, что тебе было нужно. В общем случае нужно переводить полученную сумму в строку цифр и эту строку печатать.
    Ответ написан
    8 комментариев
  • Как написать драйвер на андроид?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    чтоб прикрутить к ней камеру от сони нужно получается написать драйвер

    Нужно узнать, что это за камера и какой у неё интерфейс. Может статься, что драйвер для неё уже есть. В любом случае, если нужен драйвер, без этого шага его не написать.
    Ответ написан
    Комментировать
  • Что делает компьютер, когда получает машинную инструкцию поделить на ноль?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что же сделает программа на чистом ассемблере?

    Программа "на чистом ассемблере" всё равно выполняется в каком-то окружении. От этого окружения и зависит, что именно произойдёт. С программой запущенной на x86 в реальном режиме произойдёт одно (прерывание int 0), запущенной под windows -- другое (исключение -> SEH -> завершение программы), запущенной под linux -- третье (но довольно похожее -- исключение -> сигнал -> завершение программы), а запущенной на микроконтроллере с ядром arm -- так и вообще ничего не произойдёт: разделит и глазом не моргнёт, вернёт 0 в качестве результата деления.
    Ответ написан
    Комментировать
  • Почему constinit помогает решить проблему static order initialization fiasco?

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

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

    Каким образом наличие слова constinit в одной из единиц трансляции гарантирует, что она загрузится раньше?

    Это слово гарантирует, что такой объект будет инициализирован до начала динамической инициализации, см, а это всё, что требуется для решения проблемы static order initialization fiasco.
    Ответ написан
    Комментировать
  • Как подключить дисплей с использованием FreeRTOS?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    какие нюансы надо учесть при подключении дисплея, при формировании задачи ОСРВ?

    Если дисплей работает без ОС, то, судя по всему, нюансы подключения успешно учтены. Из нюансов запуска задачи на ум приходит размер выделенного ей стека.
    Ответ написан
  • Почему не выводятся данные в консоль?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как только я ввожу число литров и нажимаю энтер все сбрасывается и ничего не выводится. Код пишется в vscode, код пытаюсь запустить в самой консоли vscode. В чем может быть проблема?

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

    Может с кодом что-то не то

    С кодом всё ок.
    Ответ написан
    1 комментарий
  • Как записать информацию из вывода в файл с неизвестным названием?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как перенаправить информацию из вывода команд в файл, который создается в процессе проверки командой
    #touch $( date '+%Y-%m-%d_%H-%M' )

    Записать имя файла в переменную и дальше везде использовать её. Например:
    …
    file=$( date '+%Y-%m-%d_%H-%M' )
    touch "$file"
    …
    echo -e "               Product Name : $PN_FRU" >> "$file"
    …
    Ответ написан
    Комментировать
  • C++ CMake Как исправить ошибку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не могу понять в чем дело

    Судя по всему в макросе assert использован текст с какими-то забавными символами. Два очевидных способа решения:
    - можно эти строки удалить, в корректно написанной программе они ни на что не влияют.
    - можно разобраться с тем, что не так внутри assert. Начать можно, например, выполнив вместо компиляции препроцессирование (заменив в командной строке вызова gcc -c на -E) и почитав внимательно препроцессированный код в местах на которые ругается компилятор.
    Ответ написан
    Комментировать
  • Не могу понять почему не работает USER тред?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему не работает USER тред?

    Потому что, опять, ты вызываешь makecontext не задав uc_link. thread_func1 отрабатывает, а дальше гонка между вызовом thread_func2 из monitor_thread и завершением программы из-за возврата из функции контекста в контексте созданном с uc_link == NULL.

    Но и без этого код выглядит загадочно. Непонятно зачем мешать в одну кучу контексты и clone. Непонятно зачем дублировать указатель на функцию в Thread::func и в Thread::context. Непонятно зачем контексты, если schedule их не использует. Непонятно, зачем monitor_thread занимается активным ожиданием Thread::active. Непонятно, зачем функции потоков лезут в потроха Thread. Короче, этому коду не хватает идеи.
    Ответ написан
  • Как раздать блочное устройство с linux-компьютера через usb-c порт?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ответ написан
    Комментировать
  • Эмулятор веб-камеры для Линукса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ответ написан
    Комментировать
  • Как симулировать сбои в файловой системе?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как симулировать сбои в файловой системе? … Может есть уже устоявшиеся готовые файловые решения

    В тегах linux, у него есть встроенный механизм fault injection.
    Ответ написан
    Комментировать
  • Как выявить нужные данные из таблицы в отладчике Turbo Assembler при произведении трассировки программы CPU?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    у меня получилось найти только…

    Если ты нашёл машинный код, то его длину ты легко получишь посчитав символы, 6 16-ричных цифр -- это 3 байта. Ну или вычтя из адреса следующей инструкции пдрес текущей.
    Физический адрес в реальном режиме можно посчитать как cs * 10h + ip. В твоём случае получается 48ff9.
    Из твоей записи непонятно, нашёл ты значения регистров или нет, если что, вон они, в среднем окошке в верхнем ряду, а флаги -- в правом.
    Ответ написан
  • Как исправить проблему с шаблонами?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ошибки вылезают в месте оператора перегрузки () и Image operator!() возникает ошибка.

    Это правильно. Нельзя перегрузить функцию (или оператор) только типом возвращаемого значения.

    Если убрать Image operator!(), то только одна ошибка ("невозможно преобразовать const_Ty в T&")

    Приведённый код эту ошибку не воспроизводит. Но вообще ничто не мешает добавить const в определение оператора !(), поскольку ему не требуется менять исходный объект:
    Image<T> operator!() const

    Но я вижу другую ошибку: оператор вызова функции определён как константный: T& operator()(int i, int j) const, но возвращает потенциально неконстантную ссылку на внутренности объёкта -- T&. Следующий код поэтому не будет работать: result(i, j) = -_data[i][j];. Нужно либо выбросить ссылку из возвращаемого значения оператора T& operator()(int i, int j) const и переписать реализацию оператора !(), либо добавить неконстантную реализацию оператора вызова функции.
    Ответ написан
    Комментировать
  • Как правильно подменить (скопировать) скрипта в самом скрипте?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли способ из самого скрипта подменить сам скрипт чтобы он не портился?

    Когда cp или mv заменяет открытый интерпретатором файл, исходный файл не портится. Если интерпретатор взаимодействует с файлом через один и тот же файловый дескриптор, то никакого значения замена файла не имеет. Нужно разбираться с деталями того что портится, чтобы понять, как это пофиксить.
    Ответ написан
    Комментировать