Ответы пользователя по тегу Программирование
  • Можете объяснить код на STM32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    uint8_t led_state = 0x03; Данной командой мы завели переменную, которая равна 3

    В коде написано 2.

    что под этим подразумевается?

    2 -- это вот такое 8-битное двоичное число: 00000010. А если 2 заменить на 3, то число станет таким: 00000011. Улавливаешь связь с количеством и номерами включенных светодиодов?

    HAL_GPIO_WritePin(GPIOE, led_state << 8, GPIO_PIN_SET); Это я так понимаю мы сначала устанавливаем самый первый светодиод, т.е. 8, но на практике ни так.

    Нет, светодиоды на схеме подключены к битам 8..15, а led_state ты выше видел какое. Этой командой мы сдвигаем биты 0..7 led_state в биты 8..15.

    led_state = led_state >> 1 | led_state << 7;Эту строку совсем не понимаю.

    Это циклический сдвиг вправо на 1. Т.е. биты "выдвигаемые" вправо за пределы led_state появляются слева.
    т.е. двоичное число abcdefgh превращается в 0abcdefg | h0000000 = habcdefg.
    Ответ написан
    6 комментариев
  • Почему не отрабатывает exit на третьем уровне скрипта?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Написали многоуровневое меню при помощи функций, работает без проблем все, кроме выхода.
    Примерно на 2-3 уровне меню "Exit" не выходит из скрипта, а возвращается на уровень выше.

    всё зависит от того, как эти функции вызываются. Если так:

    clear; ./1_1_ipmi_menu.sh ; unem ;;

    то разумеется вызов exit внутри скрипта 1_1_ipmi_menu.sh приведёт в возврату в unem, вы же тут отдельный процесс создаёте.
    Чтобы exit в функциях приводил к выходу из приложения нужно импортировать (source) функции из этих скриптов и вызывать функции вместо запуска скриптов.
    Типа того:
    #!/bin/bash
    unem() {
            read b
            case $b in
              1) clear ; … ; unem ;;
              2) clear; PMI ; unem ;;
              3) clear ; menu ;;
              0) exit 0 ;;
            esac
    }
    source 1_1_ipmi_menu.sh
    source 1_1_system_menu.sh
    unem
    Ответ написан
    Комментировать
  • Получение доступа к регистру rip x86-64 архитектура?

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

    lea (%rip), %rax (в синтаксисе at&t) получает адрес следующей инструкции
    Ответ написан
    2 комментария
  • Хочу написать простенький симулятор процессора для уроков, какую выбрать систему команд?

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

    Для этого нужно ответить на вопросы: где вы собираетесь взять ассемблер и как конкретно вы собираетесь демонстрировать его работу?
    Я вижу два возможных ответа на первый вопрос: взять готовый или написать самому. Если цель -- написать самому, то это может быть сравнимо по сложности, если не сложнее, чем написать эмулятор для той же самой системы команд. Если брать готовый, я бы рекомендовал RISC-архитектуру, но все они с теми или иными заморочками, так что это будет выбор наименьшего из зол. На мой взгляд RISC-V, точнее базовый набор RV32I -- достойный кандидат.
    Ответ написан
    Комментировать
  • Почему для счётчиков не используют беззнаковые (unsigned) числа?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Часто вижу в коде на C++ и C#, что для счётчиков … используют int, а не uint/unsigned int.
    Почему праграмисты делают это?

    Я слышал следующую теорию, почему это имеет смысл в С++: потому что значение знакового типа в корректно написанном коде не переполняется. (А если таки случилось переполнение, то это UB и всё уже не важно). Поэтому если счётчик имеет знаковый тип и с ним на каждой итерации происходит, например, инкремент, то значение счётчика только увеличивается. Это, в свою очередь, даёт дополнительные возможности для оптимизации. Беззнаковый счётчик инкрементируемый на каждой итерации может внезапно обнулиться, это может быть легальным поведением программы на которое рассчитывает программист.

    А почему они фактически используют int -- наверняка потому что никакой практической разницы не видно, а буков нужно меньше.
    Ответ написан
    2 комментария
  • Кросс-компиляция под arm и исходники ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Или процесс создания linux headers настолько специфичен?

    Нет. userspace интерфейс ядра изо всех сил старается сохранять обратную совместимость. Т.е. если построить тулчейн с использованием хедеров какой-то версии ядра, собранные им бинарники будут работать (а если не будут, то есть основания зарепортить это как баг ядра) и на более новых ядрах.
    Ответ написан
    Комментировать
  • Стек и куча (память)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему бы не выделить для него больше памяти?

    Действительно, почему бы и нет, учитывая, что эта настройка в руках программиста собирающего (на венде, см. cl /F) или запускающего (в *nix, см. ulimit -s) программу?

    Стек работает быстрее

    А что, уже научились освобождать выделенную на стеке память в произвольном порядке?
    Ответ написан
    Комментировать
  • Как оперативно оповещать пользователей о сбоях?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как оперативно оповещать пользователей о сбоях?

    Рассылкой писем. Там тебе и группы пользователей, и решение готовое и проверенное, и все желающие смогут настроить перенаправление этих писем сразу в мусорку.
    Ответ написан
    5 комментариев
  • Организация памяти?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как это "длина числа в битах", что нужно делать чтобы ее определить.

    Это количество бит необходимых для записи числа.
    Нужно взять следующее бОльшее целое число после логарифма числа по основанию 2. Т.е. 1 -- 1 бит, 2 -- 2 бита, 3 -- 2 бита, 4 -- 3 бита... 1023 -- 10 битов, 1024 -- 11 битов... 179,769,313,486,231,590,772,930,...,304,835,356,329,624,224,137,215 (309 цифр) -- 1024 бита, 179,769,313,486,231,590,772,930,...,304,835,356,329,624,224,137,216 -- 1025 битов...
    Ответ написан
    2 комментария
  • Почему ожидание завершения потока называется join?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему ожидание завершения потока называется join?

    Eсли бы слово fork не было уже занято, создание потока назвали бы fork. fork/join -- прекрасная пара.

    так сделано во всех языках программирования

    Чрезмерное обобщение -- источник абсолютно всех бед.
    Так сделано в языках ориентирующихся на POSIX, потому что в POSIX ожидание завершения потока -- это pthread_join. А в других языках сделано по-другому.
    Ответ написан
    1 комментарий
  • Какое влияние полинома на конечный результат в CRC32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    1. Как влияет полином на CRC?

    CRC -- это остаток от деления входных данных на полином.

    2. Существует ли возможность скорректировать алгоритм или полином так что бы результаты crc были определенном диапазоне? например от 0x0 - 0xafffffff.

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

    3. Скорректируйте алгоритм так что бы результаты были всегда внутри диапазона 0x0-0xeffffffff

    Это задание а не вопрос. Делай свою домашку сам.
    Ответ написан
    3 комментария
  • Как сравнить генераторы случайных чисел на криптостойкость?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    dieharder, как уже посоветовали в комментариях. Это стандартный набор тестов для проверки качества ГСЧ.
    Ответ написан
    5 комментариев
  • Какие существуют программы для создания дампов памяти работающих приложений?

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

    Ключевые слова: CreateProcess/OpenProcess чтобы создать/открыть существующий процесс, VirtualQueryEx чтобы просмотреть области памяти выделенные процессом и ReadProcessMemory чтобы прочитать данные из нужных областей памяти.
    Ответ написан
    Комментировать
  • Возможно ли создать программу путем перебора символов в файле?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    обнаружить папку в директории и осуществить вход в неё

    find -maxdepth 1 -type d -not -name '.' >& /dev/null && cd "`find -maxdepth 1 -type d -not -name '.' | head -n1`"
    Ответ написан
    1 комментарий
  • Какие ошибки в неблокируемом сокете не приводят к его закрытию?

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

    Вообще это два разных вопроса. Никакие ошибки не приводят к закрытию сокета, закрыть его можно только явно вызвав close.
    Игнорировать ошибки тоже не стоит, потому что они говорят о том, что случилось с данными переданными в send или полученными из recv. А именно, EAGAIN / EWOULDBLOCK говорят о том, что данные не были посланы или приняты, но с сокетом и с соединением (если есть) всё нормально. Кроме того, send и recv возвращают количество реально отправленных/полученных данных, и оно может быть меньше, чем было запрошено. Это не ошибка, а нормальная ситуация, её обязательно надо обрабатывать правильно.
    Почти все остальные ошибки говорят о том, что соединение оборвано и сокет остаётся только закрыть.
    Ответ написан
    1 комментарий
  • Как совместить фабрику и закон Деметры?

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

    Фабрика возвращает интерфейс объекта, который был специально введён, чтобы предоставить обобщённый доступ к разным типам объектов создаваемых фабрикой. Пользователи фабрики взаимодействуют только с этими интерфейсами, не с самими объектами. Т.о. пользователи фабрики не зависят от модулей реализующих конкретные объекты. Закон Деметры как раз и нужен для того, чтобы уменьшить зацепление между модулями. Следуйте духу закона, а не букве.
    Ответ написан
    Комментировать
  • Какая операция наиболее времязатратная на CPU?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что лучше считать, чтобы CPU работал подольше?

    rep nop
    Ответ написан
    Комментировать
  • «Hello World» на машинном коде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как запустить такую программу?

    Сохранить в файл с расширением .com, запустить в DosBox

    Сохраняю в формате .com, пыталась запустить в DosBox - виснет

    Сделал то же самое,
    работает.
    58e1b24bb3ee46a390e305568c9d2a18.png
    Ответ написан
    Комментировать