дано: плата с микроконтроллером esp32 и допплеровский датчик движения rcwl-0516. щас расскажу что с этим делать)
для начала схема подключения:
gnd (rcwl-0510) - gnd (esp32) vin - 5v out - любой свободный gpio
суть в том, что при обнаружении движения, датчик выдает напряжение на контакт OUT, программно мы опрашиваем наш gpio pin, и при возникновении там логической единицы понимаем, что китайцы прислали рабочий датчик.
Почему в си используются только строки ASCIIZ? Что если я хочу строки в стиле паскаля: размер строки и массив символов? Допустим даже напишу свои функции для работы с такими строками, но строковые константы (которые в двойных кавычках, типа "привет, мир!") всё равно останутся с '\0' в конце. Как поменять формат строковых констант на свой?
>>3621833 У строк в Паскале есть один минус. Они ограниченны, не больше 255 символов. В С строки в этом смысле лучше, ты войну и мир вместить в одну строку можешь. В Паскале придется мастерить что-то динамическое, типа связного списка. >но строковые константы Писать наверное какой-нибудь конвертор для них, хз. >Как поменять формат строковых констант на свой? Скорее всего никак. Только компилятор переписывать.
>>3622290 Хотя в С тоже придется динамический массив делать для войны и мира. Но ты понял, это просто массив, а не какая-то нетривиальная структура. Но в новом паскале наверное это как-то решили. Последний раз программировал ещё на турбо.
==352074==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7f2e77c00034 at pc 0x5563dcbb222e bp 0x7ffc0c6fa970 sp 0x7ffc0c6fa968 ... ...
именно так это и должно работать, но при попытке собрать эту программу нашим компилятором:
/opt/mipsel-unknown-linux-gnu/bin/mipsel-unknown-linux-gnu-gcc nsm/test_file.c -fsanitize=address -g -O0 -o test_file /opt/mipsel-unknown-linux-gnu/bin/../lib/gcc/mipsel-unknown-linux-gnu/12.2.0/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find libasan_preinit.o: Нет такого файла или каталога /opt/mipsel-unknown-linux-gnu/bin/../lib/gcc/mipsel-unknown-linux-gnu/12.2.0/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find -lasan: Нет такого файла или каталога collect2: error: ld returned 1 exit status
>>3622932 Раст успел уже обосраться и в ядре линупса и в сетевой инфраструктуре амазона. Ни какой безопасностью там и не пахнет, если программист накосячил, то раст не спасает. А вот мозги, при написании программ, выносит изрядно.
>>3621833 Странно. Вот тип строки как в паскале, ограничение на длину строки - 4 гига. struct strptr { char *begin; uint32_t len; };
осталось написать функции для сравнения, разбивки на токены, поика символов и всё - класс готов. Можно будет взять кусок текста и пройтись по нему кодом, растащить на токены, и при том ничего никуда не копировать.
Да и от сегфолта с переполнением буфера оно помогает
2026 год, в ситреде платиновая дрочка строк. Убирать 0 из внутреннего буфера = стрелять себе в ногу, если твои строки не собираются жить в песочнице, а логика с оплатой размера строки, но экономии 1 байта...
>>3627129 Там нет экономии в 1 байт, потому что он используется для хранения размера строки, а на деле 1 байта мало, поэтому используют 2 или 4. Так что напротив расход по памяти выше.
плохой язык. в те года можно было сделать лучше, примеры были. лисп пацкаль мл. один только факт, что в недавних сырцах юниха 4 нашли уязвимость говорит о многом о языке. юних кста тоже кал и всё что с ним связано худшее, даже в те времена уже были системы лучше.
>>3635469 да. юних же писали сами создатели языка и обосрались. и тогда уже были лиспы, паскаль, форт, фортран, апл, алгол, симула, пролог, смолтолк даже мл хоть и вышли примерно в одно время, они все безопасные и си в 72м это не си в 78м, когда все эти языки уже были, те уже тогда си был отсталым калом. но си уже так сильно всё засрал, что похуй, это уже не исправить для этого надо убить все сиподобные языки, уничтожить весь софт на них, убить всех программистов, уничтожить всё железо и начать заново. хотя новые сиподобные языки норм типа шарпа
>>3635576 >типа шарпа Более каловый язык ещё поискать. Это буквально синтаксическая помойка, куда тащат абсолютно бесполезный сахарок, ломая изначальную задумку.
>>3635576 Какие ОС написаны на этих "безопасных" языках? Си создавался под конкретные нужды - писать ОС на языке высокого уровня, а не на ассемблере. Также удалось добиться определенной степени кроссплатформенности.
>>3635870 на чём угодно можно писать ос. надо портировать виртуальную машину, в си конретной нет, но есть модель пдп11 и надо портировать библиотеки например стандартную библиотеку. как это сделать? на ассемблере в любом случае для любого языка.
>>3637000 >на чём угодно можно писать ос. >надо портировать виртуальную машину Мне кажется тебе стоит подтянуть знания в этой области прежде, чем писать подобные утверждения.
>>3637034 шиз как ты портируешь языкнейм на платформунейм? все языки построены по принципу, что они выполняются на абстрактной машине в этом и суть абстратных машин они работают с языком и код пишется для них. на жабе под жвм, на си под пдп-11 это модель во что транслируется похуй. поэтому для порта надо чтобы платформа соотвествовала этой модели.
>>3638884 сделать компилятор/препроцессор/постпроцессор/чтоугодно Посмотри на котлин, он умеет компилироваться под джвм, джс и ллвм, потому что компилятор имеет разные бэкенды. мимо
>>3638884 Си транслируется в машинный код конкретной машины. Что gcc, что clang, что msvc. Ни в какую pdp-11 никто ничего не транслируется, если ты не пользуешься древним си, который писали под pdp-11. Причём под каждую платформу пишут свой компилятор си. Например, под ZX Spectrum тоже есть си, но из-за ограничений машины он там даже стандарт не поддерживает и очень урезанный по возможностям. А джава с джв - это совсем другой мир. Это языки под виртуальные машины для которых нужна работающая ОС, которая будет выполнять код этой вм. Ни какую ОС ты не напишешь, потому что без ОС твоя жвм даже не запустится. Это сугубо прикладная программа. А си - это системный язык, на котором можно написать практически что угодно.
Гайс, я собираю shared object (допустим libmylib.so), потом бинарь, к которому линкую библиотеку, находящуюся в той же папке. -L. -lmylib Линкер отрабатывает, ошибок не выкидывает.
При исполнении бинаря падает ошибка, что библиотека не найдена, хотя она в папке с бинарём лежит. > error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory
Кто объяснит поч так происходит? При исполнении поиск
>>3639093 >>3638931 о том и речь. трансляция в промежуточный код, который должен отображаться на целевую архитектуру и проблема в точности и качестве такого отображения. и от этого же зависят требования к рантайму. а для ос всё равно придётся писать на языке платформы.
>советую прочитать книгу Брайана Кернигана и Денниса Ритчи «Язык программирования Си» Мы игнорируем тот факт что ее можно прочитать только если ты уже знаешь Си потому что там задачки +- фулл бесполезные?
>>3635576 Как бы не хотелось согласиться, попробуем восстановить реальную ситуацию, которая имела место в то время. >лиспы Тормозной скрипт, для которого только-только научились писать вменяемый GC. Требует передового железа, иначе пригоден лишь как DSL для экспертных систем без строгих требований к производительности. >паскаль Учебный язык. За пределами учебных задач такая же байтопараша, как си. >форт DSL для написания встраиваемых систем. В некоторых задачах тормозит, сцука. >фортран Хорош только библиотеками. В остальном кривая параша, которая с самого начала разрабатывалась бессистемно. В нём даже рекурсии не было, блеать. >апл DSL для математических расчётов. Да ещё с GOTO. >алгол Алгол 60 - неюзабелен из-за call by name, который очень тяжело оптимизировать. Алгол 68 - слишком сложный, был потеснён Паскалем. >Симула См. Алгол 68. >пролог Подмножество Лиспа, расширенное недетерминизмом и тормозной унификацией. Юз кейсы ещё уже, чем у Лиспа. >смоллтолк Экзотичен как Симула и тормознут как Лисп. >мл DSL для доказательств теорем, о котором за пределами Эдинбурга вообще никто не знает. Если не ошибаюсь, в первых версиях даже мутабельных переменных не было. Тормозит как Лисп (в который, собственно говоря, и транслируется).
>>3651724 Если не стесняться гуглить сложные моменты, то там нет ничего такого чего нельзя было бы освоить с нуля. Ну разве что пара алгоритмов, которые можно либо скипнуть либо тоже погуглить. Задачки можно решать с отладчиком если что-то непонятно. А вообще процентов 70 книги это очень простые упражнения. Самый главный плюс КиР в том что она короткая - 150-200 страниц. Тот же Прата уже в 5 раз длинее на все 1000 страниц.