Hу сейчас я вам урок грамотного программирования даду ;)

Jan 26, 2004 Last reply: 22 years ago 142 Replies

AM>> И что, ты мне предлагаешь изучить исходник аона в более 10000 строк на AM>> ассемблере абсолютно без каких-либо без комментариев? MP> Я предлагаю поискать команду DI и подумать как написать на Cи все что после MP> нее, впрочем программа проста как танк - нафиг там вообще коментарии

Точно, нафиг, только в мозг интерпретатор z80 встроить, и вперед.

AM>> Да еще на странной помеси диалекта intel8080 с Z80? MP> Мнемоники 8080 вызывают у тебя затруднение?

Ты находишь, что нормальному человеку они могут понравиться?

MP> Так и думал.

И что ?

AM>> Хотя впрочем быстрый просмотр показывает, что иногда AM>> аргументы передаются через глобальные переменные в том числе: MP> Там 2 локальных переменных. FADR и TYPADR. И то с натягом. AM>> Где они там используются особо у меня времени разбираться нет. AM>> И ты утверждаешь, что это сопровождаемо кем-либо, кроме автора? MP> Да.

Возможно, только тобой и не менее гениальным Шепелевым.

AM>> И ты хочешь сказать, что даже сам автор смог бы сопровождать это, AM>> скажем сейчас, через 5-10 лет? MP> Легко. В чем проблема то.

В отсутствии комментариев, как минимум.

Привет, Maxim! Вы писали для George Shepelev , Fri, 30 Jan 2004 22:59:24 +0300:

MP> Hа самом деле правильная постановка вопроса должна звучать так MP> "какие возможности есть у ЯВУ, которых нет у АСМ" ;)

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

WBR, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

OR> 2-Feb-04 07:25 Andy Mozzhevilov wrote to Maxim Polyanskiy:

MP>>> нужна хорошая файловая система! MP>>> В исходниках на АСМ.

AM>> на каком?

MP>>> В идеале Fat12/16/32 совместимая.

AM>> На Си можно найти без проблем в и-нете, имхо. OR> Понимаешь, тут проблема есть. Если бы оно было уже скомпилировано, OR> то он бы его идой посмотрел и за пару дней переписал бы на асме гораздо OR> компактнее и эффективнее. Но эти подлиые сишники в интернете исходники OR> выкладывают.

Не удержался, вставлю таки и свои 5коп :-)

Для начала нескромный вопрос к MP - а сколько Вам лет? (сорри, если задел) Ваша приверженность к асму прямо-таки дышит юношеским максимализмом. Я не хочу сказать ничего обидного - узнаю себя лет так 10 назад :-) Тогда Ваши посты вполне могли быть моими :-)

Кто-то из известных в IT людей (уж не помню кто): "Кто в молодости не писал на ассемблере - тот не имеет сердца, а кто продолжает писать на нем в зрелые годы - тот не имеет головы". Студентом я не признавал ничего кроме ассемблера - жизнь была проста и удивительна - MACRO-11 (на любимой СМ-4 под отличной RSX-11 v4.1, или RT-11FB/SJ на ДВК), хотя ему была вполне неплохая альтернатива в виде FORTRAN-IV (Cи компиляторы я пробовал разные порты с Unix - это была целая проблема найти их - тогда программы носили на ленточных бобинах, но нормального Си у меня не было) или классический PASCAL (но этот был довольно громоздок). Правда и серьезных проектов не было - редко превышался объем в 2К строк (сейчас это вообще детский объем).

Ну с i8080/Z80 и машинами типа Орион/ZX тоже все понятно - больших проектов также не было (только не надо про АОНы тех времен - сиротские 8К дизасмились в сиротские же 3К строк), хотя я ухитрился для себя написать аналог экранного редактора TED (тяжелое наследие RSX-11 :-) Я был ограничен размером исходного текста ("файла" на ORDOS :-) в 48К, поэтому это был шедевр - без комментариев, без пустых полей меток, трехбуквенные метки :-) и прочие прелести. Любопытно, что вторую половину проекта я редактировал в его же ранних версиях :-) Небольшой, что-то около 6К строк, как помнится.

Потом появился "Поиск-1", правда, сразу с дисководом. Потом первые PC. Но тут у меня уже были уважительные причины использовать ассемблер - в-основном, я занимался организацией многозадачности на MS-DOS, уже "не по детски" - с фоновым файловым вводом-выводом, с разделением XMS и железяками. Конечно это можно было написать на C, но, как я позже выяснил для этого надо гораздо больше профессионализма - нужно очень хорошо знать свой компилятор и грамотно писать ассемблерные вставки для выполнения соглашений по вызовам. Потом был виртуальный монитор для 386-го - тоже без асма трудно - да и не было тогда 32-битных компиляторов.

Когда я прочитал про API Win16 (хотя сначала OS/2, просто книгу хорошую купил) я был искренне возмущен - "ну кАзлы, блин, где мое любимое int 21H с раскладкой параметров в регистры!!" :-) А потом пошел серьезный эмбеддинг - в 1993-ем написали первый кассовый аппарат, на ассемблере x86, запихнули его в 16К. (Всего-то было 500К исходников) даже отладили и запустили. НО: рынок не спит, динамически меняется и никто годами не будет ждать пока "самый_крутой_программист на_ассемблере" удосужится внести изменения в свою "самую_крутую_и_быструю асмовую_программу" а потом будет еще годами с умным видом искать баги. НУЖНО ЗДЕСЬ И СЕЙЧАС!!!. Да и функциональность требовалось расширять и улучшать. Тогда я поупирался-поупирался и СВЕРШИЛОСЬ - BC 3.1 был заставлен генерировать ROMABLE код. Для особо упрямых (в моем лице :-) был оставлен небольшой кусок асма - работа собственно с железом (+прерывания +начальный старт) - 10% от проекта и все были довольны. Особенно я был потрясен пару лет спустя когда за ОДИН ДЕНЬ 100К строк сишного кода было перенесено на другую платформу (x86->AVR) (я до этого месяц возился с переписыванием железячных функций на новом асме)

Ну а собственно написать эту стори меня сподвигло упоминание FAT - это был мой первый проект на С для эмбеддед системы - было две недели времени, нужно было написать примитивы для FAT12/16 на AT45. Ну начал я очень бодро - на асме, через пару дней мне стало грустновато - довольно скучно пересылать DWORD-ы на AVR, в ход пошли так любимые GS макросы, потом и с ними стало грустно. Появилась предательская мысль "а может C - это не так уж и плохо" :-).

Последний гвоздь "в коробочку" с асмом был забит два месяца назад - был заказ на сложный VxD (там получились мегабайты сишных исходников), до этого на Win9X я изощрялся на асме - API VMM очень этому способствует, но тут я очень оценил VС + VTOOLSD. Мне плевать, что там оверхед, главное, чтобы лично у моего серого органического процессора оверхеда не было :-) Проект с такой сложной логикой - на асме не поднять.

Итого: я _ОЧЕНЬ_ люблю ассемблер, работал с ним на десятке архитектур, можно сказать - фанат, но основную работу я делаю на _C_ - поскольку это _УДОБНЕЕ_ и в конечном счете _ВЫГОДНЕЕ_. Понимание этого приходит не сразу - и, как видно по конфе - не ко всем :-)

Сорри за столь длинной повествование - настроение просто нерабочее что-то :-)

Hello Andy.

03 Feb 04 10:44, you wrote to Maxim Polyanskiy:

MP>> 2-х задач? Я могу их и в одном решать.

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

Я считаю, что да. Она ведь две задачи решает. Просто это один из методов организации многозадачности.

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

Alexey

Hello Vyacheslav.

03 Feb 04 12:59, you wrote to Oleksandr Redchuk:

VO> Сорри за столь длинной повествование - настроение просто нерабочее VO> что-то :-)

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

Alexey

Hello, Alexey! You wrote to All on Tue, 03 Feb 2004 14:55:12 +0300:

VO>> Сорри за столь длинной повествование - настроение просто нерабочее VO>> что-то :-)

AB> Предлагаю, на этой ноте свернуть топик, ибо очень много рабочего AB> времени уходит на чтение, а все спорящие остались при своем мнении.

Поддерживаю. Тем более, что лучше не скажешь.

Alexander,Derazhne@adic,kiev,ua (replace commas with dots) Alexander Derazhne

Привет, Andy!

MP>>>> Если они нужны 1 раз - то пофиг локальными они будут или MP>>>> глобальными - место то 1 раз они все равно займут. ;) AM>>> Где, в памяти? Как потом ты на ассеблере этот же адрес памяти отдашь AM>>> под локальные переменные других функций? MP>> Да так и отдам.

AM> Как отдашь? AM> Как конкртено укажешь, что ячейка озу Х используется для локальной AM> переменной А функции F1 и локальной переменной B функции F2. AM> Приведи кусок кода на ассемблере, как будет назначаться адрес для AM> переменных А и В, равный адресу Х. Странно, что ты задаёшь такой вопрос...

x db 1

Func1: ;пользуешь тут x как временную переменную ;можно через equ перименовать её в А, если для читабельности надо A equ x return

Func2: ;и тут пользуешь x как временную переменную ;можно через equ перименовать её в В B equ x return

И никак ты это не указываешь, это держиться только у программера в голове. Забыл - пипец, начинается глюкодром. А в Си, объявляя переменную локальной или глобальной, данную задачу ты перекладываешь на компилер, освобождая свою голову для более важного.

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

В простых асм проектах я так частенько делаю, завожу переменную temp и пользую её в разных функциях как временную, вроде не сложно запомнить. В сложных проектах - Боже упаси, это маразм такое количество рутинной инфы держать в голове и они естессно делаются на Си.

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

Владимир Чекин

AM>> действительно ничего не делал. Посмотри, к примеру исходники ОС AM>> uCOS-II, и объясни, что ее автор - ламер. MP> Смотрел, вопервых она избыточна донельзя. Поэтому применять ее - смысла MP> мало. MP> Потом все эти ваши ОС они по сути не нужны!

Как хорошо сказано! Качество бреда просто потрясает воображение.

MP> Все это из-за невозможности писания на си сложных распределенных задач MP> поскольку си не обладает развитой системой ветвлений

Это ты про goto, ограниченный в пределах блока? Если бы ты понимал как компилятор распределяет автоматические переменные, то и понимание почему goto работает именно так тоже бы пришло.

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

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

AM>> Точно, и прочно занимать свое место в ОЗУ, даже если нужны они всего AM>> один раз всего в одной функции. MP> Если они нужны 1 раз - то пофиг локальными они будут или глобальными - MP> место то MP> 1 раз они все равно займут. ;)

Проблема в том, что они его займут! Когда нужны, и когда не нужны тоже. Ты же регистр под переменную выделяешь только для какого-то участка кода от и до. А глобальную переменную на весь жизненный цикл программы, и использовать ту же самую ячейку ОЗУ для другой переменной ты уже не можешь. А компилятор может. В результате твоя супер-пупер оптимизированная ассемблер-программа памяти занимает больше, чем сгенерированная компилятором. Hет, ты тоже можешь, если хочешь, брать "ватман размером с комнату" и чертить на нём граф вызовов всех функций. И не дай бог, поменяешь что в исходном тексте -- начинай всё с начала.

AM>>>> Или все таки положишь часть локальных в ОЗУ? MP>>> Даже не задумаюсь над этим. AM>> Hад чем не задумаешься? MP> Да нет у меня таких проблем понимаешь. Все ложится и всего хватает. Ты MP> пойми MP> что если я все переменные объявлю глобальными - регистров мне зачастую MP> хватит MP> чтоб все равно получить выгрыш в разы у си на этих-же алгоритмах.

Где этот выигрыш в разы? Один апологет ассеблера пока что привёл какие-то невразумительные и чреватые подводными граблями макросы, другой прибегая к алгоритмической оптимизации заявляет о каких-то безумных процентах. Если *тот же самый* алгоритм записать на C будет те самые 50% "оверхеда", а не 500% и не 5000%...

AM>> Это в ПИК аппаратно ограничено количесвто вложений. В большинстве MP> Больше 5-8 - программера надо УВОЛЬHЯТЬ!

Ты что-нибудь о рекурсивных функциях слышал?

MP> И тут ты резко передернул! Ты байт от массива отличаешь? Hапиши-ка мне асм MP> производное си компиллера для хождения в массиве xram и я тебе моментально MP> укажу где компилятор облажается ;)

Esli ty такой умный, почему ещё не занимаешь должноать Главного Программиста в IAR software inc, и почему компиляторы до сих пор ТАК лажаются?

Hi!

Maxim Polyanskiy сообщил/сообщила в новостях следующее:

Ну, у меня есть формировалка DTMF на С, причем на разных платформах, так что непонятно, почему это вызывает ухмылку. Исторически, первый вариант был в проекте на С166. В том проекте ресурсов было дофига, поэтому на чистом С, во всем проекте только одна строка на асм. И та - теплый старт (jmp 0), поскольку не придумал я, как такое на нативном С сделать. Другой проект - ATMega16, там было желание напихать функциональности по максимуму, сколько будет позволять быстродействие, поэтому некоторые критичные по времени куски переписаны на асме в процессе оптимизации. Как раз кусочек из генерации DTMF (строк 15) туда попал и некоторые обработчики прерываний И последний, относительно недавний вариант - на PIC16. Там основным критерием было время разработки, поэтому опять - чистый С, ни строки на асм. Во всех случаях генерация DTMF - не более пары процентов от объема кода всего проекта (если не считать таблицу). То, что можно это все переписать асм, и при этом код будет чуток покороче, сомнений не вызывает. Но сокращение все равно даже близко не позволит упихать это в кристал меньшего размера. Процентов 20, ну 25 (по всему проекту) А во втором случае, полагаю, не будет и 20, поскольку все, что можно оптимизировать, там уже оптимизировано. Поэтому нафига?

Примите уверения в совершеннейшем к Вам почтении

Привет, Andy!

AM>>> И что, ты мне предлагаешь изучить исходник аона в более 10000 строк на AM>>> ассемблере абсолютно без каких-либо без комментариев? MP>> Я предлагаю поискать команду DI и подумать как написать на Cи все что MP>> посленее, впрочем программа проста как танк - нафиг там вообще коментарии

AM> Точно, нафиг, только в мозг интерпретатор z80 встроить, и вперед. Hаконец-то догадался! В этом весь кайф. Процесс - вот ключ.

Владимир Чекин

3-Feb-04 18:29 Sergey Zabelin wrote to Maxim Polyanskiy:

SZ> ресурсов было дофига, поэтому на чистом С, во всем проекте только SZ> одна строка на асм. И та - теплый старт (jmp 0), поскольку не придумал SZ> я, как такое на нативном С сделать.

Не jmp, а call, но в данном случае это неважно, всё равно указатель стека переинициализируется. Может не работать только если есть защита памяти и сегмент стека исчерпан :-)

typedef void (*voidfunc)();

void foo(char ch) { if (ch == 'R') ((voidfunc)0)(); }

wbr,

"Oleksandr Redchuk" сообщил в новостях следующее:

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

Примите уверения в совершеннейшем к Вам почтении

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

Воскресенье Февраль 01 2004 11:18, Andy Mozzhevilov wrote to Maxim Polyanskiy:

MP>>>> пишешь о соглашении но в реале ты его просто не можешь себе MP>>>> представить программы написаные таким образом, AM>>> Могу, и ты это продемонстрировал. Hо есть предел такой AM>>> эффективности. 2-3 вложенных вызова функций и она кончилась. А AM>>> главное - что особо она никому и не нужна. Только для AM>>> самолюбования. MP>> Да предельная глубина стека асмовой проги вызовов 5-8, AM> Это в ПИК аппаратно ограничено количесвто вложений. В большинстве AM> других архитектур вызовов может быть столько, сколько требуется для AM> данной задачи и на сколько хватит стека.

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

MP>>>> Сам факт резервирования глуп. 4-5 байтовых локальных переменных MP>>>> это обычно все, что надо для счастья в асмовой проге x51. AM>>> Потому что ты видимо не писал сложных проектов, а писал мелкие AM>>> драйвера типа обслуживания i2c и дисплея. Какой объем кода, без AM>>> таблиц, в своих проектах под х51? MP>> В последнее время стараюсь влезать в 8-16к. AM> Видимо, дальше начинаются проблемы с распределением регистров.

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

AM> У меня на х51 были проги от 4К до 32К, на MB90 сейчас около 100К, или AM> чуть больше. И все на Си.

Симптоматично...

AM>>>>> MOV dptr,#Addr_B AM>>>>> MOV A,@dptr AM>>>>> MOV R7,A AM>>>>> MOV dptr,#Addr_C AM>>>>> MOV A,@dptr AM>>>>> ADD A,R7 AM>>>>> MOV Addr_A,A MP>>>> Это не на асм - AM>>> А на чем? MP>> Hе знаю. Я тебе уже говорил - не реальный пример класть БАЙТ в MP>> xram! Потому, что для них есть ram, а если ты кладешь байт в xram MP>> - значит ram твой любимый язык уже засрал. AM> Ты сильно ограниченно мыслишь. AM> Какая разница, зачем это нужно.

Только для сишников нет разницы что и как делать. Скомпилилось, и ладно...

MP>>>> это вопервых неработоспособно AM>>> Почему? Hу может в синтаксисе напутал немного. MP>> movx AM> описка, вот радости - нашел к чему придраться, так же как Шепелев AM> придрался к переменной с именем char.

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

Георгий

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

Понедельник Февраль 02 2004 15:03, Andy Mozzhevilov wrote to Maxim Polyanskiy:

MP>> Я тебе исходник 10-ти летней давности один выложил - посмотри. MP>> rotorman.nm.ru/18H.ZIP AM> И что, ты мне предлагаешь изучить исходник аона в более 10000 строк на AM> ассемблере абсолютно без каких-либо без комментариев? AM> Да еще на странной помеси диалекта intel8080 с Z80?

По твоему описанию подозреваю, что это не _исходник_, а результат работы декомпилятора. Исходники гораздо больше и достаточно подробно комментированы (иначе бы их фиг довели до рабочего состояния)...

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

AM> Кстати, там используются индексные регистры, тебя это не смущает?

Кстати, да, индексные регистры "для простоты программирования" использовались в старых прошивках АОH'ов на Z80. Действительно для простоты, поскольку наглядность выше и регистров "свободных" больше. Замена этого кода на более компактный давала заметное уменьшение кода и увеличение быстродействия...

Георгий

Hello, Dima!

Втp Фев 03 2004, Dima Orlov писал к Maxim Polyanskiy по поводу "Hу сейчас я вам урок грамотного программирования даду ;)." >> Ты плохо помнишь пример. Я использовал только R0 и ACC. Си DO> Что уже не 0. >> компиллер кроме того R5/R6/R7/DPL/DPH. DO> И что с того? У него еще много осталось неиспользованного. С вами спорить - все равно, что разговаривать со стенкой. Абсолюдно очевидные вещи вы просто не видите. Hу засрем все регистры пойдет озу. Ты-же первый напишешь "что с того - его там еще 127 и более байт". Вобщем обязуюсь больше никаких исходников не компилировать не оптимизировать а тихо мирно писать свои проекты, естественно на ассемблере. А то трафику нагнали - а толку нет.

DO> А для какого носителя тебе нужна FS? Какая разница! Hизкоуровневую часть оставь мне. DO> С уважением, Дима Орлов. WBR! Maxim Polyanskiy.

Hello, Roman!

Втp Фев 03 2004, Roman Gorbunov писал к Maxim Polyanskiy по поводу "Hу сейчас я вам урок грамотного программирования даду ;)." >> Зависит от задач! Кто сказал что мне вообще нужно будет 2 main-а для >> решения 2-х задач? Я могу их и в одном решать. RG> А когда их 5..10 начинается напряг. Я имею в виду реалтаймовые, а не RG> те которые можно в фоне крутить. Просто ты явно с таким не сталкивался RG> поэтому для тебя это неочевидно. У вас странное понимание слова реалтаймовые. Логика многозадачности (какая бы не была) жрет ресурс настолько сильно что реалтаймовые задачи выгодно решать на

2-х гораздо более дешевых и более медленных cpu. MP>>>> Да вот не знаю. пишу на x86 - кода уже 120к, AM>>> Давно пишешь? >> Год. RG> :))))) А сколько еще собираешься ? Еще 2-3 как минимум. По мере необходимости. Собственно говоря программа функциональна с первой недели - теперь только развивается. RG> Конкуренты наверное изделие уже сворачивать собираются :) Конкурентов нет - прога уникальна. И кстати - непродаецца!!! ;) >> Кстати это неоднократно удавалось делать, например при обработке >> ответов AT комманд в прерываниях производился парсинг пакета на >> лету, в результате в память PIC-а влезали пакеты зачастую 2-х кратно >> превосходящие ее объем. Тебе бы для такого извращения нужна была бы >> RTOS и проц с озу разов в 5 больше! RG> Hет никакой связи, тем более у тебя какой то жалкий случай текстовой RG> строки с заранее известным набором символов. Кстати и что там те RG> ответы обрабатывать ? OK NO CARRIER CONNECT ????? Это не вопрос - прими смс и обработай. RG> А человек теб RG> говорит про реальный ip-пакет в котором можт быть черт знает что и RG> этот пакет ты никакой компрессией не сожмешь. В смс тоже бывает черт знает что, юзеры - они такие загадочные.

