Помогите пофиксить баги

Обсуждаем контроллеры компании Atmel.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Чем вам процедура из Паскаля не процедура?
Если не определено никаких стандартных интерфейсов обмена - это подпрограмма.
Если определен интерфейс интерфейс передачи данных внутрь - процедура.
Если определены интерфейсы передачи данных внутрь и наружу - функция.
Если определен механизм получения информации о "привязанном" объекте - метод.
.
Ладно, мне это развлечение уже надоело. Предлагаю прекратить спор и остаться при своих мнениях (все равно за такое время не переубедили друг друга), тем более что различие между этими терминами на практике нужно достаточно редко.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

если считать интерфейсом, как настаивал я, только видимую программисту часть в исходном коде, то, согласно вашим определениям
void func(void) - это процедура, т.к. никакого интерфейса передачи внутрь нет, и нет ничего для выдачи наружу.
int func(void) вообще не укладывается в вашу классификацию, т.к. определен только интерфейс передачи наружу, а вовнутрь - нет.

и так на всем протяжении спора - вы вкладываете в мои слова собственные понятия и им возражаете, не давая себе труда задуматься над сказанным мною.

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

COKPOWEHEU писал(а): В глобальную переменную или по переданному адресу процедура не возвращает значения, а напрямую работает с ОЗУ. Эта область в процессе работы процедуры может быть изменена несколько раз и даже использована во время работы процедуры.
Не хотел ввязываться в этот бессмысленный флейм, но такие перлы, достойные второкурсника-двоечника, не позволяют промолчать.Когда мы работаем на языке высокого уровня - о каком ОЗУ может идти речь? Компилятор сам определяет, где ему хранить значения - в ОЗУ или регистрах. Раз уж этот флейм пошел в теме забытого за ненадобностью ТС о микроконтроллерах, то как быть с теми МК, у которых ОЗУ вообще нет?
возвращенное функцией значение именно передается в вызывающий код.
Куда-куда ? В код ?! Ну тут уж слов нет.
значит, при выполнении x = FunXXX (...) и SubXXX (...,&x,...) вычисленное значение окажется в разных местах - во втором случае - в ОЗУ, в первом - "в возвращаемом коде" ? Если посвятить хотя бы половину времени, потраченного на , как бы помягче, странные тирады -- на прокрутку в отладчике тестового примера, то все стало бы на свои места.
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Jack_A писал(а):Если посвятить хотя бы половину времени, потраченного на ... прокрутку в отладчике тестового примера
в том-то и дело, что для предложенного мною обсуждения вообще не надо лезть в отладчик, вообще не надо думать о том, как ведет себя компилятор! мы обсуждаем терминологию и классификацию, т.е. вещи, доступные программисту (а не компилятору). а программист, работающий с языками высокого уровня, должен быть максимально абстрагирован от аппаратных и платформозависимых компиляторов - он должен (в идеале, конечно!) видеть только текст программы и работать с ним.

