Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 55 5 37
Единственный тред по СИ clang /clang/ Аноним 08/01/26 Чтв 03:00:43 3619616 1
channels4profile.jpg 39Кб, 900x900
900x900
photo2026-01-08[...].jpg 26Кб, 650x612
650x612
photo2026-01-08[...].jpg 51Кб, 640x780
640x780
Тред для всех кто хочет погрузиться в низкоуровневое и системное программирование дедушки си

Обсуждаем чужие гитхабы, коды, программирование микроконтроллеров.

сам учился на степике, всем советую прочитать книгу Брайана Кернигана и Денниса Ритчи «Язык программирования Си»

ЗАДАВАЙТЕ ВОПРОСЫ И ПОЛУЧАЙТЕ ОТВЕТЫ!
Аноним 08/01/26 Чтв 03:03:06 3619617 2
Аноним 08/01/26 Чтв 03:06:16 3619620 3
неплохие примеры кодов в репозитории))
Аноним 08/01/26 Чтв 09:04:08 3619664 4
>>3619620
ахахах да прикольно , ржу нимагу)))) давайте,встречу айтишников сделаем ,пивка по пьем ёпт)))))
Аноним 08/01/26 Чтв 18:34:06 3619995 5
Стоит ли читать Столярова 2 том?
Аноним 08/01/26 Чтв 19:34:41 3620026 6
>>3619995
ну если нужно что-то более менее простенькое прочитать, то норм
вавилен 09/01/26 Птн 01:22:26 3620188 7
дано: плата с микроконтроллером esp32 и допплеровский датчик движения rcwl-0516. щас расскажу что с этим делать)

для начала схема подключения:

gnd (rcwl-0510) - gnd (esp32)
vin - 5v
out - любой свободный gpio

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

вот так максимально просто это реализовано на си:

```
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "driver/gpio.h"

#include "log.h"

#define MOTION_SENSOR_GPIO 22

static const char TAG = "GOVN0_SL0NA_main";
void app_main(void)
{
gpio_config_t io_conf = {
.intr_type = GPIO_INTR_DISABLE,
.mode = GPIO_MODE_INPUT,
.pin_bit_mask = (1ULL << MOTION_SENSOR_GPIO),
.pull_down_en = GPIO_PULLDOWN_ENABLE,
.pull_up_en = GPIO_PULLUP_DISABLE,
};
gpio_config(&io_conf);

int motion_sensor_state = 0;
int previous_state = 0;

while (1) {
motion_sensor_state = gpio_get_level(MOTION_SENSOR_GPIO);

/
регистрируем движение только при переходе с 0 на 1 /
if (motion_sensor_state == 1)
{
TickType_t current_time = xTaskGetTickCount();
uint32_t time_ms = current_time
portTICK_PERIOD_MS;
ESP_LOGI(" -- ", "Motion sensor detected motion! Time: %lu ms (%.2f seconds)\n",
(unsigned long)time_ms, time_ms / 1000.0f);
}

ESP_LOGI(" -- ", "Motion sensor state: %d\n", motion_sensor_state);

vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
```

из логов видно, что все работает:

```
I (283) main_task: Calling app_main()
I (283) -- : Motion sensor state: 0

I (4283) -- : Motion sensor state: 0

I (5283) -- : Motion sensor state: 0

I (6283) -- : Motion sensor state: 0

I (11283) -- : Motion sensor detected motion! Time: 11010 ms (11.01 seconds)

I (11283) -- : Motion sensor state: 1

I (12283) -- : Motion sensor detected motion! Time: 12010 ms (12.01 seconds)
```


всё лучшее - на СИ!
Аноним 09/01/26 Птн 07:59:14 3620215 8
>>3620188
>vTaskDelay(1000 / portTICK_PERIOD_MS);
>while (1)
В гпио же ивенты были?
Аноним 09/01/26 Птн 08:31:09 3620219 9
вавилен 09/01/26 Птн 12:04:06 3620287 10
>>3620215

