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

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

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

Вторник Июнь 13 2006 14:11, Kirill Frolov wrote to Jurgis Armanavichius:

KF> Как было выше замечено, проект на ассемблере, как правило, небольшой KF> и ограничивается одной единицей компиляции с org 0x100.

В эхотаге скорее с org 0 ;)

Георгий

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

Вторник Июнь 13 2006 15:19, Pavel Grishin wrote to George Shepelev:

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

"Хто тут" не скажу, а китайцы этим занимаются уже много лет ;)

GS>> Это не деньги, говоришь? ;) PG> Hет. Это БОЛЬШИЕ деньги. :)

То-то и оно! Китайцы вовремя сообразили где собака зарыта и "оседлали волну"...

Георгий

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

Вторник Июнь 13 2006 15:55, Alexey Gushin wrote to George Shepelev:

AG> Парадокс заключается в том, что на C можно написать код иногда AG> компактнее и эффективнее чем на асме.

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

AG> Понятно что теоретически асм всегда должен выигрывать.

Собственно, это неважно. Важно, что "сишной панацеи" не существует.

AG> Hо на практике, в силу того, что наглядность кода хуже,

Вот как раз наглядность _кода_ при использовании ассемблера лучше, попробуй отладкой программы на уровне кодов заняться ;)

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

Уровень си/асм - это уровень кодинга, а не уровень, на котором разрабатывают "ходюльнички". А качество кодинга приходит с практическим опытом, которого от споров в эхе, увы, не прибавляется...

Георгий

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

Вторник Июнь 13 2006 21:16, Jurgis Armanavichius wrote to Alex Mogilnikov:

JA>>> Если нужно что-то нетипичное, то не нужно стартап ковырять, а JA>>> делать вызов этого нетипичного в самом начале main. AM>> А если это нетипичное должно быть сделано до вызова AM>> конструкторов? JA> Hу, чтобы не быть голословным, ты, конечно, можешь привести пример JA> оной необходимости?

Можно я попробую? Обработка сброса по браунауту?

Георгий

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

Hello, Vladimir Vassilevsky! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 14 Jun

2006 14:05:20 +0000 (UTC):

VV>>> У 68HC11 инициализацию некоторых критичных регистров можно VV>>> сделать только в течение 64-x тактов после ресета и только один VV>>> раз.

DO>> А еще у IAR под него не было ключевого слова persistent, DO>> позволяющего избегать инициализации переменной при старте, поэтому DO>> мне приходилось вообще выкидывать обнуление bss из стартапа, чтобы DO>> сохранять значения переменных при ресете.

VV> Мне приходилось пару раз наступать на грабли с чужими программами, VV> в которых что-то делалось с неинициализированными статическими VV> переменными. VV> Поскольку такие проблемы случайны и зависят от экземпляра железа, VV> то их трудно выловить. Так что с принудительным обнулением не VV> только bss, но и всей памяти я согласен.

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

dima

formatting link

GS> Тут важна не мода, а тираж устройств. Сэкономишь на миллионном GS> тираже по доллару - набежит прибыли миллион баксов. Это не деньги, GS> говоришь? ;)

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

Wed Jun 14 2006 20:44, Dmitry Orlov wrote to Vladimir Vassilevsky:

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

Каким образом ты отличаешь валидные persistent переменные от случайных (и к тому же зависящих от экземпляра) значений, которые оказываются в них по холодному старту? VLV

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

Hello, Vladimir!

DO>> А еще у IAR под него не было ключевого слова pesistent, DO>> позволяющего избегать инициализации переменной при старте, поэтому DO>> мне приходилось вообще выкидывать обнуление bss из стартапа, чтобы DO>> сохранять значения переменных при ресете.

VV> Мне приходилось пару раз наступать на грабли с чужими программами, VV> в которых что-то делалось с неинициализированными статическими VV> переменными. VV> Поскольку такие проблемы случайны и зависят от экземпляра железа, VV> то их трудно выловить. Так что с принудительным обнулением не VV> только bss, но и всей памяти я согласен.

А вот watch dog - с тобой не согласен :)

With best regards, Alexandr Torres.

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

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

formatting link

Hello, Vladimir! You wrote to Dmitry Orlov on Wed, 14 Jun 2006 16:59:54 +0000 (UTC):

VV> Wed Jun 14 2006 20:44, Dmitry Orlov wrote to Vladimir Vassilevsky:

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

VV> Каким образом ты отличаешь валидные persistent переменные от VV> случайных (и к тому же зависящих от экземпляра) значений, которые VV> оказываются в них по холодному старту?

Ты сам произнес ключевое слово - "холодный старт".

Как отличить "хододный" от "горячего"?

У многих процессоров, есть специальные флаги в специальных регистрах, по которым можно определить причину ресета, например было это Power-ON, или это было срабатывание watch dog'а.

With best regards, Alexandr Torres.

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

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

formatting link

Hello Jurgis!

13 Jun 06 22:16, Jurgis Armanavichius wrote to Igor Havtorin:

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

JA> Истинно так! :-) Может быть кто-то попробовал другие инструменты, но JA> Борланд как-то очень органично влился в широкие народные массы xUSSR JA> :-)

Борланд влился своим Трупо-Паскалем, черт его подери! :-Ё И именно из-за него на просторах экс-СССР наблюдается такое засилье паскалянтов. Впрочем, турбо-С++

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

Всего доброго!

А. Забайрацкий.

Привет!

Wed Jun 14 2006 15:33, Kirill Frolov wrote to Jurgis Armanavichius:

Hе понял... Разве речь идет о варианте без ОЗУ? Если так, то не знаю. Я вообще себе слабо представляю работу без ОЗУ. Хотя бы маленького. И, конечно, абсолютно не отрицаю необходимость Ассемблера в некоторых случаях (вроде упомянутого тобой).

Че-то вы не туда заехали... Ведь и так понятно, что иногда (повторяю: иногда) бывает необходимо проделать какие-то действия на очень ранней стадии запуска программы. Так тут коню понятно, что раз надо - значит надо, и никуда не денешься. Hо. Если какие-то действия выполнить надо, то, следовательно, они известны (как установка регистра за 64 такта :-) А раз известны, то никаких проблем вставить их в стартап.

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

  1. Если аппаратные особенности диктуют необходимость поместить что-то важное в стартап - нет вопросов, нужно помещать. Hикакой сложности это не представляет. Ведь все-равно это делать HУЖHО.
  2. Освоение файла управления линковкой может составлять проблему для начинающего. Так пусть он спросит более опытных коллег! :-) Хотя бы и в этой эхе.

Я думаю так.

Юргис

Привет!

Wed Jun 14 2006 16:08, Kirill Frolov wrote to Jurgis Armanavichius:

А Гугль, типа, документально подтвердит? ;-)

Да ладно, я ведь не придираюсь. Просто противно, когда ни с того, ни с сего начинают незаслуженно наезжать... Естественно, огрызаюсь... ;-)

Юргис

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

Hello, Vladimir Vassilevsky! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 14 Jun

2006 16:59:54 +0000 (UTC):

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

VV> Каким образом ты отличаешь валидные persistent переменные от VV> случайных (и к тому же зависящих от экземпляра) значений, которые VV> оказываются в них по холодному старту?

Двумя способами. Во-первых, у меня часто есть аппаратный признак холодного старта. Во-вторых, есть переменная с некой сигнатурой. Если там не она - старт холодный. Учитывая, что fast switching - один из основных наших тестов (тестирует он конечно не перезапуск контроллера, а работу поджига лампы), и проблем с перезапуском не было даже при использовании только сигнатуры - это вполне работающий на разных контроллерах способ.

dima

formatting link

Только вот эхи на гугле есть. Архивироваться начало оно как бы не до появления фидо в СССР...

Wed Jun 14 2006 22:47, Jurgis Armanavichius wrote to Kirill Frolov:

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

Ковыряние стартапа - гнилое дело. Потому что в стартапном коде обычно много ветвлений по #ifdef и if(), которые делают неизвестно что, неизвестно почему, неизвестно в каких случаях, и нигде про это не написано.

JA> 2. Освоение файла управления линковкой может составлять проблему для JA> начинающего.

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

JA> Так пусть он спросит более опытных коллег! :-) Хотя бы и JA> в этой эхе. Не у кого спрашивать.

VLV

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

Привет Jurgis!

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

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

Что значит "правки", если я сам его и написал? Стартап - это такой же исходный файл моего проекта, как и множество других. Любой файл своего проекта я правлю, если меня что-то в нем не устраивает. Если все устраивает - не правлю.

JA> А тогда непонятно, почему в пакет компилятора включается неработающий JA> стартап...

Что ты имеешь в виду?

JA> Сложная у тебя система...

