Перейти к содержанию
    

Плавный переход C -> C++ под МК

7 minutes ago, EdgeAligned said:

Вот я и спрашиваю - а вы сами достаточно хорошо его знаете? 

Достаточно для того, чтобы для доступа к объекту не использовать длиннющие имена с "." или "::"

у меня в проекте нет ни одного объекта с глобальной областью видимости, чтобы приходилось применять такие радикальные способы достучаться до их методов )

Однако, я точно знаю, что можно сделать еще лучше чем уже сделано, а вот на голом С увы  этот "потолок слишком низко расположен" и без костылей то или иное сделать уже крайне сложно (по мне).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот видите - этим и заканчивается ваше познание 🙂 а сам язык гораздо обширные.

Как говорил один наш профессор, "На 5 знаю только я. Вы, в лучшем случае, на 4." 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/18/2023 at 1:17 PM, Forger said:

Достаточно для того, чтобы для доступа к объекту не использовать длиннющие имена с "." или "::"

у меня в проекте нет ни одного объекта с глобальной областью видимости, чтобы приходилось применять такие радикальные способы достучаться до их методов )

Однако, я точно знаю, что можно сделать еще лучше чем уже сделано, а вот на голом С увы  этот "потолок слишком низко расположен" и без костылей то или иное сделать уже крайне сложно (по мне).

 

Линукс вот на чистом Си написан. И развивается при этом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, dimka76 said:

Линукс вот на чистом Си написан.

его начали строчить на С исторически вот и тянут эту лямку

10 minutes ago, EdgeAligned said:

Ну вот видите - этим и заканчивается ваше познание

видимо когда "потомственные" С писатели как только видят плюсы, то по началу начинают строчить на нем как на голом С - "шуруповертом забивать гвозди" )

ну, конечно, в таком подходе будет казаться что "шуруповерт" никуда не годится ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 minutes ago, Forger said:

Речь об эффективности тоже.

Мне для решаемых задач быстродействия хватает, поэтому сколько занимает вызов, 4 такта или 40- не важно. Для меня важнее надёжность и удобство, что в большом проекте важнее, чем время входа в обработчик.

Если уж пошла речь об эффективности, то оценивать время входа, по-моему, разумно относительно длительности выполнения самого обработчика, а то какой смысл убиваться ради входа за 2 такта, а не за 40, когда сам обработчик выполняется 1000 тактов?

Изменено пользователем tonyk_av

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, EdgeAligned said:

Ну, дальше начался холивар... 

Да, пора с этим заканчивать, пустое это

5 minutes ago, tonyk_av said:

Мне для решаемых задач быстродействия хватает, поэтому сколько занимает вызов, 4 такта или 40- не важно.

Увы, но как раз для обработчиков прерываний это очень и очень важно. В смысле если в одном проекте это прокатывает, то в другом станет узким местом.

А ведь такое решение претендует на универсальность, иначе какой смысл во всей этой затеи 

Если не сложно, посмотрите пожалуйста, сколько все-таки занимает вход в обработчик. Без оптимизации и с нею. Из чисто академического интересу )

 

11 minutes ago, tonyk_av said:

когда сам обработчик выполняется 1000 тактов?

За такой невменяемо длинный обработчик следуют уже применять суровые методы инквизиции ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, Forger said:

За такой невменяемо длинный обработчик следуют уже применять суровые методы инквизиции )

Если нужно обработать 256 программных таймеров, то причём тут вменяемость?

12 minutes ago, Forger said:

Увы, но как раз для обработчиков прерываний это очень и очень важно

Мне это напоминает погоню за Неуловимым Джо.

14 minutes ago, Forger said:

В смысле если в одном проекте это прокатывает, то в другом станет узким местом.

За последние 5 лет мне как пример привели только две задачи, в которых это действительно было важно, более того, обработчики были написаны на ассемблере.

Ещё обратите внимание, что на одно прерывание может быть подключено более одного объекта.

В конце концов, за всё надо платить, в том числе за изолированность объектов друг от друга (а не от внешнего мира). Ну а если так уж нужно минимальное время входа, то никто не запрещает прямо вписать в таблицу адреса обработчиков.

