Нужна помощи по С
Два вопроса:
1. Нужно создать переменную с не совсем обычным типом. Знаковая, целая размер 4 бита (пол байта) int это 32 остальные стандартные также не торт
2. С какой частотой по умолчания вызывается функция, надо чтоб 10 герц было
Задача
1. Нужно создать переменную с не совсем обычным типом. Знаковая, целая размер 4 бита (пол байта) int это 32 остальные стандартные также не торт
2. С какой частотой по умолчания вызывается функция, надо чтоб 10 герц было
Задача
152 комментария
Мне совершенно непонятно зачем эти извращения в 32/64 битной системе, где компилятор всё равно сделает как удобнее архитектуре. Он даже для bool выделит все 32 бита в памяти…
на сколько я знаю 32 битные системы менее требовательны к железу(на слабой машине будут программы быстрее работать(тут либо больше пользователей(игры на x32) либо функционал)), но скоро полностью избавятся от X32 систем/программ
То, что, якобы, с 32-битными данными процессор работает быстрее, потому что они короче 64-битных — миф, сейчас даже шина памяти у всей существующей для x86 памяти 64-битная (мы же, правда, не будем вспоминать SIMM-ы?), соответственно все пересылки и обработка происходит точно так же, как при работе в 32-битном режиме. Те программы, которые пока ещё встречаются для x86 (т.е. не x86_64) собираются исключительно ради совместимости.
from time import sleep
Если препод спросит, почему Питон, то ответь ему, что С — устаревшее говно, на котором всерьёз кодят только прыщавые задроты.
Кстати, не знаю, как сейчас, но в i386 xchg r32,r32 выполнялась быстрее mov r32,r32, а xor r32,r32 — быстрее cmp r32,r32. Первое было связано с очень сложным алгоритмом работы mov, а второе — с тем, что cmp — это вычитание, оно долгое, поскольку операнды проходят сумматор в АЛУ; xor — простой побитный xor, который делается параллельно со всеми битами.
Причём может быть и сильно меньше, если комп фризится по какой-нибудь причине…
Г-н Фраер в очередной раз громогласно газифицировал лужу, сравнив интерпретируемый и компилируемый языки, с абсолютно разными сферами применения!
Спойлер
Спойлер
vk.com/wall-72495085_951112
>значение в диапазоне от 0 до 7
Вы е*анулись?
Скорее всего, под «1 битом данных» имелись в виду, что переменные типа bool, ибо, если праскинуть мозгами, то все входные данные — логические (true или false). Ох уж эта неточность в учебных заведениях…
Это невозможно, просто потому, что байт есть минимальная адресуемая единица информации.
Можно лишь так организовать структуру данных, чтобы на одно значение выделялось 4 бита — тогда в одном байте получится хранить две переменные.
Это несложно с помощью битовых операций.
Без конкретики по операционной системе и аппаратной части ничего сказать нельзя. Если это DOS — там 18.2 Гц точность достижима без хлопот, 1000 Гц — с хлопотами. Если Windows/Linux — то про точность нужно забыть. Если системы реального времени — Qnx, LinuxRT — там всё хорошо.
В чистом С была когда-то конструкция для выделения битовых полей в переменной, в каком-то затёртом учебнике бородатого года читал. И уже там писалось, что оно конечно есть, но к использованию не рекомендуется. А на счёт 10Гц… Вроде была тогда же функция delay, калиброванная под то ли 8086, то ли под 80286… Принимала она параметр в миллисекундах и держала задержку достаточно точно, но только на том самом процессоре (куча nop в цикле там была внутри скорее всего).
Версия вторая: это задача под микроконтроллеры. Наводит на эту мысль очень уж аппаратная постановка задачи. В частности под семейство 8051 есть модификация С — С51, собственно. Там есть битовые и операции, и переменные. Кстати, и условие с периодом выполнения функции тогда становится понятно — реализовать прерывание по предварительно настроенному таймеру. Но тут по-любому надо уточнить, под какие именно ядро и архитектуру должна быть реализация. Тут очень зависит.
В любом случае, весело у вас там…
Если это точно C (а не, допустим, Verilog или VHDL) — то скорее всего микроконтроллер.
Соответственно, вопросов сразу куча:
1) Откуда приходят исходные данные. Почему такая странная идея — упаковать четыре битовых значения в одну переменную? Может, проще взять четыре отдельные int-овые переменные? Компилятор всё равно разместит их на регистрах.
Кстати, для справки: int всегда не сложнее и не медленнее, чем любые малые типы (например, char). Поэтому, когда нет задачи экономить память и регистры (а на современном сколь угодно хилом железе, даже MCU, экономить единицы байт бессмысленно, соответственно этой задачи нет), всегда стоит использовать int и не паковать биты.
Другое дело, когда данные уже имеются в таком формате (например, это поле какой-то структуры, падающее нам на вход по какому-нибудь каналу — хоть I2C, хоть WLAN, ну или что-то ещё).
2) Какая аппаратная основа? На Arduino это пишется одним образом, на Linux в качестве модуля ядра — другим, на Windows — вообще зависит от IDE и применяемой библиотеки. Используя одну libc, портируемым образом точно получить 10 Гц невозможно, насколько я знаю.
3) Нужно ли строго 10 герц, или есть ограничения типа «не меньше 10 Гц», «не больше 10 Гц», «примерно 10 Гц, можно чуть больше/чуть меньше». Где-то пойдёт простой usleep() между циклами, а где-то нужно делать обработчик прерывания и использовать HPET.
Короче, в исходной задаче слишком мало информации.
Если говорить о тех вопросах, которые вынесены в начало поста, то:
1) На x86 и x86_64 это невозможно, а в общем случае ещё и не нужно. Используй любые 4 бита в обычном int, а лучше используй вообще отдельные переменные.
2) Функция не вызывается до тех пор, пока ты сам её не вызовешь. Если ты крутишь её в цикле с usleep() — она вызывается с той задержкой, которую ты ей прописал. Если это функция loop() в Arduino — она вызывается через единицы такт после окончания предыдущего исполнения (т.е. фактически сразу). Если это onevent-обработчик таймера — то с установленной частотой, но не чаще, чем приложение будет получать время от планировщика ОС. Если обработчик прерывания — то с той частотой, с которой прерывание приходит. Короче, мало данных.
Это еще не учитывая возможные задержки из-за лагов…
офигеть как много строчек.
всё, задача решена. В Питоне bool автоматически преобразуется в 0 или 1 в математических выражениях.
Переобуваемся в прыжке, или просветление снизошло?
Спойлер
Вот корректный код
pastebin.com/raw/GzHKsAVF
Спойлер
У меня printf там для примера вметсто слипа. И даже с принтом и слипом С-шный код короче и понятней выходит.
Читай документацию. Функция должна принимать 4 переменные.
Или память как у золотой рыбки?
В общем давно понятно, что с тобой спорить — что с гобулем в шахматы играть. Просто знаешь — понтуйся в общих темах. Не надо вредить там, где слаборазбирающийся по-видимому человек попросил помочь по конкретному вопросу. Вот он обчитается твоей ереси, и сделает не так что нибуть у себя. Тебе же пятно в карму =)
Засим я спать.
Спойлер
(Эх, где те дни за «Правцем-16» с 8088 процом, когда 486 казался той ещё годнотой...)
В конце концов, большая часть коммерческих разработок — это именно плохой код, но выпущенный и приносящий пользу.
Ладно еще скорость/память не оптимизировать… но такие вот саши-фраеры и на безопасность забивают болт. А потом имеем кучу багов, утечек, взломов, вирусных эпидемий и прочей фигни…
Или такая вот прелесть, свежачок habr.com/ru/post/452238/
Небось такой вот Саша (понтов дохрена, мозгов нихрена) полез сервак покрутить…
Еще раз, коротко — если бы весь софт делался только профессионалами, медленно, вдумчиво и детально — софта было бы очень мало, и стоил бы он конских средств.
Я не предлагаю вылизывать все на ассемблере до последнего бита, но некоторая культура кодинга быть должна.
В тех же серверных версиях Windows — всё куда чище и надежней, чем в Home/Pro. Но и стоят они не 7К.
Специфика отрасли — всё легко поднимается и легко разрушается.
Сделанные хуяк-хуяк из говна и палок — могут. В реально критических местах есть многократное дублирование, параллельное выполнение одной задачи с сверкой результатов и переключением на другой сервер в случае расхождения, и много еще чего.
Потом через этот говнокод сливают БД с ПД покупателей, и выкладывают в общий доступ — «Смотрите, Вася Пупкин резиновые елдаки покупает! И кстати номер его кредитки 123456»
Кстати, не так давно снова зеленый банк данные своих клиентов упустил, даже в газетах писали.
Не только покупатели елдаков, но даже мирные клиенты банка под угрозой.
Такова жизнь.
И вместо того чтоб хоть немного ее улучшить, мы смиримся и будем смотреть как плодятся новые поколения говнокодеров…
… спокойно зарабатывать деньги, делая хороший код.
О мире есть кому и без нас позаботиться.
В моей БД инъекцию ты никак не сможешь сделать, потому что это обычный текстовый файлик, который Питон считывает как json-файл. Мне невыгодно поднимать БД. Только если пользователей будет 1к+ — тогда выгодно. А до тех пор — текстовый файлик экономнее по производительности будет.
А как решаешь вопросы параллельного доступа к файлу и конкурирующих запросов к одному участку файла?
С этого места подробнее
Куда?
В файл. Ну а если не хватит места на жестком диске — тогда я просто вставлю в код проверку на длину строки.
В файлак же не хранится ключ. Он хранится максимум в оперативке в момент создания сокета, когда сервер отправляет клиенту сертификат. Затем возможно помещается в кеш.
То же самое сделает и поддельный клиент от хацкера тоже, да и всё
То есть до сего момента, такой файл послать было можно? Вот тебе и цель DDoS для твоего сервака. И если бы не эта тема — она бы так и осталась.
А как у тебя обновление клиента будет реализовано?
И кстати, как от MitM защищаешься?
tls 1.2 пока-что не работает на Юнити, и разработчики на это жалуются уже 2 года как — forum.unity.com/threads/https-tls-1-2-support.504851/
Сайты по проверки безопасности поставили моему серверу оценку B.
Песец мрак… 2к19 год…
На клиенте как у тебя защищается ввод пароля, если на машине потенциально кейлоггер? или нечто любящее полазать по чужой памяти через readprocessmemory?
А это уже не ко мне претензии, а к разработчикам Юнити, которые не обновляют поддержку .NET до новых версий уже очень давно.
tabun.everypony.ru/blog/computers/188170.html#comment12910062
и это печалит.
Как по мне конечно лучше тыкать UE4 и там уже определяться с ролью в проекте или делать проекта посредством блюпринтов и пр. А если уж и вдаваться в код, то уже понимая зачем и что для этого стоит подучить попутно. Опять же практика и теория, но своевременная. Вообще в целом теоретические знания которые обгоняют текущую задачу чаще всего или теряют свежесть или просто вызывают недоумение. А вот когда что-то не выходит и нужно решение, вот тогда и идёт поиск знания.
Насчёт дыры — ну так на то и есть тестеры и прочее. По сути делая проект в одну мордашку всегда столкнёшься с моментом, который или упущен или просто уже стал привычным рычагом — в стиле «Включить свет прыгая на пороге пока не замкнёт контакт, параллельно тыкая в кнопку и опираясь на косяк, чтобы выключатель не выпал». Для разраба это привычный ритуал, а вот пользователь или кто-то со стороны посчитает это стрёмным.
Эталон говнокода из палаты мер и весов.
Говнокод, но полезный, годный говнокод. Она позволила миллиарду людей стать пользователями ПК.
И это хорошо. Плохо то, что некоторые из этих пользователей начинают воображать себя мегакулхацкерами, и с ниибическим чсв нести ересь там, где это неуместно.
Я вот например не умею рисовать. Я могу считаться «пользователем карандаша», намалевать там что-то схематичное. Но я не лезу на форумы художников и не умничаю там. А вот в программировании это почему-то норма, написав кривой «хелловорд» — резко начать считать себя умнее Торвальдса, Гейтса и Кармака вместе взятых.
Так в любой отрасли, от схемотехники до туризма.
Как шутят на профильных сайтах «еще никто, кто спрашивал про управлении 220В с Ардуино, не возвращался в тему».
Спойлер
Тогда придётся сложнее делать:
А ещё я заметил забавную вещь: зачем ему четырёхразрядный вывод из регистра, который никогда не первысит значения 7? Выкину-ка я лишний бит. И плевать, что теперь синтезируется два сумматора, а не один. Всё равно под эту схему использовано всего 9 ALUT и 3 регистра (ну да, против 6 и 4 в схеме без переполнения; получается, дополнительный сумматор занял три ALUT — вполне норм для трёхбитной суммы, зато освободился лишний «регистр», точнее триггер из r_cnt).
www.c-cpp.ru/books/bitovye-polya
Хотя я не понимаю зачем это в обычной задаче, если ты только не под что-то типа PIC12 пишешь, и то…
За 10 герц уже выше пояснили.
Табун вдруг превратился в Хабр?
Спойлер
Не очень. Ядро игры всего 20 тыс строк, в библиотеках самописных еще десяток, файлы сценариев всех кампаний — 15 тыс строк.
Коммерческие проекты у меня до 50 тыс строк достигают, где много сложной, трудноформализуемой логики обработки данных. И половина это таки унылые проверки, правильные ли это данные или хлам пришел.
PS: DirectX очень утомительный, если уж идти на низкий уровень, то OpenGL.
Грубо, функция или класс — это законченный кусок кода, делающий какую-то одну задачу и ничего, кроме неё.
PS: Мне D нравится, но толку от него немного, за пределами академическо-исследовательской среды.
Пример вакансии?
Я бы сказал, их почти нет. А это означает, что никто ничего на нём не пишет за пределами своих личных забав.
Но ведь не пишут. А почему?