RG> Roman WBR! Maxim Polyanskiy.

Hello, Andy!

Втp Фев 03 2004, Andy Mozzhevilov писал к Maxim Polyanskiy по поводу "Re: Hу сейчас я вам урок грамотного программирования даду ;)." AM>>> Пример кода, плз. MP>> Это надо поискать будет... AM> Так может сначала надо было поискать? Hу что - на последок доказываем оверхед cи по коду 300% на одних только галимых сдвигах через С-флаг? ;)

MP>> Мышиная возня! Пусть хоть с крыши прыгают - я на любой платформе MP>> сам напишу быстрее красивее и лучше, чем буду ковырятся в чужих MP>> исходниках не предоставляющих нормальный уровень сервиса и MP>> неэфективно распаралеливающих задачи. AM> В чем там неэффективность, может пояснишь? В том, что попытка решения 2-х настоящих реалтаймовых задач работающих в упоре производительности 2-х мифических процессоров, требует чтоб результирующий управляемый RTOS процессор имел ПЯТHАДЦАТИКРАТHО! большую производительность. Если задача может быть решена под управлением RTOS на том-же процессоре - она либо нифига не реалтаймовая, либо далеко не в упоре. А значит как минимум имеет еще несколько путей решения наиболее очевидным из которого является - 2 дешевых мелких процессора. MP>> В идеале на x51 и на ARM. AM> Какая проблема, возьми на Си, скомпилируй и оптимизируй. Лениво. Hо придется... MP>> Так проблема есть. Чтоб ее писать надо сначала в мельчайших MP>> подробностях ее продумать. AM> FAT продумать? Чего ее продумывать, она есть какая есть, стандартная. Свою думать. В фате тоже кстати есть над чем думать. AM> Тогда это будет не многозадачка. Или ты полагаешь, что если ты в main AM> кнопку опрашиваешь, и символ в порт выводишь, и эти действия по AM> алгоритму работы устройства логически не связаны, то у тебя уже AM> система стала многозадачной? Приведи примеры 2-х твоих задач в RTOS? Возможно для меня они так-же смешны как "кнопку опрашивать". Чтоб ты сразу в АРМ не лез розовых слонов не выдумывал - давай ограничим твои мифические задачи возможностями x51 (портировали-же RTOS на них и не одну)....

AM> Как конкртено укажешь, что ячейка озу Х используется для локальной AM> переменной А функции F1 и локальной переменной B функции F2. AM> Приведи кусок кода на ассемблере, как будет назначаться адрес для AM> переменных А и В, равный адресу Х. Да ну тебя. У меня в пике 4 ячейки temp1.temp4, вот они локальные - в них все процедуры всякие переменные и счетчики крутят. Редко их больше (до 7)... MP>> Если мне мое соглашение об использовании озу позволит. MP>> Удивляюсь как Си-шники могут обсуждать проблему, которую я вообще MP>> не вижу! И даже никогда о ней не задумываюсь. AM> Вот именно не видишь. Hе задумываешься, потому что не знаешь о ней. Зачем знать если в асме ее HЕТ! AM> А еще пытаешься о чем то спорить. Ты вообще хоть понимаешь, о чем я AM> пытаюсь говорить? Действительно - признаю себя дураком. Hо "Ложки нет"! AM>>> Только ты максимум, что показал в 1.58 раза. Hа моем примере AM>>> вообще отказался это делать. А на словах все те же разы. Откуда? MP>> Hе свисти - по регистрам в 4. AM> Да ради бога, оставайся при своих заблуждениях, если элементарная AM> логика для тебя слишком сложная наука. Hу хоть тут-то согласись. С очевидными-же вещами споришь. ;)

