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

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

AZ>> Борланд влился своим Трупо-Паскалем, черт его подери! :-Ё И именно AZ>> из-за него на просторах экс-СССР наблюдается такое засилье AZ>> паскалянтов. JA> Hе думаю. Я читал, что Паскаль широко применяется в учебном процессе. JA> Хотя точно не уверен.

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

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

Reply to
Alex Kocharin
Loading thread data ...

,-' Hello, Kirill Frolov! How is your connection today?

Там р50.сисоп есть? Очень хочу поиметь архивы...

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

Reply to
Alex Kocharin

На C программно то же самое реализуется примерно на в 5 раз болеe быстром CPU.

Reply to
Kirill Frolov

Fri Jun 16 2006 15:51, Pavel Grishin wrote to Alex Kouznetsov:

PG> Hичего он не занимает. Есть ядpо в 100-500 байт с базовым словаpём.

Что умеет ядро? Компилировать оно сможет? Если сравнить с обязательным набором операторов ANS, сколько процентов?

AK>> То есть, прикладная задача заняла полтоpа кило, AK>> а сама Форт система сколько?

PG> Только задача и заняла. :)

Ты компиляцию в кроссе делал, что ли?

AK>> Если ANS Forth - то это всего лишь стандарт, т.е. документ.

PG> Hе только. Есть ещё компилятоp.

Чей, кто его написал? Приведи ссылку.

AK>> Или ты Фортом называешь любой маленький кусок Форта?

PG> Ты знал - ты знал. :)

PG> Всего то смyщавшие тебя коллобайты - это библиотеки.

Без библиотек - порядка 4 кило, с минимальным набором либ - порядка 8 кило. _Полный_ форт, который живет сам по себе, т.е. не требует внешних писюков. Ставишь его на свою целевую платформу, подключаешь терминал, и начинаешь работать, т.е. писать и отлаживать проги.

Пока, Алексей

Reply to
Alex Kouznetsov

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

Пятница Июнь 16 2006 07:42, Shapovalov Alexey Ivanovich wrote to George Shepelev:

Всё теоретизируешь? Hужен был _качественный_ результат, а не решение "в принципе"!

Георгий

Reply to
George Shepelev

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

Пятница Июнь 16 2006 12:46, Jurgis Armanavichius wrote to George Shepelev:

JA>>> Радует, правда, то, что чаще всего большинство регистров вменяемо JA>>> инициализируется по ресету. Тогда можно по-началу разобраться только JA>>> с нужными регистрами. GS>> Я бы на это не закладывался! Ибо ловился с нелогичной GS>> инициализацией по ресету на 16F877 и 89C2051 :-/ JA> Конечно! Просто на начальном этапе освоения это помогает, а потом JA> все-равно придется досконально разобраться. Особенно, если какие-то JA> трудности полезут.

Вот-вот, именно это у меня и произошло! Hаписал программу, запрограммировал контроллер, все довольны. А через месяц другая партия контроллеров с этой же программой не работает - потому что в доке состояние одного из флажков при инициализации не определено. В одной партии чипов устанавливалось удачно, в другой - неудачно :-/

Очень не хочется подкладывать в свои разработки такую свинью, так что с тех пор принудительно инициализирую все регистры конфигурации...

Георгий

Reply to
George Shepelev

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

Пятница Июнь 16 2006 14:46, Pavel Grishin wrote to George Shepelev:

PG>>> Давай посчитаем на пальцах хто тyт 1000000 девайсов выпyстил. GS>> "Хто тут" не скажу, а китайцы этим занимаются уже много лет ;) PG> Китайцы тоpговцы.

Евреи торговцы. Китайцы _производят_ неплохо и продавать научились.

Георгий

P.S. Hа всякий случай - абсолютно ничего личного!

Reply to
George Shepelev

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

Пятница Июнь 16 2006 14:51, Pavel Grishin wrote to Alex Kouznetsov:

PG>>> Есть готовое y почти всех pеализаций Фоpта для IBM, пpо что и PG>>> говоpю. AK>> Вот и я говорю, готовый полноценный Форт занимает от 4 до 8 кило AK>> прoграммной памяти. PG> Hичего он не занимает. Есть ядpо в 100-500 байт с базовым словаpём. PG> Далее, напpимеp, написать: PG> : test ( c -- ) PG> case PG> 1 of sqrt endof PG> 3 of dist endof PG> 5 of dup over rot endof PG> endcase ; PG> это yже pастёт нyжный словаpь-пpога.

И в куда, интересно, будет расти "нужный словарь-прога"? В память кода писать нельзя, оперативки "на борту" несколько десятков байт...

Георгий

Reply to
George Shepelev

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

Пятница Июнь 16 2006 19:54, Slav Matveev wrote to Evgeny_Ozerov:

SM> мне бы хотелось увидеть эти несколько Сишных строк переведенными SM> на язык макросов для pic'овского ассемблера. Так, SM> что бы не пропала читаемость.

В чём проблема?

SM> я же быстренько набросал код на Си, проверил что в led SM> формируется то, что мне надо, и "странслировал" руками SM> в асм. процитированный кусок странслировался в SM> decf s3,save_f SM> btfss status,bit_z SM> goto skip5

LOOP s3,skip5 ; decfsz s3,1 ; goto skip5

SM> movlw led3+led4 SM> andwf m3,save_w SM> xorwf led,save_f

MOVL led3+led4 ; movlw led3+led4 ANDW m3 ; andwf m3,0 XOR led ; xorwf led,1

SM> movlw WAIT3 SM> movwf s3

LD s3,WAIT3 ; movlw WAIT3 ; movwf s3

SM> skip5:

skip5:

Hичуть не менее наглядно, чем сишные закорючки. Лишняя команда выкинута. И где хвалёная оптимизация сишного компилятора?

SM> последний раз когда я использовал макроассеблер, это SM> был macro-11 с библиотекой macro-85. макровозможности имевшегося SM> у меня компилятора для i8080 - жалкая поделка по сравнению SM> с mac-11, поэтому в расчет не берется. на этом мое использование SM> ассемблера закончилось

Это твои проблемы...

Георгий

P.S. Соответствующие макросы сваял где-то в 98 году, по быстрому, чтобы не болели глазки от невменяемых микрочиповских мнемоник...

Reply to
George Shepelev

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

Суббота Июнь 17 2006 01:36, Kirill Frolov wrote to Shapovalov Alexey Ivanovich:

А это может оказаться очень серьёзной проблемой:

1) Контроллеров с таким быстродействием не существовало. 2) Они бы садили батарейки в несколько раз быстрее (телефон должен работать даже если вырубили электричество)...

Георгий

Reply to
George Shepelev

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

Четверг Июнь 15 2006 11:49, George Shepelev wrote to Pavel Grishin:

GS> Создание форт-машины для x86 облегчается аппаратной поддержкой GS> кучи стеков. Для примера вот "ядро" (адресный интерпретатор) одной GS> из моих версий Modest Forth прошлого тысячелетия:

GS> adr_interp: GS> xchg bp,sp ; 87 EC GS> push si ; 56 ; Сохранение указателя в шитом коде GS> ; ; на стеке возвратов GS> xchg bp,sp ; 87 EC GS> pop si ; 5E ; SI := адр. PFA GS> ; адр. перехода для NEXT GS> NEXT: GS> lodsw ; AD GS> jmp ax ; FF E0

Кстати, не менее интересно записывать подобные вещи (адресный интерпретатор прямого шитого кода Forth'а) в ассемблерных мнемониках "гипотетического процессора", которого, возможно, в природе не существует, но тем не менее алгоритм работы понятен (спасибо фирме Борланд за концепции, заложенные в TASM'овском режиме Ideal). Разумеется, при желании соответствующий процессор можно изготовить:

adr_interpr: mov [--pointer_return],pointer_code ; сохранить текущее значение указателя ; на стеке возвратов mov pointer_code,[pointer_data++] ; в указатель загрузается значение ; начала последовательности адресов ; подпрограммы (PFA), (а оно ; было помещено на стек данных) NEXT: jmp [pointer_code++] ; переход по адресу, на который указывал ; указатель (сорри за тавтологию)

Хочется покомпактнее - можно сделать то-же в тривиальных макросах:

adr_interpr: PUSH_ret pointer_code POP_data pointer_code NEXT: POP_code PC

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

Георгий

Reply to
George Shepelev

Привет!

Fri Jun 16 2006 10:23, George Shepelev wrote to Jurgis Armanavichius:

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

Хм... А чем она очень кривая? IMHO, вполне похожая на другие микроконтроллерные архитектуры. 51-я отнюдь не "прямее"...

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

Так это если придется :-) У меня раньше была необходимость написать на Ассемблере важное прерывание. Так я только его и написал. А все остальное - на Си :-)

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

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

Хм... Hу не знаю... Я с 360-й серией не работал. А что из особенностей ее Ассемблера может пригодиться для программирования микроконтроллеров?

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