image.thumb.png.ff765ad5ad168cf1a4bf75ffcd9e5c66.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, tonyk_av said:

Если нужно обработать 256 программных таймеров, то причём тут вменяемость?

вот уж действительно при чем тут вменяемость, когда в проекте 256 программных таймеров ))

По этой причине не использую программные таймера, ибо у таких таймеров нет индивидуальных приоритетов, и если один "тормозит", то все остальные ждут, даже если остальным "нужнее". Отлаживать такой код неприятно.

  

8 minutes ago, tonyk_av said:

Мне это напоминает погоню за Неуловимым Джо.

Увы, но обработчик прерывания "рвет" весь основной код и нарушает (временно) приоритетность выполнения тех потоков/задач.

Поэтому обработчики всегда советуют делать минимально возможной длины (по времени исполнения).

Например, из обработчика семафорят, а уже в основном коде разгребают и делают расчеты.

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

 

 

9 minutes ago, tonyk_av said:

то никто не запрещает прямо вписать в таблицу адреса обработчиков.

а это кстати полезный функционал, серьезно, не спорю, может пригодится если обработчик состоит лишь из одного вызова некой библиотечной функции, у меня есть такие случаи

 

9 minutes ago, tonyk_av said:

В конце концов, за всё надо платить, в том числе за изолированность объектов друг от друга (а не от внешнего мира).

Тут мы прекрасно понимаем друг друга, но все-таки бенчмарк дело полезное, это в конце концов информация, которая может пригодится при поиске узких мест. 

 

Но если нет желания выяснять, что ж, хозяин - барин ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Между 40 и 4 тактами - разница в 10 раз. В 10 раз медленнее там, в 10 раз медленнее сям - вот уже и 400 МГц тактовой не хватает. Просто потому, что у программисту неудобно на стуле сидеть 🙂 современная тенденция такова, к сожалению. Переводятся виртуозные программисты, наступает эра неуклюжих программистов, которым всё неудобно. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, Forger said:

Но если нет желания выяснять, что ж, хозяин - барин ))

Дойду до отладки- посмотрю.

 

36 minutes ago, Forger said:

Отлаживать такой код неприятно.

Никаких проблем. Это ПЛК, поэтому таймеры запускает-останавливает программа пользователя. Мне лишь нужно пройтись по ним и обработать.

 

39 minutes ago, Forger said:

а это кстати полезный функционал

Это получилось само собой и оставлено для совместимости с С. У меня туда вписаны обработчики для FreeRTOS.

31 minutes ago, EdgeAligned said:

Просто потому, что у программисту неудобно на стуле сидеть

Просто программа пишется на С++, поэтому стараюсь придерживаться идеологии ООП. Считаю, что для большого проекта потеря нескольких процентов ради удобства его, программиста, работы вполне допустима. Ещё раз повторюсь: памяти хватает, реакция программы в порядке, так почему бы не перестать заниматься интеллектуальным онанизмом, вымучивая каждый бит в коде? Тем более, что для критических задач есть механизм быстрого входа в обработчик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну ещё есть такой критерий, как энергосбережение. Особенно актуально это при батарейном питании. Надеюсь, не надо объяснять, как и от чего он зависит. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 minutes ago, Forger said:

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

Бывает, что основной код в прерывании. Потому, что менять контекст с прерывания на поток ртос только ради красивости, это будет слишком дорого стоить по времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну опять начинается некий срач, такое мне не надо, коллеги))

Просто в моих задачах хоть и не часто, но весьма регулярно в МК считать такты на вход/выход из исключений приходится, поэтому я очень щепетильно отношусь к языковым решениям Си и плюсов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, amaora said:

Бывает, что основной код в прерывании.

Это справедливо отчасти если в проекте не используется RTOS и через прерывания и их приоритеты по сути организована ее некая "эмуляция".

Если РТОС есть, то в прерываниях подолгу делать нечего, быстренько проверили флажки прерываний от железа, сложили данные в буфер, просемафорили куда надо и скорее на выход.

Так пишут в умных книжках и это действительно справедливо, лично в этом убеждался

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...