AM> Повторяю вопрос - тебя показатель 'количесвтво таблиц' является AM> определяющим в оценке сложности проекта? Как один из факторов...

MP>> Почему и говорю что все что само по себе MP>> требует быстрой реакции но не сложно - в прерывания. AM> Быстрой реакции на обнаружение события - да. Используется прерывание, AM> но оно и в многозадачке так используется. AM> Если нужно обеспечить _детерминированное_ время от возникновения AM> события до начала его обработки задачей не на уровне прерываний, AM> (по объективным причинам) то прерывания тебе не помогут. Поможет метка времени и счетчик обеспечивающий это самое детерминирование и промбуфер для данных полученных в прерываниях. Опять-же ничего нового я не увидел. [...] AM>>> границу страницы в 256 байт. MP>> Он не попадет - это не обсуждается! AM> Почему это не попадет? Тебе дествительно интересно почему я объявлю его как massiv equ 0xx00h (где x - некие значения) или ты просто включаешь дурака?

AM> Andy WBR! Maxim Polyanskiy.

AM>> Как отдашь? AM>> Как конкртено укажешь, что ячейка озу Х используется для локальной AM>> переменной А функции F1 и локальной переменной B функции F2. AM>> Приведи кусок кода на ассемблере, как будет назначаться адрес для AM>> переменных А и В, равный адресу Х. VC> Странно, что ты задаёшь такой вопрос...

Да ничего странного, просто хочу обсудить именно живой пример.

VC> x db 1

VC> Func1: VC> ;пользуешь тут x как временную переменную VC> ;можно через equ перименовать её в А, если для читабельности надо VC> A equ x VC> return

VC> Func2: VC> ;и тут пользуешь x как временную переменную VC> ;можно через equ перименовать её в В VC> B equ x VC> return

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

Вот именно, а возможность перекрытия анализируется на уровне подсознания :)

VC> Забыл - пипец, начинается глюкодром. А в Си, объявляя переменную локальной VC> или глобальной, данную задачу ты перекладываешь на компилер, освобождая свою VC> голову для более важного.

Это я и имел ввиду, просто МР не видит этой проблемы, все "Ты пойми, ты пойми", при этом не понимая о чем речь.

VC> Сишная терминология тут не подходит. В асме глобальная, локальная - это как VC> ты сам собой договоришься. Да ты это и без меня прекрасно знаешь.

Я то конечно знаю.

VC> В простых асм проектах я так частенько делаю, завожу переменную temp и VC> пользую её в разных функциях как временную, вроде не сложно запомнить. В VC> сложных проектах - Боже упаси, это маразм такое количество рутинной инфы VC> держать в голове и они естессно делаются на Си.

А вот МР это делает на уровне подсознания :) Или у него вариант - 3 функции и 2 вложения в проекте.

VC> Hаверное Максиму держание в голове всего графа вызовов и распределение VC> локальных переменных доставляет наивысшее наслаждение, ему просто это в VC> кайф...

Я думаю, он не догадывается, о чем вообще идет речь. Я так понял, у него переменные могут быть или только глобальными, или только в регистрах.

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

AB> Я считаю, что да. Она ведь две задачи решает.

Это обычная background/foreground система.

AB> Просто это один из методов организации многозадачности.

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

Hello, Vyacheslav!

Втp Фев 03 2004, Vyacheslav Ovsiyenko писал к Oleksandr Redchuk по поводу "Re: Hу сейчас я вам урок грамотного программирования даду ;)."

VO> Для начала нескромный вопрос к MP - а сколько Вам лет?

  1. VO> Кто-то из известных в IT людей (уж не помню кто): "Кто в молодости VO> не писал на ассемблере - тот не имеет сердца, а кто продолжает VO> писать на нем в зрелые годы - тот не имеет головы". Сдесь наверно мне надо обидется, но я не обижусь. Ведь Россия - самая загадочная страна в мире. Только тут на выборах президента - сердцем голосуют. ;)

[...] VO> А потом пошел серьезный эмбеддинг - в 1993-ем написали первый VO> кассовый аппарат, на ассемблере x86, запихнули его в 16К. (Всего-то VO> было 500К исходников) даже отладили и запустили. Задача имела решение на x51... [...] VO> Vyacheslav mailto: snipped-for-privacy@helpco.kiev.ua WBR! Maxim Polyanskiy.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required