дано: плата с микроконтроллером 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. Так что напротив расход по памяти выше.