Страница 2 из 2

Re: возврат 2х значений одной функцией

Добавлено: Чт апр 07, 2011 20:25:31
ARV
уважаемые спорщики, все сколько-нибудь оставившие след в истории программы написаны НЕ ПО ОЗВУЧЕННЫМ вами правилам, А ВОПРЕКИ ИМ. из смешного - Linux и Windows, из более серьезного - огромнейший парк математических библиотек на фортране, в котором понятие глобальной переменной вообще одно из основополагающих.

а забота о том, что вы декларируете встала после того, как родилось ООП - именно эта идеология ввела понятие инкапсуляции и всего прочего, о чем раньше "знали, но стеснялись сказать" :) все хорошо в меру, и в нужной пропорции в нужном месте. боюсь, перенеся свои идеи в программирование AVR, вы не сумеете и светодиодом помигать - вся память будет потрачена на "стиль" и "правильность доступа" (шутка) :))) кстати, ARM, по-моему скромному мнению, чисто по недоразумению называется МИКРОконтроллером, это тяжкое наследие прогресса, из-за которого уже управление унитазом без 32 бит сделать "невозможно".

мужчину от мальчика отличает способность понять, что кроме своей есть еще точки зрения, имеющие право на жизнь :)
кто возводит в единственную истину "goto - это недопустимо" или "доступ к данным только через методы класса" - еще не вырос, хотя может быть седым и бородатым :))) будьте взрослыми! максимализм оставьте пионерам

Re: возврат 2х значений одной функцией

Добавлено: Чт апр 07, 2011 21:11:34
Goodefine
У меня, практически в каждой программе, используются глобальные переменные почти точно так же как показано выше. После прочтения подобных заявлений, может и комплекс развиться - страшно код будет показывать, засмеют - будут тыкать пальцем и говорить: "глобальные переменные только в исклююючиительных случаях". Вот и хочется узнать - это исключительный случай, или как? Если нет, то как делать правильно... С Макконелом не знаком, спросить не у кого...
ЗЫ. Заголовок статьи "Оптимизация: ваш злейший враг" сразил наповал. Похоже индусы, писавшие библиотеки для stm8, обчитались до одурения, расклеили по стенам и заучили на мантры данное Творение... И творили и творили...

Re: возврат 2х значений одной функцией

Добавлено: Пт апр 08, 2011 03:01:35
Paguo-86PK
Недавно писал один проект средней сложности (подмена заднего плане на лету), где все банальные переменные (long i,j,x,y,z; RECT rc,rt; TCHAR text,*txt; и т.д.) сделал глобальными, так-как в программе циклы используются только в функциях никогда не вкладываемых в другие циклы, строки формируются перед выводом на экран и выходом из функции. И т.д. и т.п.

Сначала всё было хорошо. Не нужно было в шапках функций то и дело объявлять x,y или i. Но потом пошли глюки. Нашлись такие узкие места, где нет-нет, да и попадает глобальная переменная в неловкое положение. :)))

Re: возврат 2х значений одной функцией

Добавлено: Пт апр 08, 2011 07:24:17
ARV
Paguo-86PK писал(а):Но потом пошли глюки. Нашлись такие узкие места, где нет-нет, да и попадает глобальная переменная в неловкое положение. :)))
но ведь это не глобальная переменная виновата, а вы :) глюки были, есть и будут независимо от глобальных переменных - это лишь от опыта программиста зависит.

Re: возврат 2х значений одной функцией

Добавлено: Вс апр 10, 2011 10:34:23
Goldsmith
ARV писал(а):боюсь, перенеся свои идеи в программирование AVR, вы не сумеете и светодиодом помигать - вся память будет потрачена на "стиль" и "правильность доступа" (шутка) :)))
К моему большому сожалению, это не мои идеи, я лишь заимствовал их у умных людей. Более того, пока эти идеи (вместе с инструментами) не были успешно перенесены в мир МК, я даже боялся браться за их программирование - это примерно как у ремесленника отобрать все привычные инструменты и высадить на необитаемый остров с пустыми руками. Каменный топор-то он, пожалуй, сделает, но вряд ли его изделия будут так же красивы и аккуратны, как прежде. Аргумент "а нечего было привыкать к хорошему" слабо утешает.

Насчет пресловутого "мигания светодиодом" - я по крупицам собрал то немногое, что относится к адаптации современных технологий программирования к миру МК, и перевел пока пару из них. Если действительно интересно, можете ознакомиться с этими переводами: "Развитие в направлении разработки встроенных систем" и "Эффективная разработка встроенного ПО через тестирование". Там решаются промышленные задачи несколько посерьезнее, чем традиционное мигание лампочкой, с использованием инструментов и технологий, заимствованных из мира "взрослого" программирования. Все это на базе МК PIC, по возможностям примерно равного Mega16 (правда, RAM всего 768 байт или около того). Так что мифы об астрономической ресурсоемкости такого подхода остаются мифами.

Другое дело, что порог вхождения в такие технологии достаточно высок. Тем, кто не занимался ранее профессиональной разработкой софта, придется одолеть массу нового для себя материала, довольно объемного и сложного. Но это все же субъективный фактор, а не объективный. В конце концов, чтобы перейти от каменного топора к железному, тоже нужно было потрудиться немало.
ARV писал(а):кстати, ARM, по-моему скромному мнению, чисто по недоразумению называется МИКРОконтроллером, это тяжкое наследие прогресса, из-за которого уже управление унитазом без 32 бит сделать "невозможно".
Унитазы, к счастью, управляются простым механизмом, иначе, боюсь, они мигали бы светодиодами (продвинутые модели - трехцветными, и еще показывали бы время), в то время как цивилизация утопала бы в нечистотах...

Если серьезно, то есть ведь потребность в более интеллектуальных устройствах, чем елочные гирлянды. Например, контроллеры RAID-массивов, сетевое оборудование класса SOHO, домашние серверы, медиа-центры. А если учесть, что эти монстрики по цене сравнимы со старшими 8-битными моделями AVR, нет никаких причин от них отказываться, не настолько уж тяжко бремя прогресса. Биллу Гейтсу, небось, до сих пор стыдно за свое утверждение, что 640 килобайт всегда будет достаточно для любых задач.

Re: возврат 2х значений одной функцией

Добавлено: Вс апр 10, 2011 11:56:05
Goodefine
И все таки хотелось бы услышать, как избавиться от глобальной переменной в таком случае, чтобы в этом был практический смысл и реально давало бы что-то с точки зрения удобства использования и безопасности. Поясню - программа состоит из нескольких .с- модулей, каждому из которых соответствует .h-интерфейс. Все это увязывается через main.c с интерфейсом main.h. Используются несколько обработчиков прерывания, в каждом из которых совершаются некоторые неотложные действия и выставляется указанные флаги. Время выполнения каждого из обработчиков критично. В главном цикле обычно крутится автомат состояний, каждое из которых имеет свою реакцию на флаги, и в зависимости от определенных условий, работая по флагам, может обращаться к различным модулям.
Это не праздный вопрос, а вполне практический и для меня актуальный. Сам я не придумал ничего удобнее и безопаснее. Поэтому пространные рассуждения это хорошо, но недостаточно. ОС не предлагать, по понятным причинам. Есть задачи, когда она лишняя..