я и предлагал рассматривать тексты программы [высокого уровня] и терминологию, их описывающую.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Действительно, язык программирования предполагает некоторое виртуальное пространсттво -- память, в которой размещаются переменные, массивы, структуры и т.п. И программист должен быть уверен, что при выполнении определенных операторов данные окажутся именно в этих элементах - переменных, массивах данные, а не в каком-то неведомом "вызывающем коде" , причем совершенно безразлично, будет это ОЗУ, регистровый файл, EEPROM, FRAM etc. Хотя если дискуссия воспарила до таких философских высот :) , позволим себе окунуться в "низкую конкретику". Если архитектура фон Неймана, можно себе представить передачу данных именно в область кода, хотя это чересчур уж по-хакерски, и ни один компилятор такую мудотень не позволяет, да и современные операционные системы, наверное, этому препятствуют .
И еще. Поскольку мы находимся в разделе МК и ПЛИС, далеко отрываться от конкретики не удастся. А терминология - дело не первостепенное. Если совершенно ясно представляешь, как это работает, можешь назвать их хоть "хреновинками" и "недо-хреновинками", лишь бы код был безглючным. Только при публикации будут проблемы с пониманием :) .
А насчет лезть - не лезть в отладчик... Если имеется туман в понимании некоторых вещей, то не зазорно и отладчиком пройтись, чтобы убедиться, что в конкретной реализации языка "при выполнении x = FunXXX (...) и SubXXX (...,&x,...)" будет одинаковый результат. Впрочем, и тут есть простор для толкований: "это реализация языка кривая, а вообще-то в принципе я прав!".
Изображение
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Jack_A писал(а):Если архитектура фон Неймана, можно себе представить передачу данных именно в область кода, хотя это чересчур уж по-хакерски, и ни один компилятор такую мудотень не позволяет.
сегодня не позволяет, завтра позволит - что изменится в жизни программиста? он как писал x = y + 1; так и будет писать, и принципиально ему должно быть все равно, где находятся x, y и откуда именно берется 1 - единственное, что его должно волновать, так это чтобы результат был именно тот, который ожидается при данной записи.
и именно для гарантии таких "ожиданий" каждый язык имеет семантические и синтаксические правила. то есть всегда описываются правила, составив по которым текст программы, можно быть уверенным, что он приведет именно к тому результату, который должен быть (я не рассматриваю ошибки в алгоритме или опечатки).
поэтому дискуссия о терминологии не может быть не важной.
Jack_A писал(а):Только при публикации будут проблемы с пониманием
именно! если существует термин, понятный всем, то можно быть уверенным, что все пойму правильно этот термин. для математика функция, которая не возвращает результат - это абсурд. или результат, который функция возвращает, не может быть никак (в принципе никак!) использован - это тоже абсурд...
Jack_A писал(а):Если имеется туман в понимании некоторых вещей, то не зазорно и отладчиком пройтись, чтобы убедиться, что в конкретной реализации языка "при выполнении x = FunXXX (...) и SubXXX (...,&x,...)" будет одинаковый результат.
вот именно, в конкретной реализации конкретного языка. а почему вообще допускается, что могут быть и иные варианты? потому что нет стопроцентно четкого непротиворечивого определения тех самых FunXXX и SubXXX, и остается лазейка для использования всяких вариаций "а так тоже можно".

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Вот несколько определений функций из разных сфер деятельности:

1.Зависимая переменная величина (в математике, конечно очень упрощенное).
2.Проявление жизнедеятельности организма, тканей, клеток и т.п. (в физиологии).
3.Явление, зависящее от другого, основного явления и служащее формой его проявления или осуществления.
перен. Обязанность, круг деятельности, подлежащая исполнению работа.
Значение, назначение, роль.
4. Подпрограммы делятся на процедуры и функции. При этом, функции явно возвращают значение (результат) определённого типа, а процедуры явно ничего не возвращают. (Паскаль).
5. Си -приводил уже.

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

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

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

Ни к кому сейчас лично не обращался, обязательного возврата ответа не требуется.

Интересно, как скоро придет лесник модератор и всех партизан разгонит за оффтоп??? :)
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Z_h_e писал(а): Интересно, как скоро придет лесник модератор и всех партизан разгонит за оффтоп??? :)
... или перенесет в отдельную ветку, бо рациональные зерна тут проскакивают, но к заявленной ТС-ом теме - никаким боком.
Изображение
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

если считать интерфейсом, как настаивал я, только видимую программисту часть в исходном коде, то, согласно вашим определениям
void func(void) - это процедура, т.к. никакого интерфейса передачи внутрь нет, и нет ничего для выдачи наружу.
Не реализован != не используется.
Например, приведенный мной 4-й пример (с ассемблерным кодом) может быть использован извне как функция, но является всего лишь подпрограммой, потому что ассемблер другого не знает. Языком не определены интерфейсы передачи данных внутрь и наружу, их пришлось реализовывать вручную.
и так на всем протяжении спора
Ага, на все протяжении споры вы пытаетесь приписать мне свои домыслы.
Когда мы работаем на языке высокого уровня - о каком ОЗУ может идти речь? Компилятор сам определяет, где ему хранить значения - в ОЗУ или регистрах. Раз уж этот флейм пошел в теме забытого за ненадобностью ТС о микроконтроллерах, то как быть с теми МК, у которых ОЗУ вообще нет?
А чем вам регистры не ОЗУ? Впрочем, согласен, сформулировал я неудачно. Но не знаю как это сделать лучше.
начит, при выполнении x = FunXXX (...) и SubXXX (...,&x,...) вычисленное значение окажется в разных местах - во втором случае - в ОЗУ, в первом - "в возвращаемом коде" ?
Верно. Во втором случае значение окажется во вполне конкретном месте ОЗУ, причем независимо от реализации, а в первом - оно может быть получено вызывающим кодом - через регистры, ОЗУ или стек, в зависимости от реализации, и уже этим вызывающим кодом присвоено переменной х. Что там натворит оптимизатор - одному ему ведомо.
Только при публикации будут проблемы с пониманием
Сомневаюсь что кому-то из присутствующих придется писать публикации по таким философским дебрям.
или перенесет в отдельную ветку, бо рациональные зерна тут проскакивают, но к заявленной ТС-ом теме - никаким боком.
Заявленная ТС'ом тема исчерпана на первой же странице. Скорее всего, он использовал встроенный RC-генератор вместо внешнего кварцевого резонатора. Это не упоминая мелких правок по оформлению и оптимизации. Что еще тут можно обсуждать без участия самого ТСа?
Ни к кому сейчас лично не обращался, обязательного возврата ответа не требуется.
Просто не могу не ответить на такую провокационную фразу:
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

COKPOWEHEU писал(а):[
начит, при выполнении x = FunXXX (...) и SubXXX (...,&x,...) вычисленное значение окажется в разных местах - во втором случае - в ОЗУ, в первом - "в возвращаемом коде" ?
Верно. Во втором случае значение окажется во вполне конкретном месте ОЗУ, причем независимо от реализации, а в первом - оно может быть получено вызывающим кодом - через регистры, ОЗУ или стек, в зависимости от реализации, и уже этим вызывающим кодом присвоено переменной х.

Так все-таки в конце выполнения операций в обоих случаях в х окажется одно и то же значение ? операции разные, а результат - один ? каким путем - не важно, действительно, зависит от реализации. А во втором случае разве значение получено "не вызывающим кодом", а по заклинанию старика Хотябыча ? Козе понятно, в первом случае функция "ложит" результат в условленное место, дале return, а уж вызывающий код извлекает значение из "тайника" и записывает его в ОЗУ на место, определенное для переменной х ; во втором - сама процедура после вычисления записывает значение в ОЗУ на место, определенное для переменной х , дале return. Хоть с этим - то Вы согласны ?
Насчет оптимизатора - согласен, он может посмотреть, что вычисленное значение не используется, и вообще этот оператор выбросить.
Кстати, так и не поделились источником секретных сведений о том, что если нет параметров - это подпрограмма, есть - процедура. И как фамилия того агента имперьялизьма, который смущает в Вики ( и др. источниках) незрелые умы клеветой, что вторая - это частный случай первой ?
Спойлер"Имя, сестра, имя !" - А.Дюма
PS Кстати об передаче в вызывающий код в свете упомянутых мной выше хакеров. Пусть имеем
x = 3.14159 ; y = x * z ;
Хакер находит адрес в ОЗУ первой из этих команд ( каким макаром - его дело, он вумный ), меняет в ней значение константы, и дальше уже у нас будет вычисляться не длина окружности, а цена на хрен в Тамбове. Вот это - в чистом виде "передача в вызывающий код" :) Так что согласитесь - выражение выбрано неудачное.
Изображение
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

SubXXX (...,&x,...) работает напрямую с переменной, в данном случае можно сказать точнее - с ОЗУ. Эта переменная доступна для изменения кому угодно.
x = FunXXX (...) использует для передачи значения вызывающему коду (это значение может быть использовано только в вызывающем коде, как еще сформулировать?) какую-то компиляторную магию.
То есть возвращенное функцией значение передается в вызывающий код и уже этим кодом присваивается переменной. Коме этого момента, результат функции недоступен. Переменная же, изменяемая в процедуре, от этой процедуры, не зависит абсолютно - она доступна во всей области видимости (и даже вне ее - по указателю) и, кстати, может быть процедурой использовано, что не позволяет однозначно назвать такой способ получения результата чисто выходным. В отличие от входных параметров.
Про всякие извращения вроде ручного лазания по регистрам, стеку и поискам области памяти, где программа хранит константы, речь не идет.
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Ну слава Коту, кажется, сошлись в мнениях. А то я уж начал опасаться, что неправильно учил основы АЯ и ЧМП, пото'м 40 лет писал неправильные проги и студентов тому учил :) И "передать вызывающему коду" звучит корректнее, ибо передать в вызывающий код легитимным способом что-нибудь невозможно, как мы убедились.
Успехов !
PS А ответ на вопрос об паре "подпрограмма - процедура" таки замят :))
Изображение
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Тут обсуждались такие тонкости терминологии, которые в реальном программировании встречаются исчезающе редко (хотя если ошибаюсь, было бы интересно услышать хоть пару примеров).
P.S. А что, тоже захотелось поучаствовать в сраче? :P
P.P.S. Если срач высоконаучное обсуждение уже закончено, может призвать модератора, который бы разгреб эту кучу тему или снес ее не читая?
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

