Задать вопрос
  • Не прошивается esp8266, что делать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не прошивается esp8266, что делать?

    читать сообщение об ошибке, вот это:
    Arduino\libraries\ESP8266HttpClient-master/SerialResponse.h:15:10: fatal error: Delay.h: No such file or directory

    разбираться с разницей между "не прошивается" и "не компилируется".
    Ответ написан
    Комментировать
  • Почему mono в ubuntu не находит .so?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему-то в ubuntu она отказывается находить его, хотя он есть в папке с программой.

    добавь путь до каталога с этим файлом .so в переменную окружения LD_LIBRARY_PATH перед запуском программы.
    Ответ написан
  • Почему возникает ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    invalid abstract return type ‘Axis<unsigned int>’
    Почему возникает ошибка?

    Потому что Axis<unsigned int> -- абстрактный тип, а ты пытаешься вернуть объект такого типа.
    Скажи, что конкретно в сообщении об ошибке непонятно?
    Что с этим делать?
    - если тип не должен быть абстрактным -- смотреть в его иерархию наследования, искать недоопределённые чистые виртуальные функции и определять их или выкидывать.
    - если тип должен быть абстрактным -- пересмотреть свои взгляды на жизнь и начать возвращать либо ссылки, либо указатели на объекты абстрактного типа.
    Ответ написан
  • Почему тут ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    call of overloaded ‘Point2D()’ is ambiguous

    Потому что, похоже, у Point2D<T> больше одного конструктора по умолчанию.
    Ответ написан
    2 комментария
  • Почему inline функция не компилилируется?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему так происходит?

    Потому что стандарт С11 (9899:201x 6.7.4:7, черновик доступен тут) говорит следующее про спецификатор inline:

    Any function with internal linkage can be an inline function. For a function
    with external linkage, the following restrictions apply: If a function is declared
    with an inline function specifier, then it shall also be defined in the same translation
    unit. If all of the file scope declarations for a function in a translation unit include
    the inline function specifier without extern, then the definition in that translation
    unit is an inline definition. An inline definition does not provide an external
    definition for the function, and does not forbid an external definition in another
    translation unit. An inline definition provides an alternative to an external
    definition, which a translator may use to implement any call to the function
    in the same translation unit. It is unspecified whether a call to the function uses
    the inline definition or the external definition.

    Самое главное тут -- в середине: инлайн-реализация не предоставляет и не запрещает реализацию со внешней линковкой, и в последнем предложении: транслятор волен сам выбирать, какую реализацию функции использовать -- инлайновую или со внешней линковкой.
    Поскольку ты написал так:
    inline void some_inline_func(uint32_t num)
    {
        . . .
    }

    ты тем самым реализовал инлайн-версию этой функции, но не реализовал версию со внешней линковкой. А транслятор выбрал (вернее ты ему подсказал выбрать, опцией -O0) использовать реализацию функции со внешней линковкой, поэтому ты получил ошибку от линковщика.

    Вариантов решения этой проблемы примерно 3:
    - определить функцию следующим образом:
    extern inline void some_inline_func(uint32_t num)
    {
        . . .
    }

    Такая функция будет доступна из других единиц трансляции.

    - либо определить функцию следующим образом:
    static inline void some_inline_func(uint32_t num)
    {
        . . .
    }

    Такая функция будет доступна только для данной единицы трансляции.

    - оставить в этом исходнике всё как есть, а в каком-нибудь другом определить следующую функцию:
    void some_inline_func(uint32_t num)
    {
        . . .
    }

    Это самый дурацкий вариант, поскольку эти две реализации могут не совпадать и в зависимости от выбора транслятора ты можешь получить разное поведение.
    Ответ написан
    Комментировать
  • Зачем производится закрытие файлового дескриптора?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    зачем закрывается файловый дескриптор (exec 2<&-) перед тем как связать его с лог файлом?

    Я не вижу в этом никакого смысла, потому что системный вызов dup2 (которым вополняется связывание дескриптора логфайла с дескриптором #2) точно так же закрывает дескриптор в который происходит дупликация.
    Ответ написан
  • Как при http запросе curl не выводить ничего в консоль?

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

    Если результат запроса надо сохранить -- то открыть файл на запись и передать полученный указатель в CURLOPT_WRITEDATA. Если сохранять не надо -- установить функцию, которая будет игнорировать передаваемые ей для записи данные в CURLOPT_WRITEFUNCTION.
    Ответ написан
    Комментировать
  • Как узнать удаленный IP на плате ESP?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как мне узнать IP WiFi, к которому подключена ESP?

    Никак, но не потому, что "это зависит от настроек роутера". А потому что нет никакого "IP WiFi". WiFi -- это физический и канальный протоколы, IP -- транспортный. Можно подключиться к WiFi и не использовать IP. Может быть "IP шлюза по умолчанию" -- вы получите его по DHCP, но с WiFi он может быть не связан совсем.
    Ответ написан
    Комментировать
  • Как исправить ошибку линковки undefined reference?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Команда сборки:
    D:\mingw\mingw64\bin\g++.exe -fdiagnostics-color=always -g D:\running\code\parser.cpp -o D:\running\code\parser.exe

    Прости, но как по-твоему mingw должен из этой команды понять, что ты используешь какую-то библиотеку и слинковаться с ней?
    Тебе надо выполнить шаги по сборке библиотеки, а потом добавить её в свою команду сборки, типа того:
    D:\mingw\mingw64\bin\g++.exe -fdiagnostics-color=always \
    -g D:\running\code\parser.cpp \
    -L<путь куда ты установил libgq> -lgq \
    -o D:\running\code\parser.exe


    И я подозреваю, что поскольку gumbo-query это обёртка для gumbo, то когда ты успешно слинкуешься с libgq тебе прийдётся повторить эти шаги и для gumbo.
    Ответ написан
    1 комментарий
  • Почему не работает клавиатура?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему-то не работает прерывание 0х20 для клавиатуры

    я не буду отлаживать твой код, но предложу тебе несколько вопросов, которые помогут тебе посмотреть в нужные места:
    - посылает ли клавиатура вообще IRQ?
    - настроен ли контроллер прерываний на приём IRQ от клавиатуры?
    - размаскирована ли линия IRQ от клавиатуры в контроллере прерываний?
    - настроен ли контроллер прерываний на то чтобы вызывать int 0x20 в ответ на IRQ от клавиатуры? [1]
    - получает ли процессор прерывание от контроллера прерываний?
    - настроена ли запись в IDT для int 0x20 на вызов твоего обработчика?
    - разрешены ли прерывания в процессоре?

    [1] Коль скоро здесь ты установил базовый вектор первого PIC в 0x20, то клавиатура, посылая IRQ1, должна вызывать int 0x21.
    Ответ написан
    Комментировать
  • Могу ли я создать ссылку с параметрами на файл?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Чтобы каждый раз не задавать параметры дэймону, ищу как зафиксировать.

    aspirantes, написать скрипт в котором проставить нужные параметры. Например:
    $ cat > /home/222 <<EOF
    #!/bin/sh
    exec /home/111 -param1 -param2 "$@"
    EOF
    $ chmod +x /home/222
    Ответ написан
    Комментировать
  • Почему в ассемблерном листинге gcc нет тела деструктора [complete object destructor]? Как его находит линкер?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Было бы логично увидеть, что происходит вызов deleting dtor внутри которого происходит вызов base object dtor.

    было бы логично, если бы ты вызывал delete для объекта. А для объекта на стеке-то зачем delete?

    Почему в ассемблерном листинге gcc нет тела деструктора [complete object destructor]?

    Есть, просто у тебя какой-то понтовый листинг и ты его не видишь. А из-под gcc -S для твоего кода выходит ассемблерный текст, в котором есть такие строчки:
    .globl  _ZN6ObjectD1Ev
    .set    _ZN6ObjectD1Ev,_ZN6ObjectD2Ev
    Ответ написан
  • Зачем обновляется указатель vptr внутри реализации виртуального деструктора, если внутри виртуальных деструкторов не используется виртуализация?

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

    чего это "не используется"? А вот этот пункт стандарта для кого написан?
    Ответ написан
  • Как замерять время выполнения функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как замерять время выполнения функции?

    Можно воспользоваться парой clock_gettime / clock_getres.

    как можно искусно замедлить выполнение

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что будет с диском 1, если его смонтировать в папку диска 2 и затем отформатировать диск 2?

    Нельзя стандартными средствами "отформатировать" "диск" который примонтирован, а "диск 2" должен быть примонтирован, чтобы в его "папку" можно было смонтировать "диск 1".
    Если наплевать на условности и зафорсить форматирование на уровне блочного устройства, то с примонтированной файловой системой на диске 2 всё будет плохо, а диску 1 ничего не будет.
    Ответ написан
    Комментировать
  • Как задать значение последней переменной?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Имеется код вида
    int64_t a = b/c
    b и c какие-то произвольные числа
    требуется записать 0 в переменную a, если произошел SIGFPE.
    Проверять значения b и c не вариант, нужно как-то задавать значение для a в обработчике сигнала.

    Задача в такой постановке выглядит странной, если это не просто учебная задача на обработку сигналов.
    Если это учебная задача -- то конечно, и ассемблерная вставка тут может помочь, но это не вопрос для тостера.
    Если это практическая задача, то решить её можно следующими способами:

    - наиболее простой и переносимый, но не самый быстрый -- таки проверить значения b и c перед вычислениями.

    - следующий по простоте -- использовать setjmp перед началом блока вычислений который может закончиться сигналом, в обработчике сигнала вызвать longjmp, после возврата присвоить результатам нужные значения.

    - следующий вариант -- нифига не простой и не переносимый -- устанавливать обработчик сигнала с помощью sigaction, заказывать доставку SA_SIGINFO и анализировать ucontext (третий аргумент) в обработчике сигнала. Сложность заключается в том, что связь между тем, что будет записано в ucontext и исходным кодом на C ни разу не очевидна. Т.е. можно извлечь из памяти по адресу info->si_addr инструкцию вызвавшую сбой, проанализировать её длину и куда она записывает результат, записать в результат 0 и передвинуть адрес возврата. Но это выглядит как неоправданное количество мороки.
    Ответ написан
  • Почему Qemu вылетает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я потратил несколько дней на то, чтобы понять в чем дело. Ничего не вышло.

    Эта часть вопроса не даёт нам никакой полезной информации. Рассказывай что делал, а мы попробуем понять, что пошло не так в твоём расследовании.
    Ответ написан
  • Почему не работает печать?

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

    Иван Четчасов, этого более чем достаточно, чтобы понять, что происходит. По шагам:
    - надо узнать адрес метки printsz
    - найти в логе qemu выполнение кода по этому адресу
    - проследить за тем, какой код выполняется и что оказывается в регистрах
    - понять что не так.
    Ответ написан
    Комментировать
  • Как вылечить ошибку "error communicating with TPM chip"?

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

    Просто забить. Если ты не знаешь, что такое TPM, а система успешно грузится -- он тебе не нужен.
    Ответ написан
    Комментировать
  • Что делать, если появляется непонятная ошибка после запуска c++ кода?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что делать, если появляется непонятная ошибка после запуска c++ кода?

    Пытаться понять её -- универсальный рецепт.

    это исходный код.
    thread my_thread1(&connecter);
    if(connfd == true)

    В этом месте две ошибки. Первая -- ты сравниваешь int connfd с bool true, а вторая -- ты делаешь это без уважения потоконебезопасным способом. Прямо скажем, у тебя тут гонка между main и connecter. Когда ты эту гонку исправишь, жизнь твоя, скорее всего, наладится. Непонятно, правда, зачем ты вызываешь accept в параллельном потоке вместо того, чтобы сделать это синхронно, прямо в main.
    Ответ написан
    Комментировать