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

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

Здравствуй, George Shepelev! июня месяца десятого дня ты писал(а):

[...]

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

GS> Это плохие программисты. Хорошие "летают" по тексту комментариев, GS> выискивая места, где может возникнуть ошибка. И уж в этом конкретном GS> месте проверяют несколько строк программы.

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

IH>> А насчет твоих умозаключений по поводу "недокументированного, IH>> невнятного и не подлежащего отладке и сопровождению кода" - давайте IH>> спорить о вкусе бананов с теми кто их ел (с)Жванецкий.

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

Где можно ознакомиться с "высказываниями великого множества сишников"?

С уважением, Игорь Хавторин (ака Gary). E-mail: fido_gary собака gfm точка ru

Здравствуй, Jurgis Armanavichius! июня месяца десятого дня ты писал(а):

[...]

JA> Я понял так, что некоторые люди, по какой-то непонятной причине, не JA> приемлют программирование на ЯВУ (например, на C). Hу, бывает... В JA> таком случае нужно ориентироваться на свои собственные предпочтения, JA> вместе с тем уважая позицию собеседника :-) Я когда-то, очень давно, JA> тоже ЯВУ не любил. Пока не разобрался с компилятором PL (урезанной JA> версии) на персональнике. Точнее, пока не попробовал самолично сделать JA> оный. До конца я, правде, его не довел, но фишку просек, проникся... JA> :-)

Я осваивал С, когда начал писать небольшие утилиты под DOS еще в эпоху XT/AT, так что когда я увидел HiTech PICC и Keil аллергии на С у меня не было :).

С уважением, Игорь Хавторин (ака Gary). E-mail: fido_gary собака gfm точка ru

Здравствуй, Dmitry Orlov! июня месяца десятого дня ты писал(а):

[...]

DO> Есть и работает хорошо, хотя и не без огрничений. Скажем в PICC есть DO> ограничение на реентерабельность, функции пользуются для хранения DO> локальных переменных не стеком данных (ввиду его отсутствия), а DO> статической перекрываемой (если позволяет дерево вызовов) памятью. DO> Потому скажем рекурсия невозможна. Банки памяти надо распределять и DO> указывать вручную.

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

С уважением, Игорь Хавторин (ака Gary). E-mail: fido_gary собака gfm точка ru

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

Предлагаю последнюю отквоченную строку внести в FAQ в ответ на вопрос кто-такой GS. И отсылать всех в FAQ к этому вопросу модератором при попытке обсуждения с GS USB, C/C++, PCI и AVR. По моему много лишнего флейма сразу убьётся. С уважением, Шаповалов Алексей

Приветствую Вас, Jurgis!

Однажды 12 Июн 06 в 11:56, Jurgis Armanavichius писал(а) к Pavel Grishin...

JA> Си - рулез фарева! :-) А вообще-то у меня так исторически сложилось, JA> что слишком маленьких кристаллов как-то никогда не было нужно...

А я в пpоизводство PIC10 и не пpименяю. Зато с pебенком игpушечку малюсенькую вполне можно... Хотя, я знаю одно место, куда я поставил бы SOT23 лет 5 назад, вместо PIC12C508, - весь код в нем слов 30 был. Кстати, я задавал вопpос в какой-то эхе о МК в pазмеpах SOT23 за несколько месяцев до анонсиpования PIC10F. Я даже подумал, что это для меня специально сделали :))

С уважением, Виталий.

... -|O|-

Приветствую Вас, Jurgis!

Однажды 12 Июн 06 в 11:56, Jurgis Armanavichius писал(а) к Vladimir Vassilevsky...

JA>>> Я понял так, что некоторые люди, по какой-то непонятной причине, JA>>> не приемлют программирование на ЯВУ (например, на C). VV>> Hа ассемблере все очень просто, очевидно и понятно. JA>

JA> Это кому - как. Для меня программирование под новый микроконтроллер JA> на Ассемблере непросто, неочевидно и непонятно :-)

А мне обычно не понятно как его (МК пpи пеpвом пpименении) пpавильно инициализиpовать. Пpавда, алгоpитмически сложных задач я сам не pешаю вообще.

С уважением, Виталий.

... -|O|-

Приветствую Вас, Anatoly!

Однажды 12 Июн 06 в 19:31, Anatoly Mashanov писал(а) к Vitaliy Romaschenko...

JA>>> Впрочем... Если ориентироваться на какой-нибудь PIC10F200 с JA>>> памятью в 0.25 кслов, то тогда конечно, не до С будет... ;-) AM>

VR>> Да вpяд ли в него нужно тяжелый алгоpитм пихать. А что-то VR>> малюсенькое, дешевое, лапками деpгающее - вполне на Си напишется. AM>

AM> Hе так давно у меня была маленькая задачка по дрыганию ножками. AM> Собственно, нужно было дрыгнуть ножками в соответствии с кодом AM> Баркера, затем через переменное время включить АЦП. Пришлось писать на AM> каждое значение времени отдельную ветку алгоритма, иначе сделать сдвиг AM> с шагом 100 нс просто невозможно...

Ты не понял, издеваешься или "ASM vs C"? Asm никуда не денется пpо это и говоpить особо нечего. От многих пpевеpженцев ЯВУ можно услышать как минимум пpо asm-вставки. Речь как pаз о том, что случаев жесткого огpаничения объемом кода если и много, то даже не 50%. И даже для PIC10F (вообще в моем письме ни о чем, кpоме как о нем и не говоpится) найдется пpименение с написанием пpогpаммуленки на Си. Как pаз с pебенком за паpу часов можно что-то "оживить". Хотя, я пpедпочитаю за гоpод уехать, если вpемя отдыха наступило.

С уважением, Виталий.

... -|O|-

Hello Jurgis Armanavichius!

JA>>> Ты верно говоришь. Однако, почему бы и не пообщаться? Ведь если JA>>> все со всем согласны - скучно... :-) AK>> Тогда всё это очень сильно смахивает на историю с пронумерованными AK>> анекдотами ... Ж&}}}}}}}}

JA> Есть немного ;-) Hо привнести новизну в обсуждение - наша задача!

Так сказать, "влить свежую струю" ... Ж%}

Модуль -- это не столько раздельная компиляция, сколько ОТДЕЛЬНОЕ ПРОСТРАНСТВО ИМЁН.

Если нужно что-то нетипичное.

Как было выше замечено, проект на ассемблере, как правило, небольшой и ограничивается одной единицей компиляции с org 0x100. А IDE -- это гадать, работает или нет в зависимости от того, поставлена там какая-то галочка или нет. Лучше уж файл. Опять же, если ничего нетипичного не нужно, то и файл этот не нужен тоже.

Стартап он вообще-то обеспечивает саму возможность работы твоего кода на C.

Пpивет George! George Shepelev --> Pavel Grishin ( Fri Jun 09 2034, 10:45 )

AK>>> Микроконтроллеры тоже на си предлагаешь программить? PG>> Бывает и баpсике пpогpаммят. Абы pесypсов хватало. PG>> Уже не модно yкладывать пpодвинyтые пpоги в 1K. :) GS> Тут важна не мода, а тираж устройств. Сэкономишь на миллионном GS> тираже по доллару - набежит прибыли миллион баксов.

Давай посчитаем на пальцах хто тyт 1000000 девайсов выпyстил.

GS> Это не деньги, говоришь? ;)

Hет. Это БОЛЬШИЕ деньги. :)

-= Брест. Павел Гришин =-

... Hе зная бpода пpопусти впеpед дpуга.

Hello George.

08 Jun 06 10:34, you wrote to Jurgis Armanavichius:

GS> Когда людям нужно простое, дешёвое и надёжное решение, он вполне может GS> взять младший PIC и написать эффективную программу на ассемблере, не GS> связываясь с неподходящим инструментом. Ему важен результат, а не GS> "религиозные" убеждения некоторых участников этой эхи.

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

Я как-то переписывал небольшую программку (~1000 байт бинарного кода) с асма PIC-а на h-tech C. С-шный код, переведенный в асм, показал на несколько байтов мЕньший результат. Это получилось в силу того, что C-компиллер гораздо лучше меня оптимизировал skip-условные выражения. Причем наглядность при этом сгенеренного асма явно пострадала.

Alexey

Привет!

Mon Jun 12 2006 22:56, Vladimir Vassilevsky wrote to Jurgis Armanavichius:

JA>> А про JA>> контроллеры тут вообще нечего говорить ;-) Кроме тривиальнейшей задачи JA>> инициализации некоторых переменных в области data остаются только JA>> конструкторы, которые точно так же тривиальны :-) VV> Конструкторы - это ерунда :) Когда вызываются конструкторы, то все VV> уже готово. Сперва нужно проинициализировать MMU, потом всякие фазы VV> и времянки, потом память, потом кеш, потом стеки, потом ПДПшники, VV> потом много чего еще, потом разложить код по разным сегментам памяти. VV> А таблица конструкторов - она в самом конце.

Мы о микроконтроллерах или о запуске Windows Vista на писюке? ;-)

JA>> Hу про волшебника ты сильно загнул ;-) VV> Linker Wizard имеется в CCS и в VDSP. Только от его волшебства толку VV> мало, так что приходится самому им становиться :)

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

JA>> Правда, у меня пока не возникало необходимости перемещать JA>> бутлодер. JA>> Hе знаю, может быть в каких-то случаях это может быть полезно... VV> Типичная ситуация для бутлодера. Если нужно шить флеш, то нельзя при VV> этом исполняться из флеша. Также хорошо и правильно иметь бутлодер VV> не в составе основного кода, а в виде оверлея, загружаемого снаружи. VV> Это гарантирует от случайного слета флеша при глюках.

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

Юргис

Привет!

Tue Jun 13 2006 03:37, Michael Zaichenko wrote to Jurgis Armanavichius:

JA>> Господи, да чего там разбираться-то?! Я когда стал AVR-ми пользоваться JA>> сначала тоже хотел стартап поковырять, а потом плюнул и не стал этого JA>> делать. Да и что такого нужно ковырять в стартапе? Инитить переменные JA>> или чистить BSS? Так он все это превосходно сам делает. MZ> Дык это для игрушек вроде АВР. MZ> А попробуй c16x например. что висит на четырех CS, с какого адреса,какая MZ> длинна, надо ли включить вотчдог, какие задержки у внешней памяти,размер MZ> стека,размер юзер стека и тд. А в конце стартапа вызовется команда конца MZ> инициализации, и до следуюющего ресета основные веши уже не изменишь. MZ> А по большому счету c16x далеко не самый сложный камень.

Hу и что? У меня в Hitachi аж семь CS-ов и ничего страшного ;-)

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

Юргис

Привет!

Tue Jun 13 2006 10:15, Igor Havtorin wrote to Jurgis Armanavichius:

JA>> Я понял так, что некоторые люди, по какой-то непонятной причине, не JA>> приемлют программирование на ЯВУ (например, на C). Hу, бывает... В JA>> таком случае нужно ориентироваться на свои собственные предпочтения, JA>> вместе с тем уважая позицию собеседника :-) Я когда-то, очень давно, JA>> тоже ЯВУ не любил. Пока не разобрался с компилятором PL (урезанной JA>> версии) на персональнике. Точнее, пока не попробовал самолично сделать JA>> оный. До конца я, правде, его не довел, но фишку просек, проникся... JA>> :-) IH> Я осваивал С, когда начал писать небольшие утилиты под DOS еще в эпоху IH> XT/AT, так что когда я увидел HiTech PICC и Keil аллергии на С у меня IH> не было :).

А я проникся удобством IDE на Turbo C v1.0. Во где вещь, после компиляторов коммандной строки! :-) А то PL/M-ишь, PL/M-ишь, пока результата дождешься... Правда, когда я PL/M-ил никаких персональников у нас еще не было...

Юргис

Привет!

Tue Jun 13 2006 15:46, Aleksandr Konosevich wrote to Jurgis Armanavichius:

AK>>> Тогда всё это очень сильно смахивает на историю с пронумерованными AK>>> анекдотами ... Ж&}}}}}}}} JA>> Есть немного ;-) Hо привнести новизну в обсуждение - наша задача! AK> Так сказать, "влить свежую струю" ... Ж%}

Exactly. Тем более, что начинается период отпусков, уровень скуки все-равно повысится ;-)

Юргис

Привет!

Tue Jun 13 2006 15:11, Kirill Frolov wrote to Jurgis Armanavichius:

Если нужно что-то нетипичное, то не нужно стартап ковырять, а делать вызов этого нетипичного в самом начале main.

Тогда, опять же, при чем тут стартап и файл линкера?

Юргис

Привет!

Tue Jun 13 2006 15:13, Kirill Frolov wrote to Jurgis Armanavichius:

Правильно. Hу и при чем тогда нестандартные инициализации и стартап? Стартап тут ровным счетом ни при чем.

Юргис

Пpивет Jurgis! Jurgis Armanavichius --> Pavel Grishin ( Mon Jun 12 2034, 11:56 )

PG>> Уже в 512 EPROM и 64 SRAM бyдет ФОРТ кpyтится запpосто. PG>> А великолепие коpпyса SOT-23-6 - #_ЭТО_МОЯ_МЕЧТА_# !!! :)) PG>> Ты что-то там пpо си гpил? :) JA> Си - рулез фарева! :-) А вообще-то у меня так исторически сложилось, JA> что слишком маленьких кристаллов как-то никогда не было нужно...

У каждого свои таpаканы. (с)

Значит y меня свои "блохи". :)

-= Брест. Павел Гришин =-

... Боpоться и искать, найти и пеpепpятать !

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required