COKPOWEHEU писал(а): P.S. А что, тоже захотелось поучаствовать в сраче? :P
Ни в коем разе, для меня это процесс индивидуальный сиречь - непубличный :)
Не ради него, болезного, а ради установления истины:
если кто-то утверждает, что А и В - разные сущности, но источников информации не приводит, а утверждающие противоположное - отвергает, то это и есть sratch, т.е. выдавание своего мнения за истину.
Ладно, не будем испытывать терпения модеров и форумцев, я больше в этот топик не ездец ездун.
Изображение
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Jack_A писал(а):если кто-то утверждает, что А и В - разные сущности, но источников информации не приводит, а утверждающие противоположное - отвергает, то это и есть sratch, т.е. выдавание своего мнения за истину.
а если приводит источники - тогда как?
я вот приводил источники, подтверждающие моё мнение, а в качестве возражения получал ссылку на частный случай (стандарт Си) и комментарий "если физическая секунда определена неверно, то мне, может быть, сделать ее определение вместо физиков?". это как вами классифицируется, как срач или sratch? :tea:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Бритва явно затупила сь.
Встал на лапы
Сообщения: 132
Зарегистрирован: Пт окт 19, 2012 05:54:55

Сообщение koms48 »

Товарищи учёные, доценты с кандидатами, запутались вы с иксами, запутались в нулях(с)
Как можно рассуждать о том, что творит сишный компилятор? Он сотворит что угодно, как и любой ЯВУ.
Рассуждать можно тогда, когда диззасембируешь то говно, которое Си (любое) натворило (допустим мигалку светодиодом смешную)
Выскажусь:
1.Не знаючи ассемблера и даташита на камень, нехрен в Си лезть,
2. Все ЯВУ без знания даташита - профанация !!!
3. Не зная броду даташит скачивай.
4. Теперь обсирайте, если не прав.
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Почитал я эту тему... Знаете, она полезна тем, что позволяет попрактиковаться в эристике.
Но по делу... Лично мне кажется, что рассуждать на тему подпрограмм, процедур и функций в отрыве от языка и платформы вообще бессмысленно. Можно сравнить, как делается вызов кода и передачи ему неких параметров в одном и другом языке программирования (ЯВУ). Можно сравнить удобство использования этими инструментами с точки зрения программиста. Но только желательно при этом еще и посмотреть конечную реализацию этих инструментов на языке, понятном вычислительному ядру - в машинных кодах, переведенных для нашего удобства в мнемоники ассемблера.

Вот, к примеру, скажите, что спрятано под спойлером - подпрограмма, процедура или функция?
Спойлер

Код: Выделить всё

;Подпрограмма, преобразующая упакованный BCD-формат в формат binary
;На входе в R18 число в упакованном BCD-формате
;На выходе в R18 число в формате binary
BCD2BIN:
	push R1			;Сохранить на стеке
	push R0			;используемые 
	push R17			;регистры
	push R16			;

	mov R17,R18		;Скопировать преобразуемое число в рег.R17
	swap R17			;Обмен нибблов местами - теперь разряд десятков в младшем полубайте,
				        ;а разряд единиц - в старшем
	andi R17,0x0F		;Маскировать разряд единиц
	ldi R16,0x0A		;
	rcall MUL8x8U		;Умножить разряд десятков на 10
	andi R18,0x0F		;Маскировать разряд десятков в преобразуемом числе
	add R18,R0		;Сложить умноженный на 10 разряд десятков с разрядом единиц, теперь
				        ;в рег.R18 число, преобразованное в формат binary

	pop R16			;Восстановить 
	pop R17			;из стека 
	pop R0			;использованные
	pop R1			;регистры
	ret			;
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Почитал я эту тему... Знаете, она полезна тем, что позволяет попрактиковаться в эристике.
Уже неполезна. Кажется, наиболее активным "гладиаторам" (мне и ARV) наскучило.
Лично мне кажется, что рассуждать на тему подпрограмм, процедур и функций в отрыве от языка и платформы вообще бессмысленно.
Я бы не был столь категоричен. Эти алгоитмические единицы существуют во множестве языков, так что привязывать из к какому-то конкретному неправильно. Тем более что ARV утверждал, что крайне мало языков (я вот вообще ни одного припомнить не могу) реализуют их правильно, везде какие-то отклонения от теории.
Вот, к примеру, скажите, что спрятано под спойлером - подпрограмма, процедура или функция?
Подобный пример я уже приводил. Поскольку в ассемблере нет ничего более высокоуровневого, чем подпрограмма - это она и есть. При использовании внешним ЯВУ (хотя бы Си) это можно считать... эмулятором функции что ли... не могу с ходу подобрать подходящий термин. Дело в том, что передача значений реализована вручную, то есть с одной версией компилятора она будет работать нормально, а с другой - нет.
Ответить

Вернуться в «AVR»