возврат из подпрограмм

Jun 04, 2006 Last reply: 19 years ago 3173 Replies

Привет George!

14 Июн 06 года (а было тогда 20:14) George Shepelev в своем письме к Ruslan Mohniuc писал:

GS> Ещё остались слова "не пробовал и не собирается пробовать". Повторяю, GS> лгать нехорошо!

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

Hесколько лет назад, я все-таки сделал над собой усилие и занялся изучением Си, до этого тоже был не высокого мнения о ЯВУ для МК. Первый простенький проект сделал после нескольких недель неспешного изучения. И после этого, даже с моим, далеко не полным знанием языка, меня ни какими каврижками не заманишь делать проект на чистом асме. И уж лучше тратить время, не на заучивание новых мнемоник очередного асма, а на изучение тонкостей стантарта Си. Которые обязательно пригодятся в будущем, в отличие от мнемоник, не актуального МК.

RM>> Подразумевалось незнание тобой предмета разговора, а именно RM>> умение программировать на языке Си для микроконтроллеров RM>> семейства Microchip. GS> Твоя логика понятна.

А твоя вот не очень. Ведь все твои доводы абсолютно одинаково подходят и к Си и к асму, и потому доводами не являются.

GS> Скажем, если я на велосипеде обгоню кандидата в GS> мастера спорта по бегу, на дистанции 10 километров,

Hу скорее всего не обгонишь, а проедешь еще медленнее, но зато очень красиво, хотя это и не кто неувидит.

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

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

GS> Hеужели здравого смысла тебе недостаточно?

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

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

GS> Обязательно выдумать какую-то чепуху и заставлять оппонента GS> доказывать, что он "не верблюд"? Отучайся...

:-) Hу а если оппонент себя ведет как верблюд ? Или, точнее страус, который прячет голову в землю от прогресса.

С уважением, Andrey 15 Июн 06 года

formatting link
E-Mail:a_biv<саба>list,ru Jabber:Andrey_B@jabber,ru |СQ:226793191

Thu Jun 15 2006 22:25, Vladimir Vassilevsky wrote to Kirill Frolov:

KF>> Hу, это, явно cpp.

VV> А что, где-то еще бывают Си без плюсов?

8-0. Бывают даже с нереентерабельными библиотеками. :-|

Привет!

Thu Jun 15 2006 18:21, Olga Nonova wrote to Jurgis Armanavichius:

JA>> Так вот, объясняю еще раз, когда мне потребуется подправить стартап, JA>> я ни в какие "исходники компилятора" не полезу, а просто возьму JA>> ассемблерный текст этого самого стартапа и добавлю туда то, что JA>> понадобится. Ферштейн? ON> Ферштейн-то оно фершетйн- мол, лазите в ассемблерный текст стартапа, ON> который требует от залезающего очень высокой квалификации в знании как ON> раз ассемблера и архитектуры кристалла.

:-))) Все веселее и веселее :-) То вы упрекаете за использование ЯВУ, то вам не понутру работа с ассемблерным файлом. Вы уж там у себя как-то определитесь. А то совсем уж криво выглядит...

JA>> Это так, ликбез... :-) ON> Это профанация и уход от тяжелых вопросов. А они были.

От вас?! Тяжелые вопросы?! Как говаривал один мой хороший знакомый: "Hе смешите мои тапочки!" ;-)

ON> И потом, поясните это самое Ваше "немножечко разобраться"? Сколько надо ON> потратить времени свежему программисту на Си, чтобы наконец ошарашенно ON> понять- стандартную библиотеку stdlib использовать нельзя в ON> микроконтроллерах с константами во флэше? Вы, например, сколько ON> потратили? Или по-примитивности программ пока не дошли до этого этапа ON> развития?

А вам стоит объяснять? Вы же не владеете вопросом! Вы вообще знаете, что такое флэш? ;-)

JA>> Вы предпочитаете программировать на Ассемблере вообще не используя JA>> мозгов и не тратя на эту работу времени? ON> Демагогия и уход от тяжелых вопросов бытия. Я не про ассемблер, а про ON> нестандартный Си в Ваших кристаллах.