Hо их сложность уж точно не в стартапе. :) Позвать OSInit() - это сущая ерунда, одна ассемблерная инструкция. А до этого надо еще инициализировать контроллер ОЗУ (чтобы ОЗУ работало), сделать ремаппинг ПЗУ (ибо при старте с адреса 0 арсположено ПЗУ а при нормальной работе там должно быть ОЗУ, а ПЗУ надо переместить в старшие адреса), при этом вовремя передать туда управление (ибо программа выполняется как раз из этого ПЗУ), инициализировать стеки (у ARM они разные для каждого режима), инициализировать кучу...

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

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Чудо-йогурт Био. Чемпион среди какао.



Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 14 Jun

2006 18:58:03 +0000 (UTC):

KF> Только вот эхи на гугле есть.

Не все, только гейтующиеся.

KF> Архивироваться начало оно как бы не до появления фидо в СССР...

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

dima

formatting link

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

Hello, Vladimir Vassilevsky! You wrote in conference fido7.ru.embedded to Jurgis Armanavichius on Wed, 14 Jun 2006 19:23:56 +0000 (UTC):

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

VV> Ковыряние стартапа - гнилое дело. Потому что в стартапном коде VV> обычно много ветвлений по #ifdef и if(), которые делают неизвестно VV> что, неизвестно почему, неизвестно в каких случаях, и нигде про это VV> не написано.

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

JA>> 2. Освоение файла управления линковкой может составлять проблему JA>> для начинающего.

VV> Посмотрим, сколько потребуется времени, для того чтобы сделать VV> линкерный файл для многостраничной памяти.

Да, линкерный скрипт для правильно работающей сериализации при программировании я целый день делал (в смысле разбирался как его сделать, а так всего-то пара команд). Такова особенность большинтва скриптовых языков, о результатах работы которых приходится судить по косвенным данным (листинги, map'ы etc) и средства интерактивной отладки которых как правило отсутствуют как класс. Сюда относятся и ассемблерные и сишные препроцессоры, и линкерные скрипты и make и всякие средства вроде sed/awk и регулярные выражения. С одной стороны когда насобачишься - мощно. С другой - собачиться тяжело, забывается оно быстро. Иногда от необходимости все это писать спсает интуитивно понятное GUI IDE, но не редко и оно на какую-то альтернативную интуицию рассчитано. Причем трудности эти никому вокруг не только не интересны, но и вовсе непонятны В общем жизнь тяжела.

JA>> Так пусть он спросит более опытных коллег! :-) Хотя бы и в этой JA>> эхе.

VV> Не у кого спрашивать.

Это еще полбеды. Беда, что и отвечать-то тоже некому...

dima

formatting link

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

Hello, Alex Kocharin! You wrote in conference fido7.ru.embedded to Pavel Grishin on Thu, 15 Jun

2006 00:44:36 +0400:

PG>> Адpесный интеpпpетатоp - небольшая пpогpамма, написанная на PG>> языке ассем- блеpа, котоpая yпpавляет pаботой всей Фоpт-системы. PG>> Компактность этой пpог- pаммы (в данной pеализации Фоpт-системы PG>> адpесный интеpпpетатоp занимает всего 17 (семнадцать!) байт), ее PG>> пpостота в значительной степени опpеделяют кpасотy и стиль Фоpта.

AK> А можешь провести эти байты? Интересно, однако...

Эти-то не очень интересно и найти легко. Интересно было бы для того PIC'а (или чего-то аналогичного) сравнить решение какой-то более-менее типовой задачи управления на С и Форте ну и для любителей ассемблера, можно и на ассемблере (причем сравнивать конечно и там и там полный объем заливаемого в контроллер кода и скорость его выполнения). Я бы предложил например такую задачку - сделать на PIC12F675 управляемый с последовательного порта на любой разумной скорости термостат. С последовательного порта задавать пороги On, Off, в градусах скажем от 30 до 90 и иметь возможность их прочитать. Температуру мерять термистором и АЦП. Какую-нибудь ножку как выход On/Off использовать. Если для подачи команд не достаточно готового терминала, предоставить win32 (можно консольную) программу для общения с устройством. Если кому-то ближе AVR или HC08 или еще что-то восьминогое из того же ценового диапазона (порядка полутора долларов в розницу) - тоже пошло бы.

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

dima

formatting link

,-' Hello, Pavel Grishin! How is your connection today?

PG> Адpесный интеpпpетатоp - небольшая пpогpамма, написанная на языке PG> ассем- блеpа, котоpая yпpавляет pаботой всей Фоpт-системы. PG> Компактность PG> этой пpог- pаммы (в данной pеализации Фоpт-системы адpесный интеpпpетатоp PG> занимает всего 17 (семнадцать!) байт), ее пpостота в значительной степени PG> опpеделяют кpасотy и стиль Фоpта.

А можешь провести эти байты? Интересно, однако...

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

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required