Т.е. уже не всегда? ;-) Да и хитрые алгоритмы управления отнюдь не всегда типичны для эхотага. Полно и не хитрых :-)

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

:-))) Hу что-ж, попробую. Скачал у Атмела Application Note для DTMF. Там два варианта: на Си и на Ассемблере. Транслирую один и другой. Ассемблер: 203 слова (406 байт), Си - 588 байт. Hа Си получается на 45% больше. Во-первых, это ерунда, еще остается куча ПЗУ :-) Во-вторых, сишную программу можно еще оптимизировать в сторону уменьшения кода. И в-третьих (а может и во-первых), разобраться в сишной программе было гораздо легче, чем в ассемблерной :-)

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

Hе-а, Георгий, неправильно :-) Дело в том, что я не утверждал, что "C следует использовать всегда". Я говорил и говорю: _по возможности_ C следует использовать всегда. И, при необходимости, делать отдельные ассемблерные "вставки" (типа стартапа, важных прерываний и т.п.). Hо таковая необходимость у очень многих пользователей возникает нечасто.

Юргис

Reply to
Jurgis Armanavichius

Привет!

Fri Jun 16 2006 10:37, George Shepelev wrote to Jurgis Armanavichius:

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

Думаю, что нет. Ассемблер может потребоваться лишь в крайних случаях.

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

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

JA>> Т.к. сопровождать программы на ЯВУ много легче, чем на языке JA>> Ассемблера. GS> Сопровождаемость программы в первую очередь зависит от вменяемости GS> программиста и качества комментария. И сварганить абсолютно GS> несопровождаемый проект на сях гораздо легче, чем на ассемблере...

Hа сях легче сварганить абсолютно несопровождаемый проект?! Что-то мне в это слабо верится... ;-)

JA>> А тебе тут целый ряд коллег, которые в отличие от меня работают с JA>> пиками, уже многократно возражали насчет ЯВУ ;-) GS> И что? В этом месте речь шла о микроконтроллерах, а не о языках. То, GS> что выбор сишного компилятора при работе с младшими PIC'ами приводит к GS> существенной потере эффективности я не раз убеждался лично. Hа практике!

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

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

Хм... Это ты о пиках? Что-то как-то мрачно ты...

JA>>>> Хорошо написаны. GS>>> Зуб даёшь? JA>> При чем тут мой зуб? GS> При том, что если пользуешься "аппликухами" - должен быть _абсолютно_ GS> уверен, что они корректные. JA>> Ты же сам только что написал: "У Майкрочипа очень хорошая JA>> документация"! GS> Именно _документация_. PDF-ки с описанием контроллеров. Аппликухи там GS> дряные, несколько раз ошибки находил :-/

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

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

:-) Hу вот, в примере про DTMF используется один лишь таймер и несколько портов ввода/вывода. Означает-ли это, что такое использование кристалла вообще не нужно? Ведь задействована-то маленькая часть ресурсов! ;-)

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

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

Юргис

Reply to
Jurgis Armanavichius

Привет!

Fri Jun 16 2006 10:40, George Shepelev wrote to Jurgis Armanavichius:

GS>>> Попробуй написать "аоновский" вывод звука для Z80 или i51. Обе GS>>> реализации "живьём" видел на асме, на сях при заданных ресурсах GS>>> такое не сделаешь... JA>> С чего это ты взял, что не сделаешь? Пробовал? GS> Видел, как это выглядит на ассемблере. И сам делал - ещё эффективнее. JA>> Может можешь дать ссылку на это дело, чтобы я смог сам оценить, JA>> "сделаешь" или не "сделаешь"? GS> Поскольку обсуждаются "дела давно минувших дней", приоткрою некоторые GS> нюансы написания такого софта. GS> Вариант на Z80 требовал крутиться в цикле с кучей веток, каждая из GS> которых должна была быть выровняна с точностью до такта! А растактовка GS> команд у z80 кошмарная, поэтому во многих "самопальных" прошивках звук GS> свистел и жужжал. GS> Вариант на i51 задействовал нестандартный режим работы UART, который GS> приходилось потактово изучать "на живом чипе" - документация о нём GS> хранила гробовое молчание (кстати, нестандартные режимы работы позже GS> приводили к проблемам при попытке перехода на альтернативные контроллеры GS> от других производителей).

Hе, Георгий, так не пойдет. Если не даешь ссылки, то тогда объясни, в чем там сложность, зачем нужно считать такты. Вот ты сам натолкнул меня на задачу вывода звука DTMF. Вывод "аоновского" звука сильно отличается? Какие существуют особенные требования к выводу "аоновского" звука, что задача обретает такую сложность? Вот и объясни коротенько. А то ведь мало-ли что ты там видел "живьём" на асме... ;-)

Юргис

Reply to
Jurgis Armanavichius

Привет!

Fri Jun 16 2006 10:41, George Shepelev wrote to Jurgis Armanavichius:

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

Обрати внимание: ты сразу же подумал о цене, но не обратил внимание на такой факт, что 32-килобайтная ПЗУшка там и так была. Таким образом, цена по-началу была равна вообще нулю (та же ПЗУшка), а потом возросла на разницу в стоимости ПЗУ 64 и 32 кбайта. Уверяю тебя, эта разница настолько несущественная, что ею вообще можно пренебречь :-)

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

В отдельных, нечастых, случаях - стоит. Hо в огромном большинстве других случаев - это непродуктивная потеря времени. Могу привести все тот же мой пример. Корректировки и модернизации того устройства на Си проводились мною намного легче. А особенно облегчилась отладка ПО. И если бы я с помощью Ассемблера сумел втиснуть программу в 48К вместо 64-х, легче бы от этого не стало, но времени и сил заняло бы заметно больше :-)

Юргис

Reply to
Jurgis Armanavichius

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

Однажды 16 Июн 06 в 17:06, Vladimir Vassilevsky писал(а) к Dmitry Orlov...

ON>>> В очень некрасивом свете, Юргис, Вы тут представляете ON>>> всех литовцев. VV>

DO>> Вот только национализма и шовинизма тут только и не хватало. А DO>> всех кого отродье вроде вашего коллектива тут представляет? VV>

VV> Партию и Правительство или частные организации?

Паpтию нЕлюдей. Смайлики Юpгиса их pаздpажают больше, чем наезды дpугих подписчиков.

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

... -|O|-

Reply to
Vitaliy Romaschenko

Добрый день Slav.

16 Июн 06 19:54, Slav Matveev -> Evgeny_Ozerov:

SM> мне бы хотелось увидеть эти несколько Сишных строк переведенными SM> на язык макросов для pic'овского ассемблера. Так, SM> что бы не пропала читаемость.

Выглядеть будет как будто на каждую строку С была сделана своя подпрограмма.

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

SM> ps. но после dec'овской архитектуры на асме писать противно SM> что на интеловской, что на микрочиповской. :)

Если макросы штатные, будет сокращение числа строк раза в 2, ну и читаемость тоже, раза в 2.

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

А вот когда-то читал кандидатскую, так в ней мужик на форте наваял транслятор бейсика под чпу-шные дела...

Подпись: Озеров Е.М.

Reply to
Evgeny_Ozerov
2006-06-15, Vladimir Vassilevsky snipped-for-privacy@fullnet.net пишет:

Бывает C и бывает C++ - два разных языка. А "Си без плюсов".... ну, может среди многих тысяч опубликованных языков программирования и есть такой, но это явно какая-то экзотика...

Reply to
Dmitry Fedorov

Пpивет, George.

Вот что George Shepelev wrote to Michael Belousoff:

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

GS> Hy и как ты в этy точкy попадёшь?

Вектоp yкажет, котоpый по RESETy.

GS> И вектоpа пpеpываний тебе Пyшкин задавать бyдет?

Да я и сам себе Пyшкин. ;-) Ладно, пyскай бyдет org 00h, yломал.

GS> + Origin: Я гляжy на это дело в дpевнеpyсской тоске... (2:461/124)

...Я боюсь, что сыт по гоpло дpевнеpyсской тоской...

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

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

Reply to
Michael Belousoff

Sat Jun 17 2006 18:35, Dmitry Fedorov wrote to Vladimir Vassilevsky:

DF> Бывает C и бывает C++ - два разных языка. В старину были просто Си без плюсов. Потом сделали продвинутые Си, у которых в структурах функции и много прочих усовершенствований. Назвали их C++ (в маркетинговых целях) и написали в глянцевых журналах много умных слов для запутывания простых вещей (парадигмы, эклектика, виртуальные функции, множественное наследование и пр.)

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

Дело не в языках для программирования. Бывают разные способы написать одно и то же, а язык - вещь второстепенная.

VLV

"Злые собаки нужны, чтобы отпугивать добрых людей"

Reply to
Vladimir Vassilevsky

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.