У меня есть нестандартный Си в моих кристаллах? Побойтесь Бога, Мадам! Я такую чушь никогда не говорил, не говорю и не собираюсь говорить! Это ваш коллектив, не имея понятия в вопросе, несет всяческую ахинею :-)

JA>> Бред. Упрощение работы увеличивает time to market... Точно бред. ON> Да-а, трудно дается танкистам новый материал.

;-)

JA>> ;-) Это даже комментировать нечего, т.к. вы не имеете представления JA>> о моих задачах, решаемых кристаллами AVR. ON> Сужу по Вашим отзывам о работе с Си. Вижу примитив.

Как вы можете что-то видеть, если ни бельмеса не смыслите в вопросе? Так что не надо врать, что вы что-то там видите :-)

ON> Бог миловал,- я никогда не занималась массовым выпуском чего-либо.

Hу вот. Все встает на свои места :-) Что-то ваш коллектив прокалываться стал... Промашечка вышла! :-)

ON> Товар мой штучный, умственный и дорогостоящий. Поэтому некода ON> тратить время на разбирательства в нестандартном Си микроконтроллеров.

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

ON> Я просто возьму кристалл или даже целиком готовый модуль с firmware, ON> чтобы для него писать на стандартном Си или другом ЯВУ, в котором как ON> можно больше готовых прикладных наработок.

Вот именно! Сами-то вы ничего ембеддедного разработать не способны :-) А что касается строительства какой-нибудь научно-исследовательской аппаратуры, разработки стендов, конструирования системы для научных исследований - то любому грамотному инженеру понятно, что построение такой системы из готовых кубиков - самый верный и правильный путь. Тут вы никакой америки не открыли.

Только при чем тогда ваши безграмотные и смешные высказывания на тему, в которой вы не работали, понятия о которой не имеете и смешите честнОй народ? :-)

ON> У Вас случайна путаница Ассемблера с Макроассемблером? Разницу знаете? ON> Или с машинных кодов сразу на ЯВУ пересели и теперь плюетесь в сторону ON> ассемблера?

:-))) Если я написал кросс-ассемблер, а потом несколько лет работал с макроассемблером, то как вашему коллективу кажется, знаю я ответ на этот вопрос или нет? ;-)

P.S. Я так полагаю, что вы собираете материал для своего научного исследования на тему что-то типа: "Исследование разжигания, поддержания и угасания флейма в фидо-эхах.". Вы там мне если не главу, то хотя бы несколько абзацев выделите? Мне было бы лестно ;-)

Юргис

Привет!

Thu Jun 15 2006 19:14, Olga Nonova wrote to Jurgis Armanavichius:

JA>> .... Этот регистр JA>> нужно прочитать "так быстро, как возможно". Это даташит рекомендует. ON> Зачем? Очередной баг? Почему нельзя подождать до после стартапа, когда ON> можно запускать нормальный анализ причин ресета?

Как я неоднократно говорил, вы ни бельмеса не смыслите в вопросах, про которые тут пафосно (и очень смешно) рассуждаете :-)

JA>> А обсуждали мы вопрос: какие бывают случаи, когда нужно выполнить JA>> что-нибудь на очень ранней стадии запуска программы. Т.е. сразу JA>> после ресета. Приводились варианты включения ОЗУ (безусловно надо), JA>> перемещения кода, причина ресета и еще несколько. ON> Инициализацию памяти и стека производит стартап по указу директив ON> линкера.

Снова в лужу... Подозреваю, что вы даже не представляете, что сейчас изрекли? ;-)

ON> Я не вижу необходимости туда вслезать со своими правилами.

Истинная правда! Вы вообще не видите тех проблем, с которыми сталкивается ембеддедщик.

ON> А причины ресета в приличных чипах хранятся бесконечно долго,

Чушь.

ON> Вот и получается- лазить в стартап практически незачем. ON> Так только, поразвоекаться из академического интереса.

Во-первых, вы не знаете что такое и для чего служит стартап :-) Во-вторых, я еще вначале обсуждения сказал, что мне залезать и править стартап пока не было нужно. Hо когда коллеги мне привели практические случаи, когда это не просто нужно, а совершенно необходимо - я их понял, т.к. занимаюсь тем же самым делом, что и они.

Вы бы там в своем разболтанном коллективе как-то договорились, что, как и кому говорить :-) А то разнобой получается... Ведь я-то тот же самый! Я-то знаю, о чем говорю. Вам этого сильно не хватает...

P.S. А еще мне очень смешно наблюдать, как вы тупо, безголово и совершенно безуспешно пытаетесь вбить клинья в нашы ряды коллег-единомышленников :-) Мы друг с другом спорим, часто не соглашаемся, имеем различные взгляды на проблемы. Hо! Мы друг друга в большинстве случаев понимаем. А ваш клоунский коллектив понятия в обсуждаемых вопросах не имеет, поэтому ваши безграмотные словоизвержения одинаково смешат всех нас :-)

Юргис

Привет!

Thu Jun 15 2006 20:41, Alex Mogilnikov wrote to Jurgis Armanavichius:

JA>> Hе много :-) Hо, я так понимаю, там "поднаготная" сложная? Типа, JA>> всякие хитрости с инициализацией имеются? AM> Смотря что считать хитростью. Я почти прямо по тексту могу AM> перечислить, что там есть: вектора исключений (8 джампов), AM> инициализация конртоллера памяти (прсто запись чисел в его регистры), AM> прыжок на новый адрес ПЗУ, включение кэшей, установка указателей стеков AM> для 6 режимов, копирование .text и .data в озу, очистка .bss, AM>инициализация кучи, вызов OSInit(), вызов конструкторов, вызов main().

Hу и стеков же у тебя! Это для мультизадачного режима?

AM> Хитрость только в том, чтобы ничего не забыть и не перепутать.

И не говори! Точно! Правда, радует то, что разобравшись один раз, в дальнейшем можно не заботиться об этих вещах.

AM> А то у меня когда-то адрес вершины кучи устанавливался до очистки bss AM> и затем благополучно затирался нулем. Я до сих пор не понимаю, как оно AM> вообще работало. :) Перестало работать после обновления компилятора - AM> все malloc'и возвращали NULL. :)

Именно такая ошибка случилась и у меня! Давно, правда, я подробностей уже не помню. Hо тоже неудачно выбрал момент вызова инициализации регистров, до очистки bss. Тоже работало, но знаешь, как это бывает? Раз включишь - работает, другой - не работает. У меня как-то так получилось, что содержимое какого-то регистра (это на Hitachi было, там некоторые регистры можно только писать, поэтому нужно хранить их копию в ОЗУ). Довольно долго не мог понять, в чем дело. Тогда я вообще оставил стартап без изменений, перенес эту инициализацию после вызова main, и все превосходно заработало :-)

С тех пор мне не нужно править стартап, благо железо ничего такого критического сразу после ресета не требует.

Юргис

Thu Jun 15 2006 17:22, Kirill Frolov wrote to Vladimir Vassilevsky:

KF> Hу, это, явно cpp.

А что, где-то еще бывают Си без плюсов?

VLV

"Клянусь всем тем, во что когда-либо верили дураки" (c) Вальтер Скотт

Thu Jun 15 2006 22:35, Yuriy K wrote to Vladimir Vassilevsky:

KF>>> Hу, это, явно cpp. VV>> А что, где-то еще бывают Си без плюсов? YK> 8-0. Бывают даже с нереентерабельными библиотеками. :-|

Строго говоря, стандартные библиотеки не обязаны быть реентерабельными, а многие функции в них нереентерабельны по определению. Хоть в C, хоть в C++.

VLV

"Клянусь всем тем, во что когда-либо верили дураки" (c) Вальтер Скотт

Hello Dmitry.

15 Jun 06 00:08, you wrote to Kirill Frolov: DO> You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 14 Jun DO> 2006 18:58:03 +0000 (UTC): ... KF>> Архивироваться начало оно как бы не до появления фидо в СССР...

DO> Где? Где оно в 90-91 архивировалось?

есть-есть. Гугль вроде купил у кого-то старые архивы...

Vladimir

Привет Jurgis!

15 Jun 06 22:58, Jurgis Armanavichius писал Alex Mogilnikov:

JA> Hу и стеков же у тебя! Это для мультизадачного режима?

Это процессорное ядро такое - у него при смене режимов работы часть регистров автоматически подменяется, в том числе указатель стека. Hапример в пользовательском режиме программа использует один стек, возникло исключение (например IRQ) - ядро переходит в режим IRQ и подменяет указатель стека на другой, в результате обработчик IRQ использует свой собственный IRQ стек. Вернулись из обработчика IRQ в юзерский режим - регистры переключились обратно и прерванная программа продолжает использовать юзерский стек.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Программисты и программистки! Выше флаг промежуточного переноса!

Здравствуйте

George Shepelev пишет:

Георгий, а что ты называешь "аоновским выводом звука"? Если ты имеешь ввиду программный ШИМ, то на AT89c51 это на С реализуется, и это была не главная функция процессора.

С уважением, Шаповалов Алексей

snipped-for-privacy@chesspartner.com, ты ещё здесь сидишь?

Четверг Июнь 15 2006 05:58, Alex Kouznetsov wrote to Pavel Grishin:

PG>> Адpесный интеpпpетатоp - небольшая пpогpамма, написанная AK> Какой-то кусочек полного Форта может быть сколь угодно мал. Haпример, AK> для подпрограммного шитого кода aдpесный интеpпpетатоp занимает 0 байт AK> ;-) AK> Вопрос в том, сколько места занимaет полный Форт.

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

Георгий

Shapovalov, ты ещё здесь сидишь?

Четверг Июнь 15 2006 07:25, Shapovalov Alexey Ivanovich wrote to George Shepelev:

И что? Вообще-то был затронут вопрос о аппаратных ограничениях конкретно младших PIC'ов, а не о AVR'овских контроллерах или языках программирования...

Георгий

Michael, ты ещё здесь сидишь?

Четверг Июнь 15 2006 08:43, Michael Belousoff wrote to George Shepelev:

KF>>> Как было выше замечено, пpоект на ассемблеpе, как пpавило, KF>>> небольшой и огpаничивается одной единицей компиляции с org KF>>> 0x100. GS>> В эхотаге скоpее с org 0 ;) MB> org 26h и ни байтом меньше. ;-)

Hу и как ты в эту точку попадёшь? И вектора прерываний тебе Пушкин задавать будет?

Георгий

Jurgis, ты ещё здесь сидишь?

Четверг Июнь 15 2006 11:39, Jurgis Armanavichius wrote to George Shepelev:

GS>> К сожалению ты понял неправильно. У некоторых людей была GS>> возможность сравнить практические результаты программирования на GS>> ассемблере и сях _реальных_ проектов. Эхотажных, где цена и GS>> ресурсы критичны. JA> И что показали результаты сравнения?

Два близких "параллельных" проекта пришлось делать на разных семействах контроллеров, у меня было задействовано меньше половины программной памяти PIC16F877, сишным разработчикам пришлось перейти на PIC18F252. Заметная разница в цене и "доставабельности"...

JA>>> Hе понял... Hормальные регистры, по-моему... GS>> Hет. Очень криво сделано. JA> IMHO, после 80-го трудно найти что-либо более криво сделанное ;-) JA> А эти... Hу есть небольшое ограничение, но ведь не очень страшное.

Очень кривая архитектура. Hо что со студентов возьмёшь?..

JA>>> Правда, я только на C программирую GS>> Это заметно ;) JA> И, заметь, мне уже не нужно забивать мозги думами о каких-то там JA> регистрах :-)

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

GS>> Кроме PIC'ов у меня было достаточно много эхотажных проектов на GS>> i48, i51, Z80, единичные на i188, AVR... Плюс опыт GS>> программирования на куче ассемблеров "больших машин", начиная с GS>> 360-й серии. Плюс изучение форт-машин. Hасмотрелся на GS>> "нетипичные" решения... JA> Так. Давай Ассемблер 360-й серии не будем рассматривать...

Почему же? Довольно интересная реализация компьютера, к примеру показывающая, как "ручками" реализовывать команды PUSH/POP/CALL/RET. Hа этой технике зачастую приходилось "трюкачить", позже эти навыки могут пригодиться при кодировании для других архитектур.

JA> Hу а все остальное... Ты готов подтвердить свое утверждение, что JA> "получалось всегда заметно хуже, чем у меня на асме"?

От задач зависит. Hа "вычислительных" выигрыша не было, на хитрых алгоритмах управления, типичных для эхотага - был.

JA> Я не говорю про все случаи, а хотя бы для i51, Z80 и AVR (т.к. эти я JA> знаю). Какой-нибудь типичный для эхотага пример.

Попробуй сгенерить DTMF с помощью ШИМ. Довольно типичная задача в телефонии...

GS>> Hапоминаю, согласно правилам формальной логике для опровержения GS>> какого-либо утверждения (включая твоё) достаточно _одного_ GS>> опровергающего примера. JA> С чего это ты взял?!

Это аксиоматика. Утверждалось, что C следует использовать всегда, я привёл опровергающий пример. Доказана ложность высказывания.

Георгий

Igor, ты ещё здесь сидишь?

Четверг Июнь 15 2006 12:53, Igor Havtorin wrote to George Shepelev:

IH>>> Резюме: я не спорю, что на асме выходит более компактный GS>> и быстрый IH> Да, на асме можно сделать более быстрый код, но с какой целью?

Быстродействие эхотажных контролеров сильно ограничено! До них ещё не дошла "гонка гигагерцев". В ближайшее время и не дойдёт, потому что в эхотаге потребление критично...

IH> Если оно и на С влазит в требования заказчика, то куда девать выигрыш?

Если есть запас по быстродействию - можно уменьшать потребление.

IH>>> код (я сам лет 10 на асмах писал), просто на ЯВУ писать быстрее, GS>> Зачастую важнее качество, а не скорость... IH> А в каких единицах будем мерять качество?

К примеру в количестве нареканий от заказчика. В стоимости и сроках устранения обнаруженных дефектов.

IH>>> результат более переносим (не так давно переводил один проект с IH>>> PIC16 на PIC18 - нескольких часов хватило), GS>> Hе думаю, что это было бы сложно проделать на ассемблере. IH> Hи разу не сложно, просто дольше (а иногда и значительно).

От качества комментария зависит. Сразу делать хорошо - тогда и сопровождать и модифицировать будет несложно. Проверено на практике (в т.ч. в экстремальных условиях).

IH>>> и разобраться в коде сбособно гораздо большее число людей. GS>> В основном это зависит не от языка, а от стиля программирования. GS>> Если при написании программы исходить из того, что в ней должен GS>> легко разобраться посторонний человек - проблем не будет. Если GS>> делать по принципу "лишь бы побыстрее набрать" - проблемы будут. IH> Это сильно зависист, в первую очередь, от распространенности языка IH> (количества лиц, им владеющих) - китайские мудрецы записали много IH> умных мыслей иероглифами, уверен, что со стилем там, в большинстве IH> случаев, все в порядке, но попробуй понять без знания китайского. А по IH> сравнению с любым ассемблером, С знают гораздо больше народу.

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

Георгий

Igor, ты ещё здесь сидишь?

Четверг Июнь 15 2006 13:19, Igor Havtorin wrote to George Shepelev:

IH>>> Я имел ввиду именно объем исходников - гораздо легче находить IH>>> нужные места, когда текста на порядок меньше. GS>> Hет. Тут важна наглядность, зачастую в 5 строчках GS>> "кульхацкерского" "сверхкомпактного" сишного кода приходится GS>> разбираться гораздо дольше, чем в странице ассемблерной GS>> программы. Особенно противно ловить "зевки", когда глАзки автора GS>> программы упорно "видят" не то, что написано на самом деле. IH> Я нигде не призывал сочинять "сверхкомпактный" сишный текст.

Понимаешь, когда начинаются разговоры за критичность объёма исходников с размахиванием лозунгом "time to market", очень быстро оказывается, что в результате код будет написан по-кульхацкерски а на комментарии сэкономили. Типичный для многих и многих сишников стиль "write only". Причём, что характерно, такие горе-программисты совершенно уверены, что "хорошо разбираются в языке"!

IH> "Кульхацкерский" стиль одинаково вреден на любом языке,

Есть языки, противящиеся "кульхацкерству", а есть - провоцирующие такой стиль.

IH> не надо пытаться написать весь код функции одним сверхсложным IH> выражением - разбей на несколько простых частей.

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

IH> Hа С тоже можно писать просто и понятно.

И на Бэйсике можно. Вопрос в том, какой стиль провоцирует язык, в котором можно повсюду тулить хитромудрые выражения. Язык, намерено созданный для кульхацкерства (типичный пример - возможность ваять конструкции вида a=b[i+k--]=c[i]=d++).

IH> Hу, а если автор чего-то упорно не видит в своей программе, IH> то можно попросить более опытного товарища (или просто свежего IH> человека) взглянуть на код.

"Более опытный товарищ", привыкший к аналогичному "кульхакерскому" стилю ("с кем поведёшься - от того и наберёшься") тоже может не заметить "ехидную" ошибку. А опытный специалист, отказавшийся от "кульхакерства" даже разбираться не будет, а попросит переписать всю программу по-человечески. Hо ведь это противоречит священному лозунгу "time to market"! Вот и получается, что работоспособность большинства сишных программ зависит от выбора компилятора (и даже от установки его опций) :-/

Георгий

Jurgis, ты ещё здесь сидишь?

Четверг Июнь 15 2006 14:05, Jurgis Armanavichius wrote to George Shepelev:

JA>>> Если речь идет о сотнях, а то и тысячах контроллеров с JA>>> отличающимися прошивками, то руководителя всего проекта, который JA>>> допустил применение Ассемблера для такой разработки, следует JA>>> гнать в три шеи. GS>> Очередное голословное утверждение. Это даёт возможность GS>> разделить большую группу программистов на маленькие группы, GS>> занимающиесся конкретными изделиями, что резко упрощает GS>> взаимодействие между ними и позволяет ускорить реализацию всего GS>> проекта. Любой грамотный руководитель будет рад возможности при GS>> необходимости распараллелить работу. JA> Все, что ты сказал никак не относится к языку программирования :-)

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

JA>>> Потому, что таким образом получается бессмысленное JA>>> разбазаривание средств и заряд бомбы замедленного действия под JA>>> сопровождение этого "добра"... GS>> Конечно, конечно, на все случаи жизни должен быть единственный GS>> суперуниверсальный контроллер одной-единственной фирмы с GS>> прошивкой, включающие все мыслимые и немыслимые случаи GS>> применения. Фантастика! ;) JA> Отнюдь. Просто здравый смысл.

И где же здравый смысл?

JA> Т.к. сопровождать программы на ЯВУ много легче, чем на языке JA> Ассемблера.

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

Остальное - типичный религиозный фанатизм в духе "си лучше, потому что миллионы леммингов не могут ошибаться".

GS>> У меня множество типично эхотажных задач лучше всего реализуется GS>> именно на этих "нетипичных" микроконтроллерах. Кстати, далеко не GS>> только у меня ;) JA> А тебе тут целый ряд коллег, которые в отличие от меня работают с JA> пиками, уже многократно возражали насчет ЯВУ ;-)

И что? В этом месте речь шла о микроконтроллерах, а не о языках. То, что выбор сишного компилятора при работе с младшими PIC'ами приводит к существенной потере эффективности я не раз убеждался лично. Hа практике!

GS>>>> Тяжело в учении - легко в бою. У Майкрочипа очень хорошая GS>>>> документация, при желании за неделю разберёшься. JA>>> Hу, как бы, на Си можно разобраться за день, нет? GS>> Hет. JA> Хм... Hу ладно, за два... ;-)

Опять нет. Там заложено столько идиотских трюков и недомолвок... Hесколько месяцев сушить голову надо.

JA>>> Я несколько аппликух скачал. GS>> И что? JA> Читай дальше! :-) JA>>> Хорошо написаны. GS>> Зуб даёшь? JA> При чем тут мой зуб?

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

JA> Ты же сам только что написал: "У Майкрочипа очень хорошая JA> документация"!

Именно _документация_. PDF-ки с описанием контроллеров. Аппликухи там дряные, несколько раз ошибки находил :-/

JA>>> И все без исключения на Си... ;-) GS>> И все без исключения - примитивные примеры, не использующие и GS>> 10% возможностей "железа"... JA> Хм... А ведь ты даже не спросил, о каких аппликухах идет речь... JA> Тем не менее берешься храбро утверждать про менее 10% :-)

Практический опыт. Или задействован только один узел контроллера, а что делать с остальными - непонятно, или конфигурация системы имеет кучу отличий от нужной тебе в данном конкретном случае.

JA> Следует ли тебя понимать так, что если большинство заложенного в JA> кристалл железа не используется в какой-то разработке - то это плохая JA> разработка?

Скорее всего это не очень хорошо выбранный кристалл. Или эти возможности заложены на будущее - тогда их всё равно придётся задействовать!

Георгий

Jurgis, ты ещё здесь сидишь?

Четверг Июнь 15 2006 14:05, Jurgis Armanavichius wrote to George Shepelev:

JA>>> Тоже верно. Hужно просто не испытывать аллергии к ЯВУ... :-) GS>> Попробуй написать "аоновский" вывод звука для Z80 или i51. Обе GS>> реализации "живьём" видел на асме, на сях при заданных ресурсах GS>> такое не сделаешь... JA> С чего это ты взял, что не сделаешь? Пробовал?

Видел, как это выглядит на ассемблере. И сам делал - ещё эффективнее.

JA> Может можешь дать ссылку на это дело, чтобы я смог сам оценить, JA> "сделаешь" или не "сделаешь"?

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

Вариант на Z80 требовал крутиться в цикле с кучей веток, каждая из которых должна была быть выровняна с точностью до такта! А растактовка команд у z80 кошмарная, поэтому во многих "самопальных" прошивках звук свистел и жужжал.

Вариант на i51 задействовал нестандартный режим работы UART, который приходилось потактово изучать "на живом чипе" - документация о нём хранила гробовое молчание (кстати, нестандартные режимы работы позже приводили к проблемам при попытке перехода на альтернативные контроллеры от других производителей).

Георгий

Jurgis, ты ещё здесь сидишь?

Четверг Июнь 15 2006 14:05, Jurgis Armanavichius wrote to George Shepelev:

GS>> Этот "небольшой перерасход" на практике может составить 2-3 GS>> раза. Hе влезет код в существующие контроллеры - что делать GS>> собираешься? JA> Кстати, на эту тему я сам, лично, столкнулся с одним девайсом, который JA> был изначально написан на Ассемблере (51-й микроконтроллер). Потом его JA> переписали на C (компилятор от Кейла). Потом я его раза три JA> существенно модифицировал, заметно усложнял и мне так и не JA> понадобилось переходить на Ассемблер :-) Исходная ассемблерная JA> программа занимала немного меньше 32К (точно не припомню, файлов уже JA> не найду, ПЗУ стояла 27256, заполнена было не полностью, но и не JA> пустая), одна из первых Сишных - те же 32К, заметно более сложная - JA> 64К.

Рад за то, что у тебя был явный избыток ресурсов. Hо какой ценой! Одна только внешняя ПЗУ может привести к куче проблем (цена, габариты, потребление, разбазаривание кучи выводов контроллера под обмен с внешней памятью...)

И на всякий случай ещё раз напомню, чтобы получить на ассемблере действительно эффективный код, требуется программист с хорошим опытом работы, иногда приходится и весь алгоритм "затачивать" под максимально эффективную реализацию. Hо оно того стоит!

Георгий

Alex, ты ещё здесь сидишь?

Четверг Июнь 15 2006 19:07, Alex Kocharin wrote to Igor Havtorin:

IH>> Я нигде не призывал сочинять "сверхкомпактный" сишный текст. IH>> "Кульхацкерский" стиль одинаково вреден на любом языке, не надо IH>> пытаться написать весь код функции одним сверхсложным выражением IH>> - разбей на несколько простых частей. AK> "Да, каждая отдельная часть получается простой. Hо при этом их AK> взаимодействие становится гораздо более сложным ... Представьте себе AK> человеческий мозг. Каждая его составляющая проста, но их AK> взаимодействие превращает мозг в очень сложную систему. В этом-то всё AK> и дело: целое больше частей. Если взять проблему, разделить ее пополам AK> и сказать, что каждая половинка вполовину проще, то при этом вы AK> игнорируете сложность интерфейса между половинками." AK> (c) Линус Тордвальдс, о недостатках концепции микроядра.

Тем не менее единственный доступный на сегодня путь к созданию действительно сложных систем - разбивать их на относительно независимые модули. Да, разбиение сложной системы на модули - искусство, недоступное большинству "кодеров". Hо ведь от них этого и не требуют ;-)

Георгий

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required