это так, простенький пример, лучше конечно создавать отдельную задачу для опрашивания gpio и очередь для передачи событий из прерывания в задачу
Аноним 09/01/26 Птн 13:49:28 3620337 11
интересный пост на хабре про умный дом с есп32 вавилен 09/01/26 Птн 23:40:52 3620683 12
Аноним 12/01/26 Пнд 09:47:08 3621833 13
Почему в си используются только строки ASCIIZ? Что если я хочу строки в стиле паскаля: размер строки и массив символов? Допустим даже напишу свои функции для работы с такими строками, но строковые константы (которые в двойных кавычках, типа "привет, мир!") всё равно останутся с '\0' в конце. Как поменять формат строковых констант на свой?
Аноним 12/01/26 Пнд 18:37:05 3622290 14
>>3621833
У строк в Паскале есть один минус. Они ограниченны, не больше 255 символов. В С строки в этом смысле лучше, ты войну и мир вместить в одну строку можешь. В Паскале придется мастерить что-то динамическое, типа связного списка.
>но строковые константы
Писать наверное какой-нибудь конвертор для них, хз.
>Как поменять формат строковых констант на свой?
Скорее всего никак. Только компилятор переписывать.
Аноним 12/01/26 Пнд 19:36:56 3622333 15
>>3622290
Хотя в С тоже придется динамический массив делать для войны и мира. Но ты понял, это просто массив, а не какая-то нетривиальная структура.
Но в новом паскале наверное это как-то решили. Последний раз программировал ещё на турбо.
Аноним 13/01/26 Втр 08:46:17 3622522 16
>>3622290
Наверно только генерировать массив из отдельных символов, типа
const char str[] = { 'H', 'e', 'l', 'l', 'o' };
noSANITIZER вавилен 13/01/26 Втр 17:44:54 3622887 17
изображение.png 86Кб, 881x572
881x572
Сегодня выяснилось что в нашем mips-тулчейне отсутствуют библиотеки санитайзеров (libasan.so,..).

для примера возьмём такую программку с явной проблемой:

int main(void)
{
int arr[5];
for (int i = 0; i <= 5; i++) {
arr = i;
}
return 0;
}


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

компилируем с необходимыми флагами:
gcc test_file.c -fsanitize=address -g -O0 -o test_file

запускаем и видим ошибку времени исполнения:

==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

на фотке переписка с тимлидом. че делать
Аноним 13/01/26 Втр 18:32:58 3622932 18
>>3622887
>Белые люди изобрели божественный абсолютно безопасный Раст
>Продолжать пользоваться дырявыми С/С++
Вы заслуживаете все ваши беды.
Аноним 13/01/26 Втр 20:29:02 3622975 19
>>3622932
Раст успел уже обосраться и в ядре линупса и в сетевой инфраструктуре амазона. Ни какой безопасностью там и не пахнет, если программист накосячил, то раст не спасает. А вот мозги, при написании программ, выносит изрядно.
Аноним 13/01/26 Втр 20:48:49 3622989 20
>>3622932
>Белые люди
Ты не охуел там? Тебя пидорасты за такой хейтспич закэнселят, рэйсист неинклюзивный.
Аноним 14/01/26 Срд 05:22:51 3623347 21
>>3622932
Ты просто бык. Быку кнут. А плюсы для тех кто по натуре своей свободу любит.
Аноним 15/01/26 Чтв 12:34:01 3624457 22
>>3620026
А есть что-то более сложное? Там вроде довольно много инфы написано. Пожалуй, даже больше, чем в типовых книгах по си.
Аноним 15/01/26 Чтв 14:17:26 3624563 23
484-0[1] 14Кб, 484x668
484x668
Аноним 15/01/26 Чтв 22:27:25 3624985 24
>>3619616 (OP)
Существует ли книга, после прочтения обложки которой вы не сказали "нуу и хуйня ебаная"?
Аноним 16/01/26 Птн 01:28:15 3625080 25
Аноним 17/01/26 Суб 21:42:46 3626325 26
>>3621833
Странно. Вот тип строки как в паскале, ограничение на длину строки - 4 гига.
struct strptr
{
char *begin;
uint32_t len;
};

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

Да и от сегфолта с переполнением буфера оно помогает
Аноним 18/01/26 Вск 12:29:13 3626595 27
>>3626325
Всё верно, речь больше про строковые константы.
Аноним 18/01/26 Вск 13:41:03 3626652 28
>>3619616 (OP)
@monkey обосри язык программирования СИ
Аноним 18/01/26 Вск 22:25:22 3627129 29
2026 год, в ситреде платиновая дрочка строк.
Убирать 0 из внутреннего буфера = стрелять себе в ногу, если твои строки не собираются жить в песочнице, а логика с оплатой размера строки, но экономии 1 байта...
Аноним 19/01/26 Пнд 12:24:15 3627378 30
>>3627129
Там нет экономии в 1 байт, потому что он используется для хранения размера строки, а на деле 1 байта мало, поэтому используют 2 или 4. Так что напротив расход по памяти выше.
Аноним 24/01/26 Суб 20:06:21 3631694 31
Сконпелируйте энто сначала как есть. Работает как ожидается. Затем у последнего printf уберите \n и сконпелируйте заново.

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/epoll.h>
#include <linux/input.h>
void main () {
struct input_event kbev;
struct epoll_event epev;
int kbfd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
if(kbfd < 0) {
printf("Failed open event0\n");
return;
}
int epfd = epoll_create(1);
if(epfd < 0) {
printf("Failed to create epoll\n");
return;
}
epev.data.fd = kbfd;
epev.events = EPOLLIN;
if(epoll_ctl(epfd, EPOLL_CTL_ADD, kbfd, &epev) != 0) {
printf("Failed to configure epoll\n");
return;
}
int evn;
for(;;) {
evn = epoll_wait(epfd, &epev, 1, 0);
if(evn) {
if(evn == -1) {
printf("epoll_wait error");
return;
} else if(evn > 0) {
read(kbfd, &kbev, sizeof(struct input_event));
printf("%d\n", kbev.time.tv_sec);
}
}
}
close(epfd);
}
Аноним 31/01/26 Суб 19:53:02 3634597 32
плохой язык. в те года можно было сделать лучше, примеры были. лисп пацкаль мл. один только факт, что в недавних сырцах юниха 4 нашли уязвимость говорит о многом о языке. юних кста тоже кал и всё что с ним связано худшее, даже в те времена уже были системы лучше.
Аноним 01/02/26 Вск 11:22:08 3634890 33
>>3634597
Ну и тем не менее он выстрелил так, что большинство базового ПО написано на нем и произошедшем от него С++.
Аноним 01/02/26 Вск 22:15:27 3635469 34
>>3634597
>нашли уязвимость
Т.е. если появляется уязвимость, то это вина языка, на котором написано по?
Аноним 01/02/26 Вск 23:52:42 3635491 35
>>3622932
Напомни, где пидрРаст-тред. Я его найти не могу.
Аноним 02/02/26 Пнд 08:37:32 3635576 36
>>3635469
да. юних же писали сами создатели языка и обосрались. и тогда уже были лиспы, паскаль, форт, фортран, апл, алгол, симула, пролог, смолтолк даже мл хоть и вышли примерно в одно время, они все безопасные и си в 72м это не си в 78м, когда все эти языки уже были, те уже тогда си был отсталым калом.
но си уже так сильно всё засрал, что похуй, это уже не исправить для этого надо убить все сиподобные языки, уничтожить весь софт на них, убить всех программистов, уничтожить всё железо и начать заново. хотя новые сиподобные языки норм типа шарпа
Аноним 02/02/26 Пнд 08:54:02 3635583 37
>>3635576
>типа шарпа
Более каловый язык ещё поискать. Это буквально синтаксическая помойка, куда тащат абсолютно бесполезный сахарок, ломая изначальную задумку.
Аноним 02/02/26 Пнд 09:41:31 3635591 38
>>3622932
>безопасный раст
А что делать с небезопасным растом?
Аноним 02/02/26 Пнд 15:06:00 3635778 39
>>3635576
Давно в тематике такого бреда не видал.
Аноним 02/02/26 Пнд 16:42:51 3635870 40
>>3635576
Какие ОС написаны на этих "безопасных" языках? Си создавался под конкретные нужды - писать ОС на языке высокого уровня, а не на ассемблере. Также удалось добиться определенной степени кроссплатформенности.
Аноним 02/02/26 Пнд 20:04:33 3635978 41
>>3635576
Очень много жира с экрана потекло. Очень много
Аноним 03/02/26 Втр 15:21:45 3636315 42
>>3635870
Под Лисп даже свое железо делали
>>3635491
> где пидрРаст-тред. Я его найти не могу
реально, где? Тоже искал сегодня вопросик задать
Аноним 04/02/26 Срд 15:42:14 3637000 43
>>3635870
на чём угодно можно писать ос. надо портировать виртуальную машину, в си конретной нет, но есть модель пдп11 и надо портировать библиотеки например стандартную библиотеку. как это сделать? на ассемблере в любом случае для любого языка.
Аноним 04/02/26 Срд 16:56:27 3637034 44
>>3637000
>на чём угодно можно писать ос.
>надо портировать виртуальную машину
Мне кажется тебе стоит подтянуть знания в этой области прежде, чем писать подобные утверждения.
Аноним 06/02/26 Птн 21:33:52 3638884 45
>>3637034
шиз как ты портируешь языкнейм на платформунейм? все языки построены по принципу, что они выполняются на абстрактной машине в этом и суть абстратных машин они работают с языком и код пишется для них. на жабе под жвм, на си под пдп-11 это модель во что транслируется похуй. поэтому для порта надо чтобы платформа соотвествовала этой модели.
Аноним 06/02/26 Птн 23:09:23 3638931 46
>>3638884
сделать компилятор/препроцессор/постпроцессор/чтоугодно
Посмотри на котлин, он умеет компилироваться под джвм, джс и ллвм, потому что компилятор имеет разные бэкенды.
мимо
Аноним 07/02/26 Суб 08:35:24 3639093 47
>>3638884
Си транслируется в машинный код конкретной машины. Что gcc, что clang, что msvc. Ни в какую pdp-11 никто ничего не транслируется, если ты не пользуешься древним си, который писали под pdp-11.
Причём под каждую платформу пишут свой компилятор си. Например, под ZX Spectrum тоже есть си, но из-за ограничений машины он там даже стандарт не поддерживает и очень урезанный по возможностям.
А джава с джв - это совсем другой мир. Это языки под виртуальные машины для которых нужна работающая ОС, которая будет выполнять код этой вм. Ни какую ОС ты не напишешь, потому что без ОС твоя жвм даже не запустится. Это сугубо прикладная программа. А си - это системный язык, на котором можно написать практически что угодно.
Аноним 09/02/26 Пнд 16:36:26 3640769 48
Гайс, я собираю shared object (допустим libmylib.so), потом бинарь, к которому линкую библиотеку, находящуюся в той же папке. -L. -lmylib
Линкер отрабатывает, ошибок не выкидывает.

При исполнении бинаря падает ошибка, что библиотека не найдена, хотя она в папке с бинарём лежит.
> error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory

Кто объяснит поч так происходит? При исполнении поиск
Аноним 09/02/26 Пнд 18:13:58 3640845 49
>>3640769
Возможно дело в переменных окружения. Попробуй добавить директорию с библиотекой в LD_LIBRARY_PATH
Аноним 10/02/26 Втр 00:09:20 3641076 50
>>3640845
Спс, разобрался, добавил локальную диру через rpath.
Аноним 10/02/26 Втр 19:25:50 3641704 51
>>3639093
>>3638931
о том и речь. трансляция в промежуточный код, который должен отображаться на целевую архитектуру и проблема в точности и качестве такого отображения. и от этого же зависят требования к рантайму. а для ос всё равно придётся писать на языке платформы.
Аноним 25/02/26 Срд 19:22:09 3651724 52
>советую прочитать книгу Брайана Кернигана и Денниса Ритчи «Язык программирования Си»
Мы игнорируем тот факт что ее можно прочитать только если ты уже знаешь Си потому что там задачки +- фулл бесполезные?
Аноним 27/02/26 Птн 20:23:59 3653126 53
>>3635576
Как бы не хотелось согласиться, попробуем восстановить реальную ситуацию, которая имела место в то время.
>лиспы
Тормозной скрипт, для которого только-только научились писать вменяемый GC. Требует передового железа, иначе пригоден лишь как DSL для экспертных систем без строгих требований к производительности.
>паскаль
Учебный язык. За пределами учебных задач такая же байтопараша, как си.
>форт
DSL для написания встраиваемых систем. В некоторых задачах тормозит, сцука.
>фортран
Хорош только библиотеками. В остальном кривая параша, которая с самого начала разрабатывалась бессистемно. В нём даже рекурсии не было, блеать.
>апл
DSL для математических расчётов. Да ещё с GOTO.
>алгол
Алгол 60 - неюзабелен из-за call by name, который очень тяжело оптимизировать. Алгол 68 - слишком сложный, был потеснён Паскалем.
>Симула
См. Алгол 68.
>пролог
Подмножество Лиспа, расширенное недетерминизмом и тормозной унификацией. Юз кейсы ещё уже, чем у Лиспа.
>смоллтолк
Экзотичен как Симула и тормознут как Лисп.
>мл
DSL для доказательств теорем, о котором за пределами Эдинбурга вообще никто не знает. Если не ошибаюсь, в первых версиях даже мутабельных переменных не было. Тормозит как Лисп (в который, собственно говоря, и транслируется).
Аноним 28/02/26 Суб 11:03:42 3653460 54
>>3651724
Если не стесняться гуглить сложные моменты, то там нет ничего такого чего нельзя было бы освоить с нуля. Ну разве что пара алгоритмов, которые можно либо скипнуть либо тоже погуглить. Задачки можно решать с отладчиком если что-то непонятно. А вообще процентов 70 книги это очень простые упражнения. Самый главный плюс КиР в том что она короткая - 150-200 страниц. Тот же Прата уже в 5 раз длинее на все 1000 страниц.
Аноним 28/02/26 Суб 14:08:09 3653548 55
>>3653126
Как ты удобно всё перечислил, но забыл про Ada который как раз и разрабатывался как безопасный в отличие от паскаля.
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов