Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002) Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994) "Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
>>1808899 Мне нужно реализовать поиск тригонометрических функций без использования операций с плавающей точкой. Хотел просто синусами, косинусами сделать, но похоже нужен какой-то алгоритм.
>>1808878 Хз что там у тебя за задание, но плавающую точку всегда можно заменить фиксированной, т.е. парой целых, или рациональными числами числитель/знаменатель.
>>1808900 >Мне нужно реализовать поиск тригонометрических функций без использования операций с плавающей точкой.
Значение COS и SIN это нецелое число в диапазоне от -1 до 1. Как его можно целым числом записать? Ну в теориии то извратиться можно, но если ты не знаешь что такое IEEE 754, то очевидно что ты не тот человек, который может сегодня извратиться.
Ок, я так понял, что могу реализовать через ряды Тейлора, но вот проблемка, у меня же число пи не целое шоб задать частоту в синусе, мне его получается нужно округлить до 3?
Совсем недавно начал изучать C. Читаю книгу, заглядываю в стандарт, много гуглю, пытаюсь ковырять разные исходники простых утилит. И, конечно, вместе с этим решаю и пытаюсь решать различные упражнения, практические задания. Не скажу, что всё идёт как по маслу, но настроен серьёзно, не планирую сдаваться. На фоне всего этого почти всё время, которое провожу сейчас за компьютером, трачу на такое самообучение в одиночестве. И как-то ощущается: нехватка живого общения по теме программирования на C и недостаток возможности обсуждать то, что с ним (C-программированием) связано. Не поймите превратно, я не имею вообще ничего против C-тредов (пару раз успел получить дельные советы тут), но часто на самом деле как-то не хватает именно живого общения по теме. (посмотрел конфы в телеге, xmpp, но путного ничего не нашёл)
Ещё есть желание найти собеседников в первую очередь из числа тех, кто тоже серьёзно заинтересован в обучении программированию на C. Может быть получится как-то иногда помогать друг другу, пробовать вместе разрешить ту или иную особо сложную "задачку", обсуждать что-то по теме.
Всё вышеуказанное побудило создать сегодня дискорд-сервер. Надеюсь, что кто-нибудь откликнется и присоединится. Создал буквально пару часов назад, поэтому на первых порах сразу после входа будут открыты: голосовой канал и 2 текстовых (general и no-microphone). Ссылку в форме картинки оставил тут: https://2ch.hk/ch/res/161664.html
Буду особенно рад, если кто-нибудь из опытных олдов-специалистов решит зайти, что иногда делиться своей мудростью и давать советы неофитам вроде меня.
>>1809781 Трипл хуйни не скажет. Он тебе всё верно написал. Как ты будешь компилировать свой хаскел? Синтаксис уже придумал? Парадигму используемую для программирования? Как это все будет транслироваться в байт код/виртуальную машину/ассемблерное представление? Или это будет транслироваться на кресты?
>>1809897 При чем тут ядро ОС.? У меня есть обычные программы на Java и я этим калом пользуют только сдерживая рвоту от безысходности отсутствия альтернатив. Если бы весь софт был на Java я бы просто повесился или отказался от использования компьютеров, потому что моя психика дороже.
>>1809970 Ссылка является частным случаем указателя. Когда передаешь объект в параметр функции, то передаешь его по ссылке. Использование ссылок в этом случае отменяет проверку на валидность указателя. Почему? Т.к ссылка указывает на существующий объект. Будешь брать ссылку из голого nullptr - получишь ошибку на этапе компиляции.
сохраняю, например, в файле hi.c Затем в терминале выполняю команду: gcc -nostdlib -o hi hi.c В ответ, конечно, получаю предупреждение /usr/bin/ld: warning: cannot find entry symbol _start; ...
Но почему после этого исполняемый файл hi всё равно весит примерно 13 килобайт?
>>1810082 Если так интересно, можешь ознакомиться со статьей: https://habr.com/ru/post/88101/ Мне всё-таки интересно, куда тебе размер уменьшать-то? Может другой компилятор попробовать стоит или поиграться с оптимизацией (только что в этом коде оптимизировать..., нужно рассматривать примеры побольше)? То смотри и поменьше размера добъёшься.
Выглядит неплохо! Мы уменьшили размер до значительно более вменяемого (аж на целый порядок!)…"
Тут >>1810049 абсолютно идентичная команда выполняется "gcc -nostdlib -o hi hi.c" Но размер исполняемого файла не уменьшается, как это происходит в статье.
>>1810127 Обсуждалась не передача обычных типов, а конкретно объектов. С теми же самыми структурами в Си приходится работать? - Приходится. Производится проверка на передаваемый указатель на структуру: эквивалентен ли полученный указатель NULL-у? Понятное дело, что такого рода проверка нужна для избежания ошибки сегментирования. При ссылке не пришлось бы этого делать, код стал бы занимать меньше места (ещё +1 в пользу ссылки).
Ранее упоминалось, что ссылка - частный случай указателя. Значит при изменении значения внутри функции передаваемой по ссылке переменной, значение вне функции будет также меняться.
>>1810049 Куски ELF выравниваются на страницу, чтобы его удобней мапить в память. Заголовок будет минимум страница. Дальнейшее зависит от кунпелятора и архитектуры. clang -m32 даст файл чуть больше страницы.
>>1810210 Ты разыменовываешь nullptr и передаешь его, естественно будет неудачное завершение программы. Я говорил о другом. Допустим у тебя есть структура, тебе её нужно передать в функцию. Если ты передаешь по указателю, то тебе придётся делать проверку на nullptr (для устойчивости функции), если ты делаешь проверку по ссылке - проверку такого плана делать не придётся. В твоём случае ссылка верна - компилятор не ругается, но ссылка указывает на неинициализированный объект, поэтому обратиться к полям объекта не получится, в следствие чего ловим ошибку сегментирования. Всё правильно я сказал, подумай сначала, перед тем, как что-то писать.
>>1810263 >Если ты передаешь по указателю, то тебе придётся делать проверку на nullptr (для устойчивости функции) Я тебе показал что в случае с ссылкой то же самое - я спокойно передал nullptr, значит тебе надо делать ровно такую же проверку. > обратиться к полям объекта не получится, в следствие чего ловим ошибку сегментирования. Опять же я тебе показал что программа обратилась к неинициализированному полю без всяких ошибок сегментации.
>>1810284 Ссылка указывает на указатель, в то время как указатель указывает на неинициализированный объект. Этого объекта в памяти нет. Какое-либо изменение, обращение к объекту приведет к ошибке сегментирования. Ты сломал логику иным путем, а вот теперь попробуй передать ссылкой невалидный указатель напрямую. Так не получится.
>>1810285 Я тебе уже все показал. Я разыменовал nullptr прямо перед ебалом компилятора и он никак не среагировал. Nullptr никак тебя не защитит. Если ты напишешь свою библиотеку которая в функциях принимает ссылки, ей точно так же смогут передать указатель. Поэтому тебе все равно придется проверять на NULL если ты печешься о "непадучести".
>>1810285 > Ссылка указывает на указатель Ссылка на разыменование указателя тождественна этому указателю. Указатель может быть 0. Эрго, можно передать 0 в качестве ссылки. Шах и мат.
>>1810303 Да, это так. Компилятор не может проверить адрес объекта. Вся защита ссылок от того чтобы они не были nullptr - проверки типов чтобы ты не мог вместо ссылки присвоить nullptr или передать его в качестве ссылки. Во всем остальном все хаки будут работать. Можешь 0 передавать хоть с ассемблера в код крестовый который принимает ссылку и все будет дружно падать, а ссылка будет 0.
>>1810360 Чел, ну зачем ты продолжаешь позориться? Ты вообще не понимаешь зачем ввели nullptr. Если бы он, как ты говоришь, проверялся в компайлтайме на присваивание какой-то ссылке (а он не проверяется, как мы видели выше), то есть он в константном выражении, то и присвоение NULL (Someref& = 0) так же легко отлавливалось и никакой nullptr для этого не нужен. nullptr как отдельный в плюсах введен по двум причинам: 1) перегрузка функций (foo(NULL) вызовет foo(int) а не foo(some*)) 2) шаблоны (аналогично, some<NULL> развернется в some<int>, а не some<some_ptr_t>) Но - в Си нет ни того, ни другого! И снова nullptr не нужен.
>>1810409 Я только про плюсы писал. Кстати там ходят слухи про шаблоны и перегрузку функций в Си, и что их могут и добавить, тогда и твои причины будут касаться Си, и можно будет о nullptr говорить.
>>1810407 >Тогда почему тут 139? Потому что это ёбаный эмулятор. Кто ж тебе даст запускать реальные бинарники на сервере? Попробуй локально в консоли выполнить - словишь Segmentation fault. Core dumped. Или ""Программы выполнила недопустимую операцию и будет закрыта.".
>>1810415 Какой эмулятор? Ты про sandbox слышал? Оно и на godbolt упало. 139 кидает оно в любом случае, с любым кодом там если процесс падает в сегментацию.
>>1810421 >И давно так? Возможно что-то в нулевой странице висит с отрицательным значением, оно оттуда тянет результат и отдает. На линуксе страница по адресу 0х00000000 не замаплена в процесс и ее убивает ядро. Это сродни тому чтобы полагаться на возврат локальных переменных по указателю. Вроде и работает, а вроде и не должно.
>>1810420 А по-моему это нормально когда ОС имеет адекватное поведение. И если программа полезла не туда куда надо - она не продолжила исполняться дальше, а была остановлена операционной системой. И с какого хуя разыменовывание nullptr это вообще адекватно?
>>1810424 Нет связи между nullptr (или NULL) и адресом 0x00000000. Может быть виртуальная память. Может быть микроконтроллер у которого адрес 0 это вектор прерываний.
>>1810457 это и коню понятно. да и полюбому адресу не даст - ОС обязана пресекать все попытки обращения к любому адресу, не отображённому в адресное пространства процесса.
>>1810452 Тебе расписали один из вариантов UB. Странно отрицать что если NULL или nullptr подставляют зачастуюпро магические указатели по типу 0xDEADBEEF мы все помним при запуске всяких меморичекеров 0 значение, и если попытаться их разыменовать в указателях, то код будет содержать команду обращения к памяти по 0 адресу. Дальше дело железа и ОС
>>1810623 Долой безопасность! Делай (int )0x7CFF5051 = 666; во славу Ленину, чтоб ебнуть ОС и все запущенные приложухи! MMU зло! Коммунизм памяти! Каждой программе по потребностям!
>>1788067 → >Забугром эмбедщина >Quallcom, Mellanox, Marvell, Nvidia, Xilinx, Tesla Речь идет про рядового анона, либо без во, либо закончившего говновуз, которые забугром нафиг не кому не нужны даже с 10 годами опыта. Поэтому если выбирать из работы в России: прогать микрики, как даун, или стать веб-разработчиком, очевидно выгоднее выбрать второе. Можно как завести трактор в ДС, так и перейти на удаленку, фриланс, когда прогером мкк будешь всю жизнь сосать за 30-40к максимум при работе оффлайн 5/2.
>>1788546 → >Причём настолько, что любой человек с опытом 3+ лет на этом самом эмбедеде может спокойно ехать в какую-нибудь Германию или Францию на 4-5к рейхсмарок ежемесячно, Но реальность такова, что типичный байтоеб из НИИ, не закончивший топ вуз в дс, будет пахать за 20к-30к и ни в какую германию и францию не уедет, потому что он там нафиг не нужен. В то время как веб-разработчик даже в рахе может получать эквивалент 2-3 рейхсмарок через пару лет работы и работать на в разваливающемся заводе или нии, а в крутом офисе с печеньками и кондиционером со свободным графиком.
>>1795877 → > не одними деньгами, анонче. Есть ещё то, что у тебя в мозгу и душе. Угу, пока норм прогеры уже и квартиру в новостройке/жилье купят, машину, и семью заведут, ты будешь ездить на работу на жигулях микросхемы паять и жить с мамкой, зато ДЛЯ ДУШИ работаешь, лол.
>>1810975 >ни в какую германию и францию не уедет, потому что он там нафиг не нужен. Потому что ссыт боится и ленится. А съездить на пару лет не помешало бы. Культурный обмен и всё такое. Копеечку заработать чтобы стать дома на ноги. Почему нет?
>>1810976 А ты хоть жилье купил? Думаю язык Си обеспечит шансами на светлое будущее ещё не одно поколение инженеров-программистов. Все равно любой boot код писать проще на нем. Какой бы вы раст не хотели юзать или С++ для написания ядра, костяк все равно будет на Си. Тонна устройств которые имеют прошивку написанную Си - носишь mi band? Прошивка на Си. Фитнес трекер не на айос/ведре - тоже на Си написано. Юзаешь дома игровую приставку - на геймпаде и консоли прошивка написанная на Си вероятнее всегоили asic в геймпаде, не изучал точно. Юзаешь клаву USB или мышь? Тоже прошивка на Си. Куда не глянь, а он нас все равно окружает. И это охуенно. Ну и да, зачем оставаться в РФ? Аргумент "ты там не нужен"? Смешно. С таким же подходом можно сказать - а зачем вообще кто-то нужен в России? Правительству нужна труба, нужны месторождения, остальные просто мешают им обогащаться.
>>1810972 Дружище, ты продолжаешь срать писать в этом треде, агитируя всех вступать в ряды WEB-разработки. Напоминаю, ты намеренно приходишь в Си-тред и, затрачивая свое личное скорее всего время, делаешь это.
Я у тебя попрошу совсем немного. Я не буду тебя стебать, троллить и т.д., мне чисто интересно. И так, что тебя мотивирует это делать? Какая у тебя мотивация? Что тобой движет? Какая цель этих действий? Ну и попрошу тебя рассказать о себе в двух словах, а именно - прости за нескромный вопрос, твой возраст и род занятий (если софтваре инжиниринг, то какой).
Ну... Либо же ты просто тролль, которому просто нечего делать.
>>1811078 > Дружище, ты продолжаешь срать писать в этом треде, агитируя всех вступать в ряды WEB-разработки. Ну да, а тебя ебет? >Напоминаю, ты намеренно приходишь в Си-тред и, затрачивая свое личное скорее всего время, делаешь это. Ну да, а тебя ебет? > Я у тебя попрошу совсем немного. Я не буду тебя стебать, троллить и т.д., мне чисто интересно. И так, что тебя мотивирует это делать? Какая у тебя мотивация? Что тобой движет? Какая цель этих действий? А тебя ебет? > Ну и попрошу тебя рассказать о себе в двух словах, а именно - прости за нескромный вопрос, твой возраст и род занятий (если софтваре инжиниринг, то какой). А тебя ебет? 26 ЛВЛ, курьер в Delivery Club > Ну... Либо же ты просто тролль, которому просто нечего делать. А тебя ебет?
>>1811090 >>1811104 Не понимаю вашего копротивления одному человеку, когда весь тред полон таких же.
Псмотри >>1810623 , а потом на ответы. Дебики даже не поняли написанное, отсутствует понимание что такое компьютер, и как следствие что такое программирование. Рассуждают с позиции мобилки или веб-браузера, будто си это такой джаваскрипт, только более быстрый и со своими замутами. Просто сейчас одни веб-дебилы везде и есть, не в смысле что они пишут на хтмл, а в том, что отношение к программированию именно такое. А какой конкретно язык они для этого используют, какая разница.
>>1810293 Ссылка в твоём случа же корректна, невалидным явл указатель, как ты хочешь проверять невалидность объекта?
И о чём у нас спор? О том, что понятие ссылки в Си будет ненужным? Тогда зачем ссылки были добавлены в кресты? Почему рекомендуют передавать по ссылке, когда имеется возможность, а не по указателю? Давай, давай, нападай, раздави меня полностью своими железеными аргументами.
>>1811352 >Почему рекомендуют передавать по ссылке Это кто?
>>1811314 >Дебики даже не поняли написанное Уйди остюда в спешке. Ты же глуп и не представляешь как работает MMU. При этом выкручиваешься, заявляя что Shared Memory не нужна. А вот своим последним постом ты вообще расписался в том, что ты биомусор - в ответ на резкие, но справедливые замемечания, ты полез в бочку. То, что ты чего-то не знаешь, это поправимо, но твоя реакция на указанные тебе ошибки с головой выдаёт в тебе тупую биомассу. Сдохни, наверное. Сделай мир чище.
Или обоснуй ненужность MMU, чтобы хоть как-то оправдать себя в глазах шарящх анонимусов.
Спор начался с твита человека, описывающего что он хотел бы добавить в ЯП Си. Я написал, что хотел бы видеть ссылки. Какой-то анон на меня напал и начал строчить (видимо другие предложения в твите он одобряет с барского плеча). Твит находится в начале треда.
Я так и не понял, мой "противник" топит за ненадобность ссылок или их бесполезность в Си. Задал вопрос - пока ответа нет, может очухается и ... ответит.
Я ему даже приводил ситуацию, в которой, я считаю, уместнее было бы воспользоваться ссылкой (во избежание проверки на NULL).
На текущий момент пребывания в этом треде складывается мнение, что те времена, когда сишники были своей небольшой и уютной компанией, канули в лету (надеюсь, что ещё будет искорка надежды).
Столько агрессии в треде, даже в жизни столько не видел.
>>1811352 Компиляторы С++ имплементят ссылки через указателину и открытие, да?, без особых валидаций. Стандарт не требует рантаймовых проверок ссылки на nullptr. Так что все поведение в принципе возможно, хотя и является UB. Да и в принципе избегать и обрабатывать UB в С/С++ это задача программиста, компилятор зачастую только рад подкинуть дров в огонь Если ещё добавить к тому что ссылки в С++ не имеют адресной арифметики. То наверное единственная польза от ссылок аля С++ в языке Си - синтаксический сахар, чтобы везде не писать разыменования указателя, а делать это просто по обращению к идентификатору. Может вы ещё какие-то пользы подкинете, но с текущей реализацией которую можно слизать - пользы реально мало выходит. Либо надо все в куче переносить, с шаблонами и перегрузкой. Либо совсем нинужно.
>>1811314 >Дебики даже не поняли написанное О великий анон, расскажи же нам, непосвящённым и тёмным, зачем везде и всюду в многопользовательские ОС вставляются MMU, и делается защита памяти и запрещается запись в память другой программы, а межпроцессное взаимодействие сводится к посылке сообщений через shared очередь и передаче данных между сокетами
>>1811386 Здесь у нас свободное общение. Ты можешь писать агрессивно, а можешь писать как лох ибаный и мямлить. В жизни ты столько агрессии и не увидишь, мы людоеды только на этом сайте Противники топят за то, что ссылки в С++ кривые и уебищные, и чем такое пытаться переносить - лучше сидеть с указателями, которые дают тебе весь карт-бланш. Тебе сверху по ссылкам показали что никаких проверок на null избежать не удастся. И ещё, например, чего стоит олдовая шутка с ссылкой на локальную переменную, смешно, но работает - и является вовсе пиздецом. gcc насколько взбугуртнул от подобного что эту ссылку возвращает всегда 0 константой, мягко говоря запрещает подобное, да. А вот msvc и clang выдают рабочий код Итог - чем такие ссылки, лучше с указателями ебаться.
>>1811386 >Спор начался с твита человека, описывающего что он хотел бы добавить в ЯП Си. Чел, ты... Он не хочет ничего "добавить" в ЯП Си, это ирония такая была над тем как комитет извращает фичи из с++ когда добавляет их. > Какой-то анон на меня напал На тебя никто не "нападал", ребенок, ты начал нести ахинею что ссылка защищена от присваивания nullptr, на что тебя обоссали с пруфами, приведя листинг в котором ссылки не запрещают никакие присваивания nullptr. Просто съеби куда нибудь в страхе.
>>1811407 Он "сломал" ссылку другим способом (при котором сама ссылка корректная, а объект - нет). Ссылка защищает от явной передачи nullptr. Если передаешь по указателю, то nullptr можно передать в ЧИСТОМ ВИДЕ. Со ссылкой такое у него не получилось, хотя я попросил его предоставить такой пример. А знаете почему? Потому что ссылка должна указывать не реально существующий объект. Кто ещё обоссан? С чего такие резкие выводы?
>>1811412 >при котором сама ссылка корректная, а объект - нет Что за хуйню ты несешь? В общем тебе уже все объяснили. Ссылка защищает от конструкции MyStruct& ref = nullptr и от конструкции foo(nullptr) Так просто не будь дауном и не пиши так. Это совсем нетрудно, это личералли два слова рядом, а не какие то сложные конструкции, которые надо искать по всем файлам. Больше ни ссылка ни nullptr ни от чего не защищают. Когда твою функцию foo(&) вызовут так ptr=NULL;foo(ptr) никакая защита не поможет и твоя функция упадет Поэтому тебе ВСЕ РАВНО придется проверять то что тебе передали по ссылке на NULL, если ты не хочешь чтобы твоя функция падала.
>>1811422 А нужно рассмотреть все случаи. Чтобы принимать какую-то вещь правильно. Принимая закон в государстве, не рассматривают же его только с одной стороны?
>>1811423 Но я изначально указал пример, который мы рассматриваем (передача структуры в функцию, проверка указателя на nullptr). Спор не про то, что лучше: указатель или ссылка, а про то, что мой оппонент утверждает (пусть и не явно), что ссылки бесполезны. Зачем же тогда были введены ссылки? - рит.вопрос. Я не могу полагать что такие языки, как C и C++ будут забивать ненужным г*вном. Значит всё-таки применение ссылочкам-то нашлось. Вариаций решения проблемы может быть много, выберите то, какое вам по душе. Вечно эти споры программистов (или ещё личинок) в интернете ни о чём. Может закроем тему?
>>1811419 И про это тебе уже поясняли - для этого никакой тип nullptr заводить не нужен, компилятор ровно так же может обнаруживать передачу обычного 0.
>>1811429 Когда обрабатываешь разные по типу параметры, то приходится функции копировать. Насколько мне известно, дубляж очень схожих или даже эквивалентных кусков кода является плохим тоном. Языку нужно как-то развиваться и не стоять на месте. Можно предположить, что Си пойдет по какой-то из нижеперечисленных дорог: 1. Не перенасыщен функционалом, но при этом безопасный язык. 2. Большой функционал, по безопасности остаёмся на этом же уровне.
Сугубо мне сипатичен 1-ый вариант. Большой функционал и определенная совместимость с Си есть у крестов. Пока хватает.
>>1810442 >разработчики MSVC просто ебанулись или победил скриптовый мир, в котором консольному приложению не нужно показывать окано "Программа выполнила недопустимую операцию и будет закрыта."
>>1811471 > embedded Не огорчайся. Со временем это всё отсохнет и отомрёт. Не совсем, конечно, но выродится в какую-нибудь гильдию писателей прошивок для маяков или чего-нить подобного. Короче, выродятся в секту.
>>1811518 Раз думаешь так, то изволь предположить и написать своё мнение о дальнейшем разивитие обсуждаемого ЯП. Небольшое условие: мы заведомо отменяем ту ветвь разгвора, что язык не будет развиваться или даже умрёт. Только вперёд, ни шагу назад!
>>1811541 Моё скромное мнение: легко может не состояться - Докинут в стандарт пару функций. Видел про strdup и strndup - Добавят в стандарт языка bool, true и false, и не будет больше ебли с числамине, она безусловно останется, но будет считаться дурным тоном или старым кодом - nullptr добавят чтобы не тянуть макрос с приведением типа к универсальному указателюNULL короче сделают deprecated - Систематизируют все эти __attribute__, __typeof__ может добавят. - Видел ещё хотят добавить __attribute__(cleanup(func)) в стандарт как оператор defer, хорошая затея, приходится его макросить нынче. Весьма полезная штука, позволяет на Си сделать подобие RAIIне в полной мере, передачу владения сделать никак нельзя, но освобождать ресурс по выходу из функции - на ура - Может докинут в стандарт __attribute__(constructor(ctor)) и __attribute__(destructor(dtor)). По сути одно ранится перед стартом приложухи, второе atexit по сути. - Из спойлеров нового стандарта - есть предложение описать работу со знаковыми числами и дополнительным кодом, и описать правила переполнения чисел знаковых, минус 1 UB, и это наверное единственное что касается улучшения безопасности кода. Какую-то часть из этого может докинули в c11
>>1811563 Язык Си пытается быть как можно ближе к железу. Текущие строки как можно ближе. Вряд ли они будут что-то менять а их представлении. Максимум добавят ещё каких-то функций для работы с ними, если захотят кончено же.
>>1811572 Устройство строк можно было бы и не менять, хотя тоже неплохая идейка. Вот новые ф-и добавить действительно уже хорошо, а также усилить безопасность уж имеющихся.
>>1811582 > Паскалевские строки настолько же близки к железу, насколько и сишные. По-моему единственное чем там от Си отличается - перегрузка "+" в конкатенацию строк. Но я с Паскалем вообще не работал. >>1811584 Устройство строк делает их легко переносимыми на любой тостер. Если функций добавить и можно, то каких? В голову приходят только для работы над unicode. Впрочем, у меня в проекте свои строки используются с динамической аллокацией, и я не капли не парюсь по этому поводу.
>>1811582 В паскалевских строках первым байтом идет ее длина, емнип. Что дает безопасность, которой в си строках нет, но делает всякую конкатенацию посложнее.
>>1811657 В си ты бы просто циклом копировал вторую строку на место первого NULL-терминатора, до первого встреченного NULL. В паскале тебе придется выделить новое место.
>>1811669 >В паскале ещё и ограничения на 255 символов Это в классическом. Сейчас накидали новыйх типов. А пока Delphi гуляла по рукам, сделали по умолчанию string с бОльшим количеством байт. И добавили ключи компиляции, управляющие этим поведением.
>>1811709 Vala и D скорее с++ - там есть ооп, функциональщина и т.д. Zig - простой язык в духе си, минус сишный препроцессор, вместо которого есть comptime, т.е. constexpr, на них же получаются дженерики, также есть defer некое подобие деструктора для raii, обработка ошибок нечто среднее между исключениями и optional типом (err, result), async await, и легкая интеграция с Си либами из коробки.
В сишке одно из главных требований - обратная совместимость. Не ломая обратной совместимости, не убрать основныых граблей. Потому "расти в сторону безопасности" она может очень ограниченно. На самом деле, тебе уже сейчас никто не мешает делать рантаймовые проверки выходя за границы массивов. Более того, во многих арзитектурах это уже делается(каждый вызов маллока выдаёт кусок памяти на новой виртуальной странице, выход за её границе будет пойман механизмом виртуальной памяти).
>>1811736 >Zig - простой язык в духе си, минус сишный препроцессор, вместо которого есть comptime, т.е. constexpr, на них же получаются дженерики, также есть defer некое подобие деструктора для raii, обработка ошибок нечто среднее между исключениями и optional типом (err, result), async await, и легкая интеграция с Си либами из коробки. Ну и что это даёт?
>>1811791 Как известно в с++ три разных языка - сам с++, макросы си, и шаблоны. Сишные макросы на подмене текста вообще зло, и при этом довольно слабые по возможностям. В зиге это все работает на одном языке. Defer означает что ты пишешь код инициализации чего-либо и тут же под ним код деинициализации - не надо скролить по десяткам файлах в поисках этого и путаться в лапше вызовов. Обработка ошибок в сишке это всегда лотерея, угадывать куда там в errno записали или вернули 0 это успех или 1 это успех. Единый механизм это хорошо. Плюс он заставляет тут же switch обработать все ошибки - не забудешь проверить что файл не открылся.
>>1807650 (OP) Поясните нубасику. Есть библиотека и в ней надо объявить глобальную переменную(да, их надо применять в крайних случаях, но иногда они необходимы). Я правильно понял: 1)в файле library.c пишем: uint8_t var = 0; 2)в файле library.h пишем: uint8_t var; 3)в main.c подключаем хеадер либы; #include "library.h" 4)а если переменная var должна быть доступна в other_librari.c без подключения хедера, тогда в ней пишем: extern var:
>>1811861 > 1)в файле library.c пишем: > uint8_t var = 0; Да. > 2)в файле library.h пишем: > uint8_t var; Нет, extern uint8_t var; > 3)в main.c подключаем хеадер либы; > #include "library.h" Да. > 4)а если переменная var должна быть доступна в other_librari.c без подключения хедера, тогда в ней пишем: > extern var: Вроде так. Но лучше включать заголовочник
>>1811078 >Я у тебя попрошу совсем немного. Я не буду тебя стебать, троллить и т.д., мне чисто интересно. И так, что тебя мотивирует это делать? Какая у тебя мотивация? Что тобой движет? Какая цель этих действий? Потому что я уже наступил на эти грабли, и не хочу, чтобы другие тоже попали в эту ловушку. >Ну и попрошу тебя рассказать о себе в двух словах, а именно - прости за нескромный вопрос, твой возраст и род занятий (если софтваре инжиниринг, то какой). 25 лвл, прогаю микрики.
>>1811912 > интернет вещей помойка говна > и эпоха web3.0? Эпоха подкатов на штанах, клубничного смузи, моноколес и гироскутеров, жидких бородок и андеркатов, миллиона библиотек, typescript, babel, gulp, d3, npm, jest, angular, react, vue, и прочего говна для пидорасов, миллиарда вкатывальщиков и знакомых которые "ха, я сча вот джаваскрипт учу, устроюсь программистом и буду 20к рубать на изян, а ты как %аноннейм% поживаешь?". Фу блять, мерзко.
>>1807650 (OP) А можно сделать так? К библиотеке 1 подключить хедер библиотеки 2, а к библиотеке 2 подключить хедер библитеки 1? Т.е. встречно включить хедеры. И как тогда хедеры библиотек подключать к main.c? Описал и нарисовал немного сумбурно, но суть думаю вы поняли.
>>1812087 Такого кода не может быть, рекурсивное вкладывание структур лишено какого-либо смысла, и не может быть реализовано нигде и никак. А если там указатели, то такие forward-декларации, как у тебя, отлично решают проблему. Это нормальный подход, или можно так же тайпдеф запилить.
>>1812121 Естественно код был условный. И естественно чтобы решить проблему надо знать о форвард декларейшнах. О том и было сказано - надо продумывать зависимости. Хуй знает с чем ты поспорить решил.
Подскажите, пожалуйста, почему fgets нихуя не хочет считывать. https://onlinegdb.com/r1hNQ8USw Я вычитал, что проблема в сканфе - я избавился от сканфов, но по-прежнему считывается только первый инпут.
>>1812794 Если я правильно понимаю код, то ты создаёшь на стеке массив из 2 структур, внутри структуры 2 массива char, по 20/25 символов. Данные в стеке могут быть заполнены мусором. Ты от этого мусора считаешь strlen(), и пытаешься от высчитаного считать символы в stdin. В вызовах fgets вызов функции strlen поменяй на 20 и 25 соответственно, вроде должно будет работать.
>>1812815 Забыл добавить это прям известный всем факт - strlen() и strnlen() считают длину фактической нультерминированной строки в каком-то буфере. У тебя же в строках был мусор. Тебе же надо было считать длину буфера, ведь именно ее запрашивает fgets вторым аргументом. Если буфер выделен статически или на стеке - можешь заюзать sizeof(buffer)/sizeof(buffer[0]) Если динамически в куче - изволь самостоятельно трекать что в malloc передал. Ещё есть gcc расширение на выделение на стеке динамических буферов и alloca, но это маньяк-style
>>1807650 (OP) Программирую контроллеры на Си. Решил привести прогу в порядок - разбить на несколько .с и .h файлов. Проблема заключается в том, что большинство *.с файлов обращаются к переменным, которые находятся в UNION. Каким образом мне правильно объявить union как extern, чтоб иметь доступ к переменным union?
>>1812911 Все работает как с переменной. Можешь заюзать страшные макросы типа сверху или просто ебнуть в си файл: union { //fields } my_union; И в заголовочник: extern union { //fields } my_union; Везде добавляешь заголовочник, появляется в видимости юнион из другого юнита компиляции. Надеюсь у тебя нету там каких-то трюков с ним, в union хватает подводных камней и UB, и не знаю как это может отразиться на работе с extern
Привет, анон. Есть два вопроса: 1) Можно ли как-то кастить поинтеры (причем любого порядка) в простые значения? Знаю, что есть ptrdiff_t, но желательно обойтись без него. 2) Нужно передать в функцию лист аргументов неопределенного размера. Причём тип аргументов может быть как символьный указатель, так и указатель на объект иного типа, или (вытекает из первого вопроса) просто long long int. Ничего иного кроме https://pastebin.com/wTMeN8Lm мой моск пока не выдумал.
>>1813098 1. Берешь и кастишь. Хотя задача странная какая-то раз тебе нужно числовое значение указателя. 2. Заведи структуру список отдельную, и пили функции для работы с ней, конец списка - элемент NULL. И передавай его как 1 аргумент. Это вариант если тебе стек жалко. Если не жалко или список будет не слишком большой - va_list и функция с ... аргументом.
Как вкатиться в имбед ньюфане? Знаю СИ(стандартные библиотеки только) довольно неплохо знаю С++(очень много библиотек и функцонала весь не знаю конечно, но могу на нём писать).
Знаю популярные алгоритмы: пузырёк, всатвка, слияние, быстрая и подобные.
Что ещё нужно изучить? Где искать вакансии для вкатунов в имбед?
>>1813749 Как мне кажется - для эмбеддеда нужно больше знать особенности микроконтроллеров и разные технологии по типу spi, i2c, uart как работает и прочее. Ну и быть хорош в схемотехнике, понимать базово какие-то электронные моменты. Шарить в RTOS, и просто в написании софта для baremetal.
>>1807650 (OP) > Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Подскажите, есть один параметр который передает аргументы напрямую в clang, стоит ли так засовывать Ofast? Или O3?
>>1813763 Это была очень плохая идея в одном посте спросить "как вкатится" и за вакансии. Универсальное правило - вкатывайся до тех пор, пока тебе на начнут спамить хеадхантеры. И вот на этом уровне работа тебя найдёт.
Был бы работодателем, сразу бы скомкал твоё резюме . У меня нет ресурсов чтобы тебя обучать.
Сколько в универах изучают теорию Си и сколько уделяют практике время? 4 часа в день учить теорию реально совместно с 2 часами практики эдак 4-2? Или 2-2 оптимально?
>>1813829 Несоответствие тематике треда, рекомендуется выдать условное предупреждение. Рекомендую в дальнейшем не покушаться на определённую анонимность участников форума. Благодарю за внимание, Аноним!
>>1813936 Хах, если бы хоть кто-то изучал так. А по факту - забей на это все, измучаешь себя темпом не своим, потом забьешь и будешь ненавидеть. Читай и изучай, практикуйся сколько можешь, а если надоедает - отдыхай столько, чтобы интерес опять появился. Будто в этом что-то есть непонятное вообще
>>1814022 Ты прав тут. Для инфы скажу что не начинаю изучать, уже знаю все об поинтерах, решаю задачки на кодеваре, думаю алгоритмы изучать начать с математикой, ибо нравится. Вот сегодня сидел весь день и изучал строковые функции по учебнику Праты, но я успел только повторить и завтуплять над книгой но таки понять как работает strcmp и написал пару программ. С утра правда еще рефактор задачки сделал. А щас думаю что не потяну. Вчера не отдохнул сидел над задачей и туплю сижу. В общем 2 часа теорий буду. Кстати еще слышал от кого то что практики должно быть 90% а теорий 10%. >>1814032 Оки.
>>1814038 правильно слышал, практики всегда должно быть больше, я вообще делаю так - 1 час залипаю в того же прату, 2 часа кодирую, и один час тупо учу инглиш план уберчеловека
Вкатываюсь в ламповый (надеюсь) тред. Что в 2020 году пишется на С кроме операционных систем, драйверов и прошивок для микроконтроллеров? Я хотел бы писать как можно больше кода на С для того, чтобы очень хорошо понимать его (хотя основные концепции языка вроде указателей и структур я осилил), но хочется выйти дальше хэллоуворлдов в юзерспейсе. Сейчас я программирую под STM32F103C8T6 - если, конечно, дергание ног и посылку самых разных данных в логический анализатор по UART и I2С можно назвать так.
Проблем, на самом деле, никаких, берешь себе в помощь скриптопарашу по вкусу (проще всего луа и пидон) , подключаешь, на С рендер и низкоуровневые кишочки систем, на скриптопараше - всё остальное.
>>1814085 >Сейчас я программирую под STM32F103C8T6 - если, конечно, дергание ног и посылку самых разных данных в логический анализатор по UART и I2С можно назвать так.
Ну то есть ты сракотан тамошними таймерами и их режимами и множителями еще себе не порвал? И даже USB девайс не написал, хоть это даже червекореш Хластер сделал?
>>1814150 Так тебе он не нужен, тебе нужно имеющийся на плате usb задействовать, а программировать и отлаживаться через STLink v2, который ты и должен был купить себе вместо USB-Uart.
>>1814162 > тебе нужно имеющийся на плате usb задействовать Это уже я понял по сказанному выше. > программировать и отлаживаться через STLink v2, который ты и должен был купить себе вместо USB-Uart STLink v2 я как раз и юзаю для прошивки, а переходник я заказал затем, чтобы запилить устройство, которое можно будет подключить к пекарне по USB.
>>1814145 Та че прям сракотан разрывают таймеры? Не, если сразу сесть и педалить - то да, а если почитать и потом уже их "ковырять", то нихера не разрывает, лол. Вообще, таймеры на стм32 мне пиздец как зашли. Шо хош на них можно сделать.
>>1813098 > Можно ли как-то кастить поинтеры (причем любого порядка) в простые значения uintptr_t > Нужно передать в функцию лист аргументов неопределенного размер Да, все делаешь правильно, но обычно это делают через массив struct { int tag; union { type1 v1; type2 v2; type3 v3; type4ptr v4; }; }, где тег указывает тип.
>>1814245 Обычные таймеры там. Если есть предшествующий опыт с таймерами, хоть с 8254, то никаких проблем не возникает.
>>1814529 Хммм... Анон, я чутка в замешательстве. А вот если нужно загенерить, например, ШИМ или измерять импульсы там? Ну да, это таймеры стм32 умеют.
>>1814594 > ШИМ или измерять импульсы там? По хорошему это должы быть пару портов в микроконтроллере - в один пишешь частоту дискретизации, со второго читаешь значение широты импульса.
Через таймеры это как микроскопом гвозди забивать. Сообщениями можно тоже читать ШИМ, но это так же криво, как и таймерами.
>>1814638 От тебя это не зависит. Они как в анекдоте про старого и молодого быков - медленно, важно и с достоинством спустятся с холма вниз и покроют всё стадо.
>>1814661 Если ты намекаешь что захватят все ОС микроядра - дрочи у батареи о своей маняфантазии, хуй вам собакам на рыло с говноидеей, вам бы на джаваскрипте понаписывать гондонкода и операционку на реакте переписать, знаем вас пидрил долбоебских. Если хочешь пороться в жопу с низкой производительностью - проследуй на парашу, говно.
>>1814719 Какая илита нарисовалась. На микроядра дрочит бесполезные. Когда у тебя десктоп будет работать на полноценном микроядре - приходи. Про макос втирать не надо, там сервисом стартует бсдшное ядро и вертится как большой монолит поверх mach. Иначе перфа нету. Весели нас дальше, ебантроп.
>Иначе перфа нету. Ты сам-то хоть мерял? Или веришь Торвальдсу? Что до десктопа, то когда линуксы на десктопе хотя бы близко сравнятся по отзывчиваости GUI с Windows, тогда приходи.
>>1814599 Анон, в STM32 таймеры умеют в ШИМ "искаропке". Т.е. "руками" ничего делать не нужно, кроме настройки-инициализации.
Там прямо есть режим, который в документации так и называется "PWM". Все, что нужно сделать, это настроить нужный канал таймера на выход, задать частоту этого самого ШИМ, задать duty cycle, запустить таймер (бтв, задаётся это в 4 если не проебался регистра, лол; хочешь - можешь вообще взять hal но он слегка странноват и говноват, там надо будет дернуть пару функций и все). Все.
>>1814743 >настроить нужный канал таймера на выход, задать частоту этого самого ШИМ, задать duty cycle, запустить таймер (бтв, задаётся это в 4 если не проебался регистра, лол; хочешь - можешь вообще взять hal но он слегка странноват и говноват, там надо будет дернуть пару функций и все). Все.
Ключевой вопрос в том, как используется таймер. Генерирует ли он прерывания и суть этих прерываний. Всё остальное вторично.
>>1814744 Если не включать прерывания в режиме генерации ШИМ, их, соответственно, не будет. Т.е. таймер будет генерить ШИМ э самостоятельно, без вызова прерываний т.е. сама "железка" таймера будет это делать, как бы в фоне, без участия программы.
>>1814751 Против таких таймеров таймеров я ничего не имею. А вот прерывания от таймера это зло. Пока ещё необходимое, но зло, от которого надо избавляться.
> Ты сам-то хоть мерял? Или веришь Торвальдсу? Да, есть бенчи, тестят производительность ядра. Скорость обработки системных вызовов. Все микроядра сосут в них. > Что до десктопа, то когда линуксы на десктопе хотя бы близко сравнятся по отзывчиваости GUI с Windows, тогда приходи. Мне отзывчивости wayland и kde5 хватает, делаю ещё nice по процессу композитора, очень отзывчиво работает все. Так что я тут, пришел уже. Что ещё скажешь, мразь?
>>1814939 >Что плохого в прерывании от таймера? То, что оно асинхронное. Как результат, тебе придётся быстро-быстро его обработать в контексте прерывания, а затем синхронизировать с лругими процессами.
В нвстоящий момент прерывание от таймера нужно только лишь переключения задач, которые не осуществляют никакого ввода/вывода.
Если создам статический массивчик структур и к нему в том же сурце напишу врайт, гет и рид методы, то это сразу всё пиздец, о-о-пэ, слыш говно уебывай в свои кресты)))0)?
>>1815026 Даже за одну мысль о таком - "эээ слыш уебывай в кресты!", не для того штульман и пердолики долбились в сракотан, чтобы ты писал код адекватно.
Наш физический мир и его события в принципе асинхронны, как следствие и логика предметной области тоже.
Альтернатива прерываниям - выделенные специальные контроллеры для каждой из множества задач/событий в духе мейнфреймов IBM 60х-90х, где у каждого сраного принтера и дисковода был отдельный манякомпьютер, который с главным процом общался чисто через каналы.
Собственно, если брать специализированные МК такие как популярный в последнее десятилетие в автомобилях TriCore, то там так и делают, физически разделяя "реалтаймовую" и "умную часть":
>>1815043 Кажется, тот анон пытается сказать что если у него устоявшиеся процессы, то простой скедулер, по типу корутины, чекающий по очереди состояния, будет иметь меньший оверхед, чем переключение контеста в прерываниях, сохранение регистров, вот это все.
Если у него устоявшиеся процессы, то им в принципе не нужна система управления.
В автомобиле вот устоявшиеся процессы - это только если едешь на включенном круизе по трассе и до первого светофора. А в остальное время там пиздула и ахуй -
обороты туда-сюда, частота событий тоже туда-сюда и для всего этого нужно вычислить адекватное топливо вовремя, иначе хуяк - и выстрел в глушитель остатками катализатора, в лучшем случае. А на современном пережатом говне где в почти дизельную степень сжатия еще и дуют турбиной а потом прыскают прямо в цилиндр бензулин - так особенно.
Не, безусловно можно за стоимость всего автомобиля сделать автомотив-грейд аналог разогнанного в щи гиперпыни (автомотив грейд - это когда, напомню, железяка пожар под капотом должна выдерживать, а не в синьку падать на детских 80 - 90 градусах которые на изичах можно получить в подкапотке в жаркий день в пробке), исключительно ради расовой верности и отсутствия прерываний и тогда любой сраный логан и матиз будет стоить как бэха -семерка, а бэха-семерка - как ролс-ройс в комплектации для первых лиц, но кому нахуй это будет надо?
А если речь зайдет о потоках событий не в жалкую сотню килогерц как в авто - а в десятки мегагерц - тогда уже даже рекордных камней под азотом не хватит.
Поэтому шизой любителя микроядер в реальности никто не занимается, а блоки управления делают на TriCore, где по отдельным физическим ядрам разнесены ускоренная програмируемая обработка прерываний и генерик-расчеты.
Ну я и говорю, что бы превратить асинхронные события типа зуба датчика грм/датчика детонации (грм - это, например, классический шкив 50-2 умножить на обороты, детонация - это аудиочастотный спектр от слышимого к ультразвуку и для эффективной обработки нужно сложные вейвлеты быстро гонять на по-сути аудиосигнале) в синхронные и сделать православно на микроядрах и сообщениях - это где-то гиперпыня на 4-5 ггц.
На пятибаксовом чипе я с твоим подходом получу нехуёвый и, самое главное, бессмысленный оверхед, который не даст мне с требуемой оперативностью реагировать на поток событий.
Напомню, шкив 60-2 крутится с частотой вращения коленвала, что дает частоту событий от 59 кгц на холостых до 590 кгц++ на всраку крученном спортивном моторе.
С помощью прерываний и возможностей периферии без труда обрабатывают такой поток на штатных для пятибаксового камня еденица-десятках мегагерц собственной тактовой частоты.
Вот, собственно, фотография платы известного древнего блока, даташит и характеристики МК, который в нем напаян - можешь поискать сам.
>>1815111 >С помощью прерываний и возможностей периферии без труда обрабатывают такой поток на штатных для пятибаксового камня еденица-десятках мегагерц собственной тактовой частоты.
Ты просто не понимаешь с чем ты споришь. Я тебе маленько намекну, а ты уж сам решай.
Они притащили с собой ChibiOS, топовый 32битный STM32 камень и при этом у них всё равно всё это работает намного хуже, чем блок из 90х годов прошлого века на снятом с производства 8-битном МК.
>>1815147 >Сделайте уже спецчип и не партье мозги. Или в ПЛИСину залейте. >И чтобы несколько режимов понимала - Эконом, Город, Трасса, Спорт.
Никто мозги не ебет, всё это с завода работает на заводских мозгах на вот этом восмибитном камне на 16 мгц частоте, даже самые крутильные срако моторы за десятку:
>>1815111 Анон. Я вижу, ты вроде бы разбираешься в automotive, а именно в ЭБУ и вот всей этой кухне.
У меня есть пару вопросов: 1. Какие сейчас самые распространенные МК в данной сфере? C509, так понимаю, уже снят с производства. TriCore знаю, а... еще какие? 2. Возможно ли достать сам кайнд оф отладочные платы на этих камнях где-нибудь? Желательно, у китайцев, по дешману, ггггг. Но, если не - то не. Ну или, хуй с ним, сами МК.
>2. Возможно ли достать сам кайнд оф отладочные платы на этих камнях где-нибудь? Желательно, у китайцев, по дешману, ггггг. Но, если не - то не. Ну или, хуй с ним, сами МК.
Сами камни по дешману можно - так как они суть ходовые запчасти для ремонта блоков. На алике тот же TC1797 за тыщу-300
>>1815164 Для развития конечно. Например, для ДВС энергопотреблением этого контроллера можно пренебречь. А если где-то от батарейки будет работать, то уже всё не так радужно.
>>1815167 Где нужно работать от батарейки - там будет другой микроконтроллер, заточенный на работу от батарейки. Но мы в данный момент говорим за решения для контроля над двигателем.
>>1815198 Ха ха ха. Ну знаешь, если те, кто чтят священную спецификацию L4.X2 это секта, то вы - те, кто идолам поклоняются, да с бубном над исходным кодом танцуют - язычники.
>>1815251 У нас ещё круче. Ща расскажу как у нас происходят встречи любителей микроядер. Мы собираемся у кого-то на квартире. Раздеваемся. До гола, далее мы берём и бреем очко, смазываем качественной смазкой на базе канифоли/спермы бомжа/гнили с дна мусорника. Затем начинаем плеваться в распечатанное фото Линуса Порвальдса. Долго плюемся. Назначаем главного падре данной встречи(скоро узнаешь зачем) с помощью генератора случайных чисел. Потом начинаем подсасывать друг другу хуй и дрочить на скрин mac os xникто не знает почемувсе дело в замашках на микроядерность наверное.Потом мы открываем спецификацию микроядра L4Ka::Pistachio, и начинаем неистово ебаться в жопу, гул стоит на весь двор. Затем заходит главпетух всех микроядер вместе с ручным гусем под руку. В руках главпетуха большой дилдо. Он начинает ебать гуся большим фаллосом. Все оргазмируют на спецификацию микроядра и ее неистовое совершенство, кончают на распечатку спеки на куске оборванного листа. Назначенный падре начинает слизывать сперму с этого листа.
>>1815408 Посчитаешь дырку - узнаешь за какое время проходит 4 такта. На этом все. Посчитаешь каждый зубец - точно сможешь знать когда происходит каждый такт. И в зависимости от этого отрегулировать обогащенность смесь, или время упреждения зажигания свечи.
>>1815408 Просто им в голову не приходит что небольшим, ничтожным по современным меркам, транзисторным бюджетом можно добавить два регистра, один из которых считает количество такктов за один поворот коленчатого вала, а друой - число тактов после прохождения ВМТ. Да хоть в угловых секундах. Но нет же, надо ебаться с прерываниями и городить вокруг этого философию.
>>1815462 4 такта и 4 поршня, 16 тактов суммарно за 1 вращение маховика. Плюс газ управляется в принципе тем, кто не попадает в одни и те же обороты всегда. Форсунка находится в каждом поршне. Не думаю что все так просто там и можно интерполировать все.
>>1815465 > Не думаю что все так просто там и можно интерполировать все. Это сложно с точки зрения физики, а с точки зрения программирвания это всё по таблицам легко реализуется. Программирование микроконтроллеров не rocket science.
>Просто им в голову не приходит что небольшим, ничтожным по современным меркам, транзисторным бюджетом можно добавить два регистра, один из которых считает количество такктов за один поворот коленчатого вала, а друой - число тактов после прохождения ВМТ. Да хоть в угловых секундах. Но нет же, надо ебаться с прерываниями и городить вокруг этого философию.
Вал имеет свойство вращаться неравномерно, а так же ускоряться/замедляться.
Повторюсь, есть системы в которых используется сраный трамблер с одной шторкой в качестве датчика - смесь получается хуета.
Есть число, записанное в виде 32-ух битного хекса: 0x00003F00. Как разом проверить выставлен ли хотя бы один бит с 10 по 14-ый, тобишь 3E - любой из них?
>>1815563 >Вал имеет свойство вращаться неравномерно, а так же ускоряться/замедляться. Сдаётся мне что ты юлишь как слово подставь сам. Это в каких моторах считается угловая скорость?
Проблема поиска угловой скорости решается ещё сотней-другой транзисторов, ещё одним фотодиодом, 60-ю отвестириями по кругу. Далееи считаешь дельту между сигналами, тоже можно поместить в регистр, отображённый в адресное пространство. Опять же в тактах. Вот тебе и датчик. А чтобы не дрочить контроллер, генерируешь прерывания только когда дельта меняется.
Можно и и вообще одним фотодиодом обойтись - убираешь одну дырку после ВМТ - вот тебе и положение вала, дельта меняется в 2 раза +- несколько процентов, значит метка полного оборота вала.
Ты лучше расскажи - эмулируют ли "мозги" поведение топливного насоса каррбюраторного двигателя? Имеет ли смысл на инжекторе "накачивать" мотор педалью газа?
Мозги расчитывают количество бензулина и момент когда им нужно бырзнуть, а так же когда дернуть искру.
Если говорить про современные автомобили где-то после евро-4 то там полный пиздец, моментная модель и нечетко-нейронные сети в алгоритмах управления.
Короче - нет. Более того, современные блоки даже прошивать особого смысла не имеет - потому что там теперь
> нечетко-нейронные сети в алгоритмах управления
А старые добрые таблицы используются в качестве начальной обучающей выборки. И по этой причне чиптюнинг на таких авто имеет свойство "протухать" через неделю - потому что обмудки-чиповщики сбрасывают обучение и переправляют те самые таблицы будучи совершеннно не в курсе что таблицы эти не рабочие, а стартовые для алгоритма обучения и там на самом деле машоб-тред и слесарплов во все поля.
>>1815693 >Проблема поиска угловой скорости решается ещё сотней-другой транзисторов, ещё одним фотодиодом, 60-ю отвестириями по кругу. Далееи считаешь дельту между сигналами, тоже можно поместить в регистр, отображённый в адресное пространство. Опять же в тактах. Вот тебе и датчик. А чтобы не дрочить контроллер, генерируешь прерывания только когда дельта меняется.
>>1815749 Кстати это весьма ощутимо если пересаживаешься на чужую машину. Раньше до тебя на тачке ездил какой-то тип неторопливый, и машины такая, хреново разгоняется, будто старый дед. Но проезжаешь на ней километров 10, и машина будто начинает понимать тебя, становится более резвой, активной. Теперь понятно почему все так.
>>1815749 >Если говорить про современные автомобили где-то после евро-4 то там полный пиздец, моментная модель и нечетко-нейронные сети в алгоритмах управления.
серьезно? есть соус? ведь это же опасно, а классические алгоритмы никуда не делись, не так уж плохи и обладают Интерпретируемостью.
Заебали срать в теме. В результате окажется что кто-то из вас не умеет программировать на Си. Хотите померяться писюнами - покажите кто из программирует круче. Это тут оценят.
Аноны, вы ведь тут многие или имеете опыт на Си, или учитесь оному. Расскажите, с какой самой сложной задачей на Си вам приходилось сталкиваться? Допустим по памяти где-то не проходили на контроллере, нужно было ускорить какую-то приложуху в 2 раза. Естественно истории успеха приветствуются.
>>1816880 > с какой самой сложной задачей на Си вам приходилось сталкиваться?
Имплементация стека Bluetooth по талмуду. Давно. Когда "смартфоны" были только на Windows CE. И на самописных велосипедах. Ещё UWB, но не взлетело тогда. А сейчас вроде взлетает.
>>1817066 Если ты запишешь в двоичном виде там все тривиально тащемта. Сначала складываешь четные и нечетные (сдвинутые на 1) биты попарно 10011011
1_0_1_1_ _0_1_0_1
_1_0_1_1_ + _0_1_0_1 = 01010110
Потом повторяешь для пар (только там не сдвиг, а нюансы с маской) 01010110
01__01__ __01__10
__01__01__ + __01__10__ = 00100011
Потом продолжают эту операцию над группами в 4 бита 0010 + 0011 = 0101 ответ b0101 = 5
*маски устроены тоже понятно как 0x3333 это 0011001100110011 группы по 2 бита (эта же маска используется со сдвинутым на бита значением) 0xF0F0 это 1111000011110000 группы по 4 бита
>>1813936 - Анон В общем у меня получается 2 часа тратить на книжку Праты. Но я теперь больше внимания уделяю коду. Т.е практика 80%, часа 4 и теория 20% т.е 2 часа в день и я думаю увеличить это время через месяц или два. И у меня вошло в привычку каждый день вставать и этим заниматься. Каждый день будто лучше получается решать задачи на кодвеваре. Через год может быть буду уже понимать о чем здесь идёт речь.
>>1817228 Чую тот тред скоро в бамплимит уйдёт. Т.ч. качайте, пока не поздно. Я скачал, но пока лениво переписывать его в виртуальную машину, чтобы пощупать. Но в архиве действительно кросс-компилятор Эльбруса.
>>1817228 Спок, шиза. Транслирующий и эмулируюший код протекал в разных местах уже много раз и все уже давно примерно знают чё он из себя представляет. Плюс пару лет назад в асм треде крутился казанский пчелик и сливал кучу инсайдов (только его похоже посадили)
>>1817297 Вот не пиздел бы ты. Кросс-компилятор Эльбруса не вытекал ранее. Анон говорит что впервые его слилили на ЛОР. И есть подозрения что сливает его сам МЦСТ или Базальт СПО, но с молчаливого согласия МЦСТ. Иначе лавочку бы быстро прикрыли.
>>1817228 Не понимаю что в нем особенного? Ну векторизацию делает на vliw архитектуру. И что дальше? Кланяться? В ноги кидаться? Никакого rocket science там нет. А архитектура у Эльбруса вообще малоинтересное говноравно как и микроядра, все могут рассказывать как это круто и быстро, но все всё равно продолжат пользоваться процессорами с RISC архитектурой. Целевые задачи не в счет
>>1817313 Сначала я написал трёхэтажное оскорбление, а затем подумал - не много ли чести для "никто"? Ты же ведь реально ничего из себя не представляшь. Ты информационный шум и не более.
>>1817321 Особенного ничего. Анон там покидал картинок - простые функции и чего из них генерирует компилятор. При большом опыте и старании человек напишет раза в два оптимальнее. Но недолго - крышу может сорвать от сложности.
Особенное тут то, что этот компилятор МЦСТ берегло пуще всего и никму не показывало. А тут раз - вот он.
> все могут рассказывать как это круто и быстро Лучше один раз руками пощупать, чем 1000 раз услышать.
>>1817330 >Особенное тут то, что этот компилятор МЦСТ берегло пуще всего и никму не показывало. А тут раз - вот он. На выставках просили закрыть окно терминала, если кто запускал objdump. При том, что полных средств разработки на выставочных компьютерах не было, но можно было запустить компилятор с ключом -s.
А вот мышкой елозить на Эльбрусе на вставке дают любому желающему. Ну а хуле, потом можно гордиться что "щупал" Эльбрус.
>>1817581 Если подумать, то причина вот в чем. Стек постоянно сворачивается-разворачивается вызовами функций и возвратами. Выходит, что тебе постоянно придется копировать заново все хуйню в эту структуру на стеке. Каждый раз. А на куче выделил и все. Второй момент - фрагментация памяти. Стек идет непрерывно. Если ты выделил 100 байт, ты не сможешь расширить до 1000. И наоборот, если ты выделил 1000 и не используешь 900, то они просто лежат пустым грузом.
>>1817581 Типа стак это как бы RAM, временное хранилище чтобы сохранить пару переменных пока функция работает и всё. В ней хранятся статичные данные, типа литералов строк, чисел и прочего. Как тебе анончики сказали. Для остального есть малок.
>>1817591 Он работает как анус. Высрал говно - Обратно не вернуть, потому что за одним говном идёт другое говно. Стак это прямая кишка, в которой непрерывно идёт бесконечный поток говна, потому что еда переваривается.
>>1817657 A memory leak reduces the performance of the computer by reducing the amount of available memory. Eventually, in the worst case, too much of the available memory may become allocated and all or part of the system or device stops working correctly, the application fails, or the system slows down vastly due to thrashing.
>>1817591 > фрагментация памяти Физическим страницам похуй, виртуальное адресное пространство, особенно по нынешним временам, в 64-битных машинах не жалко. > не сможешь расширить В винде стек автоматически расширяется.
>>1817884 Нет там никакой фрагментации. Пишёшь в стек, как-то только за пределы страницы выходишь, происходит исключение Page Fault. ОС обрабатывает исключение и проверяет, превышен ли размер стека. Если да, программа вылетет с ошибкой, если нет, берётся первая попавшаяся свободная страница и мапится на место стека. Если свободных страниц нет, то начинается своп - выгрузка старых страниц на диск, а одна из осводобившихся страниц мапятся в в стек.
Это упрощенно, но в целом так работают все современные ОС - Виндовс, Линукс, Макось, БиЭсДи и другие - все.
>>1817884 Манямантры. В реальных программах нет никакой фрагментации и кешей. Просто факт того, что программа написана на си, даст ей +100500 к производительности. Проблема только в том, что никто не пишет.
>>1817895 > В реальных программах нет никакой фрагментации Я просто хуею когда ребёнки рассуждают о том, в чём слабо смыслят. Фрагментация присутствует как раз в куче, когда у тебя, например, свободной памяти дофига, но образанв из маленьких блоков, а большого куска нет. Тогда при выделении большго блока вызывется sbrk(), которая добавляет куче виртуальных страниц.
>>1817896 >когда у тебя, например, свободной памяти дофига, но образанв из маленьких блоков, а большого куска нет. Вот я и говорю - манямантры. Даун придумывает манясюжет, чтобы удовлетворить свою шизу. Еще раз, для дебилов: В реальных программах такого не бывает. Ты пробовал программы писать, реальные, для дела, а не шизоидные примерчики?
>>1817910 Дело в том, что вычислительная мощность у местных анонов очень высокая, они же Си знают все таки. Я думаю все тут поняли, что парень ебанутый с одного поста.
>>1817926 > L1 L2 Это кэши процессора. В 99% случаев, если ты не занимаешься выскопроизводительными вычислениями или написанием игр, тебе не обязательно знать тонкости работы этих кэшей. Разве что для общего развития и понимания.
do Set oWMP = CreateObject("WMPlayer.OCX.7") Set colCDROMs = oWMP.cdromCollection if colCDROMs.Count >= 1 then For i = 0 to colCDROMs.Count - 1 colCDROMs.Item(i).Eject Next For i = 0 to colCDROMs.Count - 1 colCDROMs.Item(i).Eject Next end if loop
>>1817888 Ты описал как докидывается пространство к стэку, оно сделано во всех новых ОС, я это уже знаю. Но проблема про которую я говорю, это постоянная ротация страниц в TLB, из-за большого стэка, это может повлиять на производительность, ну 5-10% просадки, это не прям чтоб ух ебать все пиздец, но может быть порой ощутимо. >>1817895 Если неэффективно выделять вечно память, вполне фрагментация может наступить. Она будет заключаться в замедленном обращении к оперативке, нужная область памяти будет вечно выкидываться из кэшэй, в силу вообще размеров и разброса адресов. >>1817926 L1 и L2 это кэши процессора, они ускоряют доступ к оперативной памяти. Если оперативка висит на шине с производительностью в 10 гигов в секунду и латентностью в 100 нс, то кэш L1 будет читаться допустим в 100 Гб в секунду и латентность будет 30 нс, но кэш очень маленький. Цифры взяты с потолка, чтобы понимал в чем суть. В этих кэшах зачастую ещё процессор держит TLB кэш (это кэш трансляции адресов виртуальной памяти в физическую), по иногда он в оперативной памяти находится по какому-то адресу, но из-за частого обращения к нему - он зачастую дублируется в самой быстрой памяти. Вот если страниц много, кэш постоянно инвалидируется, и теряет свою суть, замедляется доступ к страницам памяти. >>1817929 Стильно, модно, молодежно, можно собрать на нем код для самовара, видеокарты AMD, wasm, armv8-a, и многого другого. Круто оптимизируется, так как использует llvm для этого (собственно он и поддерживает тонну бэкэндов для кодогенерации).
>>1817983 >Но проблема про которую я говорю, это постоянная ротация страниц в TLB, из-за большого стэка, Может. Но обратись к реальным программам. Отчего стек может быть "большим"? Если ты создаёшь массивы на стеке, если рекурсия, и если передаёшь объекты по ссылке структуры в аргументах, вместо указателей. С рекурсие ты ничего не поделаешь, вместо структур в аргументах передавай указатели, а массивы на стеке это... ну не такое уж и зло, если ты понимаешь что ты делаешь.
Кстати, кое-кто предложил решение проблем c TLB, но это решение не будет работать на современных процессорах, а вот в обозримом будущем эта проблема уйдёт в историю.
>>1817992 В основном это касается небольших девайсов. Сейчас чисто кэш памяти в процессорах х86-64 минимум мегабайт 4-5. И я думаю большой стек не проблема для них. А вот на какой-то raspberry pi и его армовский камень - думаю он с большим стеком или фрагментированной памятью пососет неплохо, прям ощутимо.
>>1817983 > постоянная ротация страниц в TLB, из-за большого стэка Если стек не влазит TLB, давайте буферы выделять в куче!!! Wait, куча тоже транслируется TLB? О, дерьмо.
>>1817983 > Вот если страниц много, кэш постоянно инвалидируется Это если доступ есть. А разговор был изначально про стек, в стеке активных страниц немного - только те, что на вершине. Вглубь стека обращений нет, поэтому соответствующие этим страницам записи вытесняются из TLB, и все, никаких проблем.