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

Здравствуй, Jurgis!

Как то 05 Jun 06 в 21:33, Jurgis Armanavichius писал Michael Belousoff:

[...]

MB>> Может быть, это из pазpяда паpанойи, но я бы написал тyт: MB>> if(...) return ERROR; MB>> пpедваpительно опpеделив, что такое ERROR. :)

[...]

MB>> А вот за такyю pасстановкy скобок я бы кое-комy кое-что MB>> ампyтиpовал. Хотя пpивеpженцев такого стиля немало. Мне MB>> даже как-то пpиходилось pаботать с чyжими текстами такого MB>> же вида. Пеpвым делом я pасставил скобочкy под скобочкой. MB>> :-)

JA> Согласен! Hо, таким способом я экономлю целую строку листинга! :-) JA> (Я кроме if также ставлю скобки еще и в while, do, for и т.п. ;-) Hе на этом экономить надо :))) Hаверное, ты еще и пробелы нигде не ставишь :) Вообще, текст становится гораздо более читабельным, если его сделать "размазаннее", например, писать вместо

for(i=0;i<255;i++)if(a<b)return(0);

вот так:

for( i=0; i<255; i++ ) if( a < b ) return 0;

хотя, конечно, дело привычки...

JA> Юргис

Пока! Pasha

rа4аrb@rаmblеr.ru

_*NO CARRIER*_ Я слушаю Guano Apes - Dont Your Turn Your Back On Me [03:13]

Reply to
Pasha Popov
Loading thread data ...

Hi, All!

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

подпрограмма выглядит так:

sub_name: <всякая всячина>

quit_sub_name: ret

я так понимаю, одна подпрограмма-- один ret. но частенько бывают случаи, когда надо, например, сделать ветвление, да ещё и не одно. и выходить по многу раз. вместо того, чтобы лепить rjmp quit_sub_name грамотно было бы писать просто ret

и чё делать. я пишу именно переходы. мне кажется-- писать кучу ret это как goto юзать.

как делаете вы?

oleg

Reply to
oleg dozhdev

Sun Jun 04 2006 20:14, Alex Mogilnikov wrote to oleg dozhdev:

AM> увидев ret, читающий текст программы AM> сразу понимает, что произойдет при выполнении.

По иннерции выполнятся еще три команды подряд из пайплайна, которые стоят сразу после ret. Потом регистр ret загрузится в PC. Наглядно и очевидно, не правда ли? Счастливого писания на ассемблере :)

VLV

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

Reply to
Vladimir Vassilevsky

Привет oleg!

04 Jun 06 13:51, oleg dozhdev писал All:

od> и чё делать. я пишу именно переходы. мне кажется-- писать кучу ret od> это как goto юзать.

Забавное мнение, ибо goto - это как раз переход...

od> как делаете вы?

Я использую и переходы, и ret'ы, и goto, и все прочие известные мне средства используемых языков в зависимости от того, что более эффективно в каждом конкретном случае. Религиозные предпочтения среди критериев выбора стоят на последнем месте.

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

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Аэроволны: ментол и эвкалипт для носа, мед и лимон для рота!

Reply to
Alex Mogilnikov

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, oleg dozhdev! You wrote in conference fido7.ru.embedded to All on Sun, 04 Jun 2006 12:51:02 +0400:

od> вот назрел у новоиспечённого программера такой вопросец. od> сейчас много приходится писать на ассемблере. в чём же дело... od> а вот!

А зачем на ассемблере писать, пиши на С и пусть у компилятора голова болит. В С несколько return из функции - совершенно нормальное дело.

dima

formatting link

Reply to
Dmitry Orlov

Mon Jun 05 2006 00:54, Alex Kocharin wrote to Dmitry Orlov:

od>>> вот назрел у новоиспечённого программера такой вопросец. od>>> сейчас много приходится писать на ассемблере. в чём же дело... od>>> а вот! DO>> А зачем на ассемблере писать, пиши на С и пусть у компилятора голова DO>> болит. В С несколько return из функции - совершенно нормальное дело.

AK> Микроконтроллеры тоже на си предлагаешь программить?

Логичней на С++, но в крайнем случае можно и на С. Если важен результат, а не процесс. :-)

"Всякий градоправитель да будет добросердечен"

Reply to
Yuriy K

Привет Vladimir!

04 Jun 06 18:53, Vladimir Vassilevsky писал Alex Mogilnikov:

AM>> увидев ret, читающий текст программы AM>> сразу понимает, что произойдет при выполнении.

VV> По иннерции выполнятся еще три команды подряд из пайплайна, которые VV> стоят сразу после ret. Потом регистр ret загрузится в PC.

Выдыхай!

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Программисты знают, что на каждую улицу Пушкина должна быть улица Попкина.

Reply to
Alex Mogilnikov

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Alex Kocharin! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Sun, 04 Jun

2006 23:54:54 +0400:

od>>> вот назрел у новоиспечённого программера такой вопросец. od>>> сейчас много приходится писать на ассемблере. в чём же дело... od>>> а вот!

DO>> А зачем на ассемблере писать, пиши на С и пусть у компилятора DO>> голова болит. В С несколько return из функции - совершенно DO>> нормальное дело.

AK> Микроконтроллеры тоже на си предлагаешь программить?

Именно микроконтроллеры и предлагаю. Для компьютеров чаще более высокоуровневые средства удобней. А все неэкзотические контроллеры с шириной данных 8 и более бит именно на С.

dima

formatting link

Reply to
Dmitry Orlov

,-' Hello, Dmitry Orlov! How is your connection today?

od>> вот назрел у новоиспечённого программера такой вопросец. od>> сейчас много приходится писать на ассемблере. в чём же дело... od>> а вот! DO> А зачем на ассемблере писать, пиши на С и пусть у компилятора голова DO> болит. В С несколько return из функции - совершенно нормальное дело.

Микроконтроллеры тоже на си предлагаешь программить?

`-._ --- Alexander Kocharin ---

Reply to
Alex Kocharin

Hello, Alex! You wrote to Dmitry Orlov on Sun, 04 Jun 2006 23:54:54 +0400:

AK> ,-' Hello, Dmitry Orlov! How is your connection today?

od>>> вот назрел у новоиспечённого программера такой вопросец. od>>> сейчас много приходится писать на ассемблере. в чём же дело... od>>> а вот! DO>> А зачем на ассемблере писать, пиши на С и пусть у компилятора DO>> голова болит. В С несколько return из функции - совершенно DO>> нормальное дело.

AK> Микроконтроллеры тоже на си предлагаешь программить?

Господи. а на чем же их еще программировать? На Си, конечно. Максимум - ассемблерные вствки в критичных местах. Это только вопрос наличия более-менеее нормальных компиляторов. Сколько я писал на асме под интелы всякие, а когда PL/M под 51-й повяился - счастью небыло предела! Лет 5 писал для ПИКов на асме, пока Си нормальным стал - уже 8 лет на нем пишу. АВР - был первым микроконтроллером в моей работе, для которого я вообще сразу писал на Си, без ассемблерной практики.

With best regards, Alexandr Torres.

[ Бомжей любить - не эхи модерить! ]

2:461/28, E-mail: snipped-for-privacy@yahoo.com

formatting link

Reply to
Alexandr Torres

Haile ande faile Alex!

DO>> А зачем на ассемблере писать, пиши на С и пусть у компилятора голова DO>> болит. В С несколько return из функции - совершенно нормальное дело. AK> Микроконтроллеры тоже на си предлагаешь программить?

(Задумчиво рассматривая резултаты выполнения apt-cache search avr) А в чём проблема?

Reply to
Alexey Shaposhnikov

Привет!

Sun Jun 04 2006 13:51, oleg dozhdev wrote to All:

od> я так понимаю, одна подпрограмма-- один ret. но частенько бывают od> случаи, когда надо, например, сделать ветвление, да ещё и не одно. и od> выходить по многу раз. вместо того, чтобы лепить od> rjmp quit_sub_name od> грамотно было бы писать просто od> ret od> и чё делать. я пишу именно переходы. мне кажется-- писать кучу ret od> это как goto юзать.

Это старая история про "goto" :-) Когда-то была мода: не использовать goto, т.к. они, якобы, мешают программисту писать понятные программы (запутывая ее текст многими переходами неизвестно куда).

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

int CUSBclass::SendBlock(BYTE *data_ptr,int data_len) { if(TransmitEndpoint == NULL) return -1; // Error return BYTE send_buffer[128]; // Prepare data to send ... // Call internal function return _send_block(...); // Return sent bytes number }

чем такая:

int CUSBclass::SendBlock(BYTE *data_ptr,int data_len) { if(TransmitEndpoint != NULL) { BYTE send_buffer[128]; // Prepare data to send ... // Call internal function return _send_block(...); // Return sent bytes number } else { return -1; // Error return } }

Сказанное еще в бОльшей степени относится к программе на Ассемблере, т.к. текст ассемблерной программы обычно длиннее и непонятнее, чем на ЯВУ (языке высокого уровня).

А вообще можно посоветовать переходить к программированию на C/C++ :-) Разве что тобою движет спортивный интерес...

Юргис

Reply to
Jurgis Armanavichius

Привет!

Mon Jun 05 2006 00:54, Alex Kocharin wrote to Dmitry Orlov:

DO>> А зачем на ассемблере писать, пиши на С и пусть у компилятора голова DO>> болит. В С несколько return из функции - совершенно нормальное дело. AK> Микроконтроллеры тоже на си предлагаешь программить?

Всенепременно! Причем, на C/C++. Я довольно много работал с семейством

51-х микроконтроллеров, потом AVR-8 и 16-битными Hitachi. Hа 51-х и AVR пробовал тщательно разбирать порождаемый компилятором код. Конечно, при использовании Ассемблера можно чуть-чуть выиграть по объему кода, но это не очень существенно. Дело в том, что нынешние компиляторы C/C++ стали вполне качественными, код порождают достаточно эффективный. В тех же редких случаях, когда конкретное прерывание очень важно по скорости (что само по себе нехорошо, т.к. не стоит выжимать из аппаратуры все до капли ;-) вполне можно написать один-два крохотных модуля на языке Ассемблера.

А программирование на ЯВУ имеет то неоспоримое преимущество, что дает существенный выигрыш по скорости разработки и отладки программы. Ведь дывно действует закон, что количество отлаженных операторов в день не сильно зависит от языка программирования. Поэтому разрабатывая программу на C/C++ можно получить результат за меньшее время, или за то же время получить более качественную программу.

Юргис

Reply to
Jurgis Armanavichius

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Alex Kocharin! You wrote in conference fido7.ru.embedded to Yuriy K on Mon, 05 Jun 2006 13:18:50

+0400:

AK>>> Микроконтроллеры тоже на си предлагаешь программить? YK>> Логичней на С++, но в крайнем случае можно и на С.

AK> Микроконтроллеры?

Именно.

AK> Насколько я помню, это такие штуки с частотой меньше мегагерца... На

Можно и меньше, но обычно больше и существенно.

AK> них тормозить сишный код не будет?

Код выполняется в них машинный, а не сишный.

AK> Насколько я помню, они на асме программируются, иногда вообще в машинных кодах... :-)

Программируются они программатором или бутлоадером.

AK> И есть ли сишные компиляторы под них? Что-то не видел...

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

YK>> Если важен результат, а не процесс. :-)

AK> Если бы мне был важен процесс, я бы писал сейчас в фипсе, запущеной AK> через wine под Linux 0.01... ;-)

Кому какое дело в чем ты сейчас пишешь?

dima

formatting link

Reply to
Dmitry Orlov

,-' Hello, Yuriy K! How is your connection today?

AK>> Микроконтроллеры тоже на си предлагаешь программить? YK> Логичней на С++, но в крайнем случае можно и на С.

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

И есть ли сишные компиляторы под них? Что-то не видел...

YK> Если важен результат, а не процесс. :-)

Если бы мне был важен процесс, я бы писал сейчас в фипсе, запущеной через wine под Linux 0.01... ;-)

`-._ --- Alexander Kocharin ---

Reply to
Alex Kocharin

Hi, Alexandr!

AT> АВР - был первым микроконтроллером в моей работе, AT> для которого я вообще сразу писал на Си, без ассемблерной практики.

а как называется сишный пакет под avr (разумеется, с нормальными хелпами)? его где-то можно скачать задарма? если есть ссылочка, отшли плиз.

какой компилер включён в avr-studio_3.56?

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

сейчас работа идёт именно с avr. как ты сам понимаешь, организация коммерческая, цель-- заработать лавэ. поэтому они сразу берут что-то из at-mega (для простых поделей) и долбят его сишником-- та дешевле. благо 16x128k у atmega128 на борту есть. да и sram позволяет.

oleg

Reply to
oleg dozhdev

Привет Alex!

Вcк Июн 04 2006 20:14, Alex Mogilnikov пишет oleg dozhdev:

AM> критериев выбора стоят на последнем месте.

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

RET как и CALL а так же и вход в пpеpывание могут выполняться заметно дольше JMP... да ышшо часть pегистpов надо отпpавить в стек .. а пеpед RET веpнуть назад ...

С наилучшими пожеланиями Nick .

Reply to
Nick Barvinchenko

Привет oleg!

Вcк Июн 04 2006 13:51, oleg dozhdev пишет All:

od> вот назрел у новоиспечённого программера такой вопросец. сейчас od> много приходится писать на ассемблере. в чём же дело... а вот!

od> подпрограмма выглядит так:

od> sub_name: od> <всякая всячина>

od> quit_sub_name: od> ret

od> я так понимаю, одна подпрограмма-- один ret. но частенько бывают od> случаи, когда надо, например, сделать ветвление, да ещё и не одно. и od> выходить по многу раз. вместо того, чтобы лепить od> rjmp quit_sub_name od> грамотно было бы писать просто od> ret

Hикто незапpещает ... только незабывать веpнуть из стека все назад пеpед каждым REТом ...

Есть подпpогpаммы имеющие по несколько точек входа и выхода и ничего pаботают !

Еще pаз со стеком внимательно и аккуpатно ... ! С наилучшими пожеланиями Nick .

Reply to
Nick Barvinchenko

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, oleg dozhdev! You wrote in conference fido7.ru.embedded to Alexandr Torres on Mon, 05 Jun

2006 15:32:30 +0400:

AT>> АВР - был первым микроконтроллером в моей работе, для которого я AT>> вообще сразу писал на Си, без ассемблерной практики.

od> а как называется сишный пакет под avr (разумеется, с нормальными хелпами)? od> его где-то можно скачать задарма? если есть ссылочка, отшли плиз.

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

ftp://EMBEDDED: snipped-for-privacy@dimorlus.dynalias.com ftp://EMBEDDED: snipped-for-privacy@dorlov.no-ip.com

и в edonkey/e-mule

od> какой компилер включён в avr-studio_3.56?

Понятия не имею.

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

Какое имеет отношение компилятор к режиму экрана? GUI IDE можно пользоваться, а можно и нет.

od> есть ли отладчик для avr какой-нибудь текстовый?

В IAR есть симулятор, но конечно в GUI, что-то кажется и в gcc'шном порте есть, но вообще толку от них (симуляторов) обычно не много.

od> сейчас работа идёт именно с avr. как ты сам понимаешь, od> организация коммерческая, цель-- заработать лавэ. поэтому они сразу

Разумеется, некоммерческие организации обычно гуманитарными проектами занимаются, а не embedded разработками.

od> берут что-то из at-mega (для простых поделей) и долбят его od> сишником-- та дешевле.

Раз долбят, значит у них уже есть компилятор.

od> благо 16x128k у atmega128 на борту есть. да и sram позволяет.

Писать на С позволяет PIC12F675...

dima

formatting link

Reply to
Dmitry Orlov

Привет oleg!

05 Jun 06 16:32, oleg dozhdev писал Alexandr Torres:

od> а как называется сишный пакет под avr (разумеется, с нормальными od> хелпами)?

Есть например gcc.

od> его где-то можно скачать задарма? если есть ссылочка, отшли od> плиз.

formatting link

od> какой компилер включён в avr-studio_3.56?

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

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

Есть симулятор simulavr

formatting link
умеющий работать с gdb по протоколу remote.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Синяки рождаются в споре куда чаще, чем истина...

Reply to
Alex Mogilnikov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.