Forger 26 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба 36 minutes ago, EdgeAligned said: xTaskCreate(TaskFoo, "TaskName", 100, NULL, 1, &pxTaskHandle); тут только вызов, нет самих объектов, нет реализации, а их тоже надо создать, объявить и в итоге все равно копипастишь из другого кода ( кстати, всячески избегаю таких функций с тремя и более параметрами, даже два параметра много, ибо нужно помнить какой что значит и в каком порядке такие крайне неочевидны и вынуждают лазить в документацию или копировать из другого проекта а вот как у меня объявляется, создается и реализуется таймер (задача чуть-чуть проще): это моргание лампочкой в стиле "i am alive", стараюсь ставить такие на все платы, так удобнее отлаживать, пока не вышел в серию ) #include <AbstractApplication.hpp> #include <Delegate.hpp> #include <Pin.hpp> ... constexpr auto kStackSize = SERVICE_STACK_SIZE; constexpr auto kPriority = SERVICE_PRIORITY; constexpr auto kLedFlashPulseWidthMs = 10; constexpr auto kLedFlashPediodMs = 500; ... class ServiceLib : public Service { virtual void run() final; class Timer : public OS::Timer<kStackSize> { virtual void initialize() final { pinLED.setToHigh(); } virtual void body() final { pinLED.setToLow(); sleep(kLedFlashPulseWidthMs); pinLED.setToHigh(); } Hardware::DigitalOutputPin<PA15> pinLED; public: Timer() : OS::Timer<kStackSize>("Service.Timer") {} } timer; } .... void ServiceLib::run() { timer.setPriority(static_cast<Timer::Priority>(kPriority)); timer.setPeriodMs(kLedFlashPediodMs); timer.run(); } 36 minutes ago, EdgeAligned said: Хотя на самом деле нет там никаких сложностей. это для вас, видимо постоянно пользуетесь, а я вот не храню в голове такую информацию - ШЕСТЬ параметров для одной функции, и надо помнить в каком порядке, такое по мне вообще за гранью .. 36 minutes ago, EdgeAligned said: Я знаю, я работал в составе команды. И там были требования, вплоть до оформления - стиль форматирования текста скинули файлом настроек, стандартное документирование doxygen, имена переменных и прочего - в таком-то стиле. знаю, но это если кто-то выше уже сделал и дал вам на разработку его часть и выдвинул жесткие требования )) а если сам хозяин, то проблем как раз нет, сделать так, как удобно автору ) 36 minutes ago, EdgeAligned said: А изобретать свой няшненький лисапедик с розовенькими колесиками - ну эт кагбе. знакомо: любой чей-то шаг в строну воспринимается как немыслимое изобретение некого "велосипеда", причем в таком резком контрасте )) а достаточно углубиться и вникнуть, как уже так не кажется ) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба А зачем мне вникать в ваш розовенький лисапэд, если у меня есть свой зеленый лисапэд? 🙂 Мне ваш ничуть не интересен, если честно! Касательно работы в команде - "со своим уставом в чужой монастырь не лезут" 🙂 Если вы будете руководителем проекта, вы будете определять стиль. Если же нет, то придется принять правила игры. Как минимум, чтобы ваш кусок можно было пристыковать к остальным кускам, стили должны хотябы в общих чертах совпадать. Иначе ничего не получится. Насчет "удобства". 🙂 У нас в армии говорили: "Неудобно срать (спать) стоя, остальное - фигня" Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба 4 minutes ago, EdgeAligned said: Мне ваш ничуть не интересен, если честно! Тогда к чему этот спор? Я поделился личным опытом, предложил поделиться своим. 11 minutes ago, EdgeAligned said: Если вы будете руководителем проекта, вы будете определять стиль. разумеется о такой схеме речь, где хозяин кода решает как он будет построен, а не "дядя маер" сверху? а роль подчиненного в ноль прогера тут не обсуждается, как ему скажут так и будет писать, это само собой, тут просто нечего обсуждать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба Ну дак вы ж сказали, что дескать "на голых Сях невозможно написать хорошего кода", дескать только расово-верный ++ будет панацеей. Ну я ответил, что Ардуинщики пишут на ++, а FreeRTOS написана на голых Сях, и результат прямо противоположный. На что вы начали говорить, что FreeRTOS ваще сложно запомнить, потому что она не розовенькая и без наклеечек 🙂 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба 54 minutes ago, EdgeAligned said: FreeRTOS написана на голых Ся не хочу повторяться, но речь шла про проект, а не отдельные библиотеки, вопрос их применения сугубо индивидуальный, выше описал как я это делаю я, чтобы не запоминать тонны параметров функций если это кому-то кажется "розовеньким" - это личное дело, но вовсе не обязательно это озвучивать это тут 54 minutes ago, EdgeAligned said: на голых Сях невозможно написать хорошего кода и где я такое сказал? цитата? или будете и дальше выдавать свои домыслы и фантазии за чужие? речь шла про ПРОЕКТИРОВАНИЕ КОДА, на функциональном языке это сделать намного сложнее, чем на объектном (по-моему я уже повторяюсь) предполагаю, что те, кто в основном работал в команде под кем-то, тот скорее всего очень плохо знаком с проектированием кода и потому не видит никакой разницы между объектными и функциональными языками, поэтому пишет на плюсах как на си и наоборот Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба Лично мне приглянулся способ писать совсем уж примитивный нижний уровень драйверов периферии - в Си-стиле: просто вызов функций, сами драйверы предоставляют сухой набор экспортируемых (внешних) функций в заголовочнике. В самом файле реализации никаких глобальных переменных или объектов: внутри модуля все функции общаются через глобальные статические объекты. Т.е. я гарантирую, что на уровне линковки не будет конфликта с именами переменных или функций или еще чего-то, за исключением тех, которые предоставляют интерфейс (это само собой разумеется). В ООП-стиле я вижу разворачивание самой логики работы программы: при объявлении объектов нужных классов они "прицепляются" к необходимым драйверам и вперед. При написании кода упор стараюсь делать на золотую середину между читаемостью и производительностью. На самом деле пусть хоть 10 параметров в функции: если при чтении из контекста сразу становится понятно, о чем речь, то не считаю это зазорным. Напротив, подставляя какие-то страшно длинные имена в такую функцию, чтоб "наверняка было всем понятно", строчка вызова превращается в уже сходу врядли перевариваемую мозгом. На ней приходится фиксировать внимание, теряется мысль, рассредоточиваешься и порой идешь по новой. В примере с xTaskCreate(): эта функция вызывается крайне редко, обычно один раз за всю жизнь программы, поэтому мне плевать, что для первоначального написания ее вызова мне, возможно, придется открыть ее декларацию и посмотреть очередность аргументов и их тип. А если функция вызывается очень часто, то, возможно, она будет оформлена в inline-вызов в виде отдельной крохотной функции. Крохотные вызовы, сколько я ни смотрел листинги, всегда встраивались при оптимизации. Мне такое сочетание Си/++ видится наиболее лаконичным. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба 5 часов назад, Forger сказал: все будет в порядке, если с самого начала структура проекта была спроектирована и разбита на независимые модули/блоки на голых сях это сделать крайне сложно и трудоемко Ваши слова. Да, когда 2 часа назад, Forger сказал: даже два параметра много, ибо нужно помнить какой что значит и в каком порядке ... , такое по мне вообще за гранью .. действительно сложно вообще что-то написать. С такой памятью - удивительно, что вообще что-то пишите еще 🙂 А вот я когда-то тыщщу лет назад вообще даже на ассемблере писал и не пускал нюни, что надо помнить дохрена инструкций. И тот же FreeRTOS, в котором есть и ассемблерные вставки, ну как-то ж люди писали жеж! Но вот в тех же ардуино-проектах, писуемых на расово-верном ++, я вот что-то не шибко то видел, чтобы хотябы что-то более чем упаковка в struct использовалась. Хотя я канеш не спец в адруине, мож щас там кто-то поумнее чего делает. Да нет, я "ни за красных, ни за белых", я просто рассуждаю. "Кто ясно мыслит, тот ясно и излагает"(С)кто-то из древних. И коль умеете ясно мыслить, то написать ясно можно на любом языке. И я согласен с тем, что В 30.11.2023 в 11:25, MrYuran сказал: если проект представляет собой монолитный комок дерьма (ball of mud), без разницы, на каком языке он написан. ПлюсАми тут мало что изменишь. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба 9 minutes ago, EdgeAligned said: С такой памятью - удивительно, что вообще что-то пишите еще .... А вот я когда-то тыщщу лет назад вообще даже на ассемблере писал и не пускал нюни Очевидно адекватных аргуметов нет, раз дело дошло до банального хамства 15 minutes ago, EdgeAligned said: Ваши слова Вы знаете разницу между проектированием и кодированием? Нет? Тогда проехали. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 3 декабря, 2023 Опубликовано 3 декабря, 2023 (изменено) · Жалоба Это не хамство, вы сами написали про себя это! Не передергивайте и не обижайтесь. Лучше давайте конструктивно, по делу. Обиды оставьте по свою сторону экрана. Вы сами скахали, что вам сложно запомнить более двух параметров функции. Но черт возьми, программирование - это вообще такая штука, которая предъявляет высокие требования к памяти и мышлению программиста. Иначе это просто не программист, а, с позволения сказать, буквописатель. Да спросите кого угодно из мэтров - они все обладают высокими мыслительными способностями и памятью. Извините, но это так. Ну не может человек без музыкального слуха и моторики пальцев стать хорошим пианистом. Так же и здесь. Ну, дальше начались ваши говнообиды. Это уже неинтересно и контрпродуктивно. Вы сначала сами сказали, что вам сложно запомнить более двух чисел, а теперь обижаетесь на это. Ну это както не то. Неинтересно. Давайте впредь лучше по делу, без личных обид. 23 часа назад, Forger сказал: Вы знаете разницу между проектированием и кодированием? Да. Проектирование - это создание нового. Кодирование - это просто печатание буковок. 🙂 К какой категории вы себя относите? Проектировщик должен иметь отличную память, живой ум и прочее. Кодировщику нужно просто быстро печатать. Блин, а ведь и правда, черт возьми! Теперь я понимаю, откуда появилась приставка "гумно-" к слову "кодер". Хахаха, а ведь так оно и есть, черт подери! Когда "кодер" не может запомнить больеш двух чисел, вот оно на выходе и выходит. Изменено 4 декабря, 2023 пользователем EdgeAligned Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 3 декабря, 2023 Опубликовано 3 декабря, 2023 · Жалоба 1 hour ago, Arlleex said: В ООП-стиле я вижу разворачивание самой логики работы программы К аналогичному решению пришел, описывая структура проекта объектами значительно упростилась его структура, для себя лично даже сделал небольшую визуальную методичку в xmind, в которой выстроил базовую для всех проектов структуру. Основу позаимствовал из Qt, в частности систему слотов/сигналов, а чтото из старого доброго борланда (общую структуру Application). Мне так вышло на практике гораздо удобнее, например, очень просто переносить модули из проекта в проект, т.к. модули изначально описываются по одинаковому для всех проектов принципу (речь про их интерфейс). Ну и старые проекты постепенно переводятся на "новые рельсы", сопровождение упростилось, выработалась некая однозначность и повторяемость. Что сказалось на скорости развития проектов и их адаптации под другое железо (частями или целиком). зы Мне одному кажется эту тему надо убирать из раздела новичков? Все равно ведь мало кто понимает о чем идет речь ) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 4 декабря, 2023 Опубликовано 4 декабря, 2023 · Жалоба В 03.12.2023 в 13:55, Forger сказал: кстати, всячески избегаю таких функций с тремя и более параметрами, даже два параметра много, ибо нужно помнить какой что значит и в каком порядке Вызывает недоумение - как вы вообще что-то пишете с такими-то ограничениями?? Например: во всякого рода графических API у большинства функций кол-во параметров - от 4-х и больше. BitBlt: https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-bitblt И это вполне обычная функция. PS: Конечно, если писать только HelloWorld-ы.... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 4 декабря, 2023 Опубликовано 4 декабря, 2023 · Жалоба 9 minutes ago, jcxz said: Например: во всякого рода графических API у большинства функций кол-во параметров - от 4-х и больше. BitBlt: https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-bitblt Ну, на Некрософт-то ссылаться можно только в качестве антипримера. У них любимый шаблон -- это десяток параметров через структуру, ещё десяток -- по одному через аргументы. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 4 декабря, 2023 Опубликовано 4 декабря, 2023 · Жалоба 27 minutes ago, jcxz said: Вызывает недоумение - как вы вообще что-то пишете с такими-то ограничениями?? Избегаю СОЗДАВАТЬ такие "нечитаемые" функции, но использовать чужие в своих обертках нет никаких проблем - один раз отладил, спрятал и забыл про их существование. Вот для сравнения ДВА варианта реализации одного и того же: Вариант 1: Hardware::FSMC::Settings settings; settings.dataWidth = 8; settings.waitSignalPolarity = 0; settings.isWriteOperationEnabled = true; settings.isDataAddressMultiplexed = false; settings.isBurstModeEnabled = false; settings.isWrappedBurstEnable = false; settings.isWaitSignalActiveDuringWaitState = false; settings.isExtendedModeEnabled = false; settings.isAsynchronousWaitEnabled = false; settings.isWriteBurstEnabled = false; settings.readWriteTimings = &timings; settings.writeTimings = &timings; memory.initialize(settings); Вариант 2: memory.initialize(8, 0, true, false, false, false, false, false, false, &timings, &timings); Какой кто выберет вариант? Есть еще третий вариант: вместо заполнения полей структуры создавать ворох "микро" inline функций с нормальными понятными именами. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 4 декабря, 2023 Опубликовано 4 декабря, 2023 · Жалоба 25 минут назад, jcxz сказал: во всякого рода графических API у большинства функций кол-во параметров - от 4-х и больше. Я о том же подумал. Можно конечно запихать всё в одну структуру и передавать еёйную, но это далеко не всегда применимо. А нормальная IDE при написании показывает, какой параметр нужно ввести. Далеко не всегда нужно упихивать в структуру. Бывает так, что параметры передаются по значению как независимая копия переменной, которая в ф-ции затем безболезненно меняется в процессе работы ф-ции, не затрагива исходную переменную. И нет смысла в этом случае запихивать переменные в структуру, от этого разрастается портянка текста. Да, кодировщику легче натыкать на клаве лишний текст, чем запомнить более двух цифр 🙂 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 4 декабря, 2023 Опубликовано 4 декабря, 2023 · Жалоба 1 час назад, andrew_b сказал: Ну, на Некрософт-то ссылаться можно только в качестве антипримера. Ок. Покажите тогда например - правильный (с вашей точки зрения) прототип функции рисования закрашенного прямоугольника с заданным цветом? (должна принимать указатель на графический контекст устройства вывода, координаты и цвет) И сколько там будет аргументов? 1 час назад, Forger сказал: Вариант 2: memory.initialize(8, 0, true, false, false, false, false, false, false, &timings, &timings); Какой кто выберет вариант? 2-й очевидно оптимальнее по результирующему коду (на ARM) и более читаем (менее громоздок). Он несомненно лучше. Но конечно, если вам платят за количество строчек исходника , тогда 1-й вариант будет лучше. 1 час назад, EdgeAligned сказал: А нормальная IDE при написании показывает, какой параметр нужно ввести. вот именно. Если уж своего ОЗУ недостаточно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться