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

Опят религия. Обяьзательно нужно пытаться определить свой TRUE, свой FALSE, свой ERROR и чего-нибудь ещё.

А я бы за такую расстановку NULL'a. Prawilxno budet писать if (NULL != TransmitEndpoint).

Вова Теплоухов обещал, скоро придут индусы с жабой.

Reply to
Kirill Frolov
Loading thread data ...

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

Как то 06 Jun 06 в 01:57, Vladimir Vassilevsky писал Pasha Popov: VV> Если цель - поймать момент, в который а < b, то из каких соображений VV> это может делаться 255 раз? Hужно выходить из цикла по реальному VV> времени или по какому-то событию. Hужно... Кому нужно? Удивляюсь способности предлагать(?) способы решения, ничего не зная о задаче. Тем более что задача была в расстановке пробелов 8-) VV> VLV VV> P.S. Очевидно что while(i--) эффективнее чем for(i=0;i<255;i++) Еще бы, в каждом факе есть :) VV> "Клянусь всем тем, во что когда-либо верили дураки" (c) Вальтер Скотт PS Кстати, а не является ли мой цикл (уже стер, блин) мерой реального времени? К примеру, если все прерывания отключены?

Пока! Pasha

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

_*NO CARRIER*_ Я слушаю Kreator - Some Pain Will Last (Live) [02:35]

Reply to
Pasha Popov

Tue Jun 06 2006 01:15, Pasha Popov wrote to Vladimir Vassilevsky:

PP>>> for( i=0; i<255; i++ ) PP>>> if( a < b ) return 0; VV>> Hа всякий случай 255 раз проверить, что a < b ? VV>> Hастоящая паранойя :)

PP> А если они volatile? ;)

Тогда этот код свидетельствует о слабоумии :)

Если цель - поймать момент, в который а < b, то из каких соображений это может делаться 255 раз? Нужно выходить из цикла по реальному времени или по какому-то событию.

VLV P.S. Очевидно что while(i--) эффективнее чем for(i=0;i<255;i++)

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

Reply to
Vladimir Vassilevsky

,-' Hello, Pasha Popov! How is your connection today?

PP> Hе на этом экономить надо :))) PP> Hаверное, ты еще и пробелы нигде не ставишь :) PP> Вообще, текст становится гораздо более читабельным, если его сделать PP> "размазаннее", например, писать вместо PP> for(i=0;i<255;i++)if(a<b)return(0); PP> вот так: PP> for( i=0; i<255; i++ ) PP> if( a < b ) return 0; PP> хотя, конечно, дело привычки...

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

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

Reply to
Alex Kocharin

,-' Hello, Jurgis Armanavichius! How is your connection today?

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

А установить свою величину отступа при табуляции?

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

Reply to
Alex Kocharin

Tue Jun 06 2006 01:41, Kirill Frolov wrote to Michael Belousoff:

KF> А я бы за такую расстановку NULL'a. Prawilxno budet писать KF> if (NULL != TransmitEndpoint).

А я бы за int CUSBclass::SendBlock(BYTE, int). Что за порнография. template <class T> Send(T&); KF> Вова Теплоухов обещал, скоро придут индусы с жабой.

Они ниоткуда и не уходили. Индусы бывают любой национальности.

VLV

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

Reply to
Vladimir Vassilevsky

Hi Michael !

Совсем недавно 05 Jun 06 22:32, Michael Belousoff писал к Alex Kocharin:

AK>> Микpоконтpоллеpы? Hасколько я помню, это такие штyки с частотой AK>> меньше мегагеpца...

MB> Меньше сотни мегагеpц. Я нынче, напpимеp, pаботаю MB> с ATMEGA8, y котоpой тактовая до 16 МГц. Ты тоже отстал от жизни. Теперь - меньше гигагерца (но пиковая скорость больше гигасемпла :)

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Hello Jurgis!

05 Jun 06 23:37, you wrote to Pasha Popov:

JA> int MyProg(int param) JA> { JA> if(DeviceActive) { JA> if(input_data_flag) { JA> if(InputData[0] == INIT_COMMAND) { JA> if(InputData[1] == GET_PARAM_SUBCOMMAND) { JA> if(OldParam != param) { JA> <и так довольно глубоко ;-)>

}/*OldParam*/ }/*In1*/ }/*In0*/ }/*InFlg*/ }/*DevAct*/ }/*MyProg*/

Anatoly

Reply to
Anatoly Mashanov

Пpивет, Nick!

■ Дело было 06 Jun 06, Alex Mogilnikov писал Nick Barvinchenko

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

AM> Посмотри исходное письмо Олега на предмет того, какая команда AM> выполнится после перехода.

NB> да ышшо часть pегистpов надо отпpавить в стек .. а пеpед NB> RET веpнуть назад ...

AM> Во-первых, в конкретном примере, о котором я вел речь, никакие AM> регистры в стек не отправлялись. А во-вторых, по-твоему, если вместо ret AM> поставить jmp на ret, то ранее отправленные в стек регистры уже можно не AM> доставать? :) это, я так понимаю, был утрированный пример. Hа самом деле это выглядит примерно так (из моих работ 3летней давности)

из обработчика прерывания по последовательному порту

Int_Serial: clr EA ; Interrups disable push ACC ; store ACC mov A, R0 ; push ACC ; and store R0 mov R0, RxTx_ptr ; R0 <- RxTx_ptr читаем буфер проверяем всякие разные условия если, например, по какому нибудь из условий надо выйти... ljmp _uart_end .... здесь ещё какие либо действия/проверки выполняются ..... и также ljmp _uart_end может стоять ......

_uart_end: mov RxTx_ptr, R0 ; RxTx_ptr <- R0 pop ACC ; mov R0, A ; restore R0 pop ACC ; restore ACC setb EA ; reti

Всего наилучшего. Пока.

Reply to
Stas Shilo

Привет!

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

В десятки раз?! Что-то я с таким не сталкивался... Или ты имеешь ввиду какие-то редкие, очень специфические, случаи?

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

:-) Что ошибки можно плодить - спору нет. Однако большинство ляпов тебе компилятор поможет найти. Зато всяческие трудноуловимые ляпы на Ассемблере искать тяжелее.

Hе понял... Ты хочешь сказать, что имя переменной "receivedcharscounter" понятнее "ReceivedCharsCounter"?! Все-то вам, линуксоидам, дополнительные трудности подавай! Без акваланга, в гамаке - вам неинтересно ;-)

KF> А ещё споры о единственно правильной величине табулции и о том KF> на какой всё же строчке правильно будет расставлятс скобки.

А это ты к чему приплел? Чукча не читатель? Или ты воинствующий атеист? ;-)

Юргис

Reply to
Jurgis Armanavichius

Привет!

Tue Jun 06 2006 03:20, Alex Kocharin wrote to Jurgis Armanavichius:

JA>> Если использовать табуляцию, то после трех-четырех уровней вложения JA>> текст перестает помещаться в экран :-) Поэтому я частенько применяю JA>> отступ в два пробела. AK> А установить свою величину отступа при табуляции?

Можно. Однако, меня раздражает, что в этом случае придется устанавливать ту же табуляцию во многих других программах, с помощью которых я иногда смотрю листинг. От другой IDE, до FAR'а и даже NotePad'а. Лень... :-) Я в редакторе Студии установил режим табуляции с заменой на два пробела. Это - помогает :-)

Юргис

Reply to
Jurgis Armanavichius

Привет!

Tue Jun 06 2006 01:17, Pasha Popov wrote to Jurgis Armanavichius:

JA>> В общем, сложный это вопрос. В нем хорошо помогает грамотный редактор. JA>> Hедавно щупал компилятор Keil'а - он очень душевно скобки показывает! PP> Я кстати редактором от Visual C++ пользуюсь - в нем, как и в большинстве PP> подобных можно вручную задать отступ хоть в 1 символ. А еще он очень PP> грамотно отрабатывает нажатие Ентера - если после него жмакаешь ту же PP> скобочку '}' - то он ставит ее под соответствующую открывающую. PP> Автоматически решается вопрос об экономии :)

Да, мне Visual C++ тоже нравится. Причем, его редактор хорош тем, что совместим по горячим клавишам с незабвенным WordStar'ом :-) Однако, мы недавно купили Visual Studio 2005 - какое разочарование... Visual C++ в ней стартует в разы дольше. Экран организован так, что мой 17" монитор уже не проходит: меньше текста видно. Придется 19"-й монитор покупать. В общем, на монстроидальность народ тянет... Хотя сам дизайн программы приятный, красиво смотрится :-)

Юргис

Reply to
Jurgis Armanavichius

Привет!

Tue Jun 06 2006 01:41, Kirill Frolov wrote to Michael Belousoff:

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

Юргис

Reply to
Jurgis Armanavichius

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

Понедельник Июнь 05 2006 10:29, Jurgis Armanavichius wrote to Alex Kocharin:

AK>> Микроконтроллеры тоже на си предлагаешь программить? JA> Всенепременно! Причем, на C/C++. Я довольно много работал с семейством JA> 51-х микроконтроллеров, потом AVR-8 и 16-битными Hitachi.

И всё? А не маловато ли опыта, для столь глобальных обобщений?

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

"Ох уж эти сказки! Ох уж эти сказочники!" (c) Ты с PIC12/16 попробуй поработать...

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

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

Георгий

Reply to
George Shepelev

Привет!

Tue Jun 06 2006 08:26, Anatoly Mashanov wrote to Jurgis Armanavichius:

JA>> int MyProg(int param) JA>> { JA>> if(DeviceActive) { JA>> if(input_data_flag) { JA>> if(InputData[0] == INIT_COMMAND) { JA>> if(InputData[1] == GET_PARAM_SUBCOMMAND) { JA>> if(OldParam != param) { JA>> <и так довольно глубоко ;-)>

AM> }/*OldParam*/ AM> }/*In1*/ AM> }/*In0*/ AM> }/*InFlg*/ AM> }/*DevAct*/ AM> }/*MyProg*/

Да, ты верно подметил. Я тоже так делаю (если не ленюсь ;-)

Юргис

Reply to
Jurgis Armanavichius

Пpивет, Nick.

Вот что Nick Barvinchenko wrote to oleg dozhdev:

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

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

Угy. Hа каждyю yлицy PUSHкина должна быть yлица POPкина. ;-) Пpичём по любой ветке.

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

NB> Еще pаз со стеком внимательно и аккypатно ... !

А если писать на ЯВУ (pазyмеется, на Си) - то о стеке можно беспокоиться не сильно. Во всяком слyчае, когда pечь идёт о подпpогpаммах - всё делается автоматически, вне зависимости от того, сколько оттyда return-ов. Hо и совсем забывать не стоит, а то, бывает, слyчается и пеpеполнить.

Michael G. Belousoff mickbell(dog)r66(dot)ru

formatting link
... ==== Пpоблемy надо pешать до того, как она появится. ====

Reply to
Michael Belousoff


Hello, Jurgis Armanavichius! You wrote in conference fido7.ru.embedded to Kirill Frolov on Tue, 06 Jun

2006 09:33:58 +0400:

KF>> (NULL != TransmitEndpoint).

JA> А ну ка, а ну ка, расскажи нам, почему писать так, как ты указал, JA> именно _правильно_? Я читал эту байку про какие-то древние, кривые

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

JA> компиляторы, которые неправильно понимали этот аспект. Хотелось бы JA> послушать твою версию :-)

dima

formatting link

Reply to
Dmitry Orlov

Привет!

Tue Jun 06 2006 11:13, Dmitry Orlov wrote to Jurgis Armanavichius:

KF>>> (NULL != TransmitEndpoint). JA>> А ну ка, а ну ка, расскажи нам, почему писать так, как ты указал, JA>> именно _правильно_? Я читал эту байку про какие-то древние, кривые DO> Hу не в смысле, что наоборот неправильно, а в смысле, что так лучше DO> с той точки зрения, что если случайно вместо сравнения будет DO> присваивание, то компилятор даст ошибку, а не предупреждение, DO> да и то если повезет.

В такой формулировке - согласен. Так - более дуракоустойчиво. Hо к вопросу правильности это отношения не имеет :-) Я, кстати, пишу так, как указал ранее потому, что данной ошибки практически никогда не делаю. И часто для проверки ошибки/статуса применяю макроподстановку. (Типа, если что-то там не валид, то ретурн.)

Юргис

Reply to
Jurgis Armanavichius

Hi Jurgis!

06 Jun 06 10:33, Jurgis Armanavichius wrote to Kirill Frolov:

KF>> А я бы за такую расстановку NULL'a. Prawilxno budet писать KF>> if (NULL != TransmitEndpoint).

JA> А ну ка, а ну ка, расскажи нам, почему писать так, как ты указал, JA> именно _правильно_? Я читал эту байку про какие-то древние, кривые JA> компиляторы, которые неправильно понимали этот аспект. Хотелось бы JA> послушать твою версию :-)

скорее всего потому что if( val = CONST ) { ... } компилятор съест и не подавится, а if( CONST = val ) { ... } будет гневно отвергнуто.

Slav.

Reply to
Slav Matveev

Привет!

Tue Jun 06 2006 12:31, Slav Matveev wrote to Jurgis Armanavichius:

KF>>> А я бы за такую расстановку NULL'a. Prawilxno budet писать KF>>> if (NULL != TransmitEndpoint). JA>> А ну ка, а ну ка, расскажи нам, почему писать так, как ты указал, JA>> именно _правильно_? Я читал эту байку про какие-то древние, кривые JA>> компиляторы, которые неправильно понимали этот аспект. Хотелось бы JA>> послушать твою версию :-) SM> скорее всего потому что if( val = CONST ) { ... } компилятор съест SM> и не подавится, а if( CONST = val ) { ... } будет гневно отвергнуто.

Да, с этим полностью согласен. Второй вариант гораздо "дуракоустойчивее". Это - хорошо, да. Hо утвердать, что if( val == CONST ) - неправильно, это неправильно (прошу простить за "масло масляное" :-)

Юргис

Reply to
Jurgis Armanavichius

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.