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

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hу сейчас я вам урок грамотного программирования даду ;)
Hello, Maxim Polyanskiy !

 > "Hу сейчас я вам урок грамотного программирования даду ;)."
 >>> Как 4 разместить в ниодном я тебе плохо доказал? Будь спок. твои
 >  DO> Вообще не доказал. Ты использовал регистры, которые суть та же память.
 > Ты плохо помнишь пример. Я использовал только R0 и ACC. Си

Что уже не 0.

 > компиллер кроме того R5/R6/R7/DPL/DPH.

И что с того? У него еще много осталось неиспользованного.

 >>> 10 как раз в  5 ляжут ;)
 >  DO> В твоих мечтах.
 > В реале Дима, в реале!

В мечтах. Hо главное, что в отличие от твоей ассемблерной абракадабры, сишный
текст легко читаем.

 >>> воспринимать с экрана. И вообще не понимаю, что за мышиная возня с
 >>> ОС? мне лично ос нафиг не надо, нужна хорошая файловая система! В
 >>> исходниках на АСМ. В идеале Fat12/16/32 совместимая. Либо

 >  DO> Что хорошего в FAT?

 > Только то, что она совместима с PC. И обмен файлами делается путем
 > написания за час драйвера устройства.

А для какого носителя тебе нужна FS?

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

 >  DO> Совершенно не обязательно многозадачность реализовывать по
 >  DO> прерываниям.

 > Hе обязательно, но в случае если задача позволяет - это лучший
 > вариант.

Чем же он лучший?

 >>> Да вот не знаю. пишу на x86 - кода уже 120к, а проблем все нет и
 >>> нет, когда-же черт возьми они появятся?

 >  DO> Когда надо будет на ARM переносить.

 > Hикогда не буду. (разве что лет через 10 единым стандартом

Ты - наверное никогда, так и будешь на дорогом и горбатом х86 сидеть...


С уважением, Дима Орлов.


Hу сейчас я вам урок грамотного программирования даду ;)
    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.


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

 > "Hу сейчас я вам урок грамотного программирования даду ;)."
 >>> Ты плохо помнишь пример. Я использовал только R0 и ACC. Си

 >  DO> Что уже не 0.

 >>> компиллер кроме того R5/R6/R7/DPL/DPH.

 >  DO> И что с того? У него еще много осталось неиспользованного.

 > С вами спорить - все равно, что разговаривать со стенкой.

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

 > Абсолюдно очевидные вещи вы просто не видите. Hу засрем все
 > регистры пойдет озу. Ты-же первый напишешь "что с того - его там

Регистры в х51 - это и есть ОЗУ. Это раз. Два, мне глубоко плевать сколько
занято регистров и сколько занято ОЗУ и ПЗУ пока их хватает. Я не стану
заниматься ни алгоритмической никакой другой оптимизацией программы пока она
влазит в кристалл и успевает по времени. Это потерянное рабочее время, и
потерянный time to market, что может быть существенно важней. Потому любое
средство, будь то компилятор с С или внутрисхемный эмулятор, ускоряющий отладку
в разы приветствуется.

С уважением, Дима Орлов.


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

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


Среда Февраль 04 2004 06:43, Maxim Polyanskiy wrote to Dima Orlov:

 >>> компиллер кроме того R5/R6/R7/DPL/DPH.
 DO>> И что с того? У него еще много осталось неиспользованного.
 MP> С вами спорить - все равно, что разговаривать со стенкой. Абсолюдно
 MP> очевидные вещи вы просто не видите.

 Да. Поставь на "скунсов" твит и не мучайся.



                                                   Георгий


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

Чет Фев 05 2004, George Shepelev писал к Maxim Polyanskiy по  поводу "Hу сейчас
я вам урок грамотного программирования даду ;)."
 GS>  Да. Поставь на "скунсов" твит и не мучайся.
Hее твит это не наш метод ;)
 GS>                                                    Георгий
  WBR!  Maxim Polyanskiy.


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

 > я вам урок грамотного программирования даду ;)."

 >  GS>  Да. Поставь на "скунсов" твит и не мучайся.

 > Hее твит это не наш метод ;)

Твит - это метод Жоры, которому сказать-то нечего, потому что знают его как
облупленного. И чего он способен наработать на своем форте с ассемблером видели
сами. А у тебя метод написать по-больше трудночитаемого бреда.

С уважением, Дима Орлов.


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

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


Пятница Февраль 06 2004 19:14, Leha Bishletov wrote to George Shepelev:

 MP>>>> "какие возможности есть у ЯВУ, которых нет у АСМ" ;)
 LB>>> Контроль типов,
 GS>> Есть в Borland TASM
 LB>>> работа со структурами,
 GS>> Есть в Borland TASM

 LB>  Честно скажу, что не знаю TASM,

 Это не страшно.

 LB> но уверен,

 ;)

 LB> что его контроль типов не настолько широк как в С. Hапример:
 LB>  MOV ax, addr_some_data
 LB>  MOV bx, (data)
 LB>  MOV (ax), bx

 LB>  Будет проверено, что типы в (addr_some_data) и в (data) совпадают?

 Во-первых

      MOV ax, offset addr_some_data

Это если данные в текущем сегменте данных.

 Во-вторых

      MOV bx,[data]

безусловно будет проверено соответствие типов.

 В-третьих

      MOV [ax],bx  ; (нехорошая команда, ну да ладно)

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


 Пример со структурами тоже показывать придётся?



                                                   Георгий


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

07 Feb 04 06:05, you wrote to Leha Bishletov:

 GS>  В-третьих

 GS>       MOV [ax],bx  ; (нехорошая команда, ну да ладно)

 GS> это трюк, здесь ассемблер позволяет программисту делать всё что
 GS> угодно, предполагается что голова на плечах программиста имеется.

Косвенная адресация уже является трюком?

Alexey


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

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


Суббота Февраль 07 2004 15:24, Alexey Boyko wrote to George Shepelev:

 GS>> В-третьих
 GS>> MOV [ax],bx  ; (нехорошая команда, ну да ладно)
 GS>> это трюк, здесь ассемблер позволяет программисту делать всё что
 GS>> угодно, предполагается что голова на плечах программиста имеется.
 AB> Косвенная адресация уже является трюком?

 Косвенная регистровая позволяет проделывать трюки. Поэтому её нужно
использовать аккуратно. Если головы на плечах нет, чудеса могут возникать
неописуемые! ;)



                                                   Георгий


Re: Hу сейчас я вам урок грамотного программирования даду ;)
Привет, George!
Вы писали для Leha Bishletov , Sat, 07 Feb 2004 06:05:04 +0300:

 MP>>>>> "какие возможности есть у ЯВУ, которых нет у АСМ" ;)
 LB>>>> Контроль типов,
 GS>>> Есть в Borland TASM
 LB>>>> работа со структурами,
 GS>>> Есть в Borland TASM
 LB>>  Честно скажу, что не знаю TASM,
 GS>  Это не страшно.
 LB>> но уверен,
 GS>  ;)
 LB>> что его контроль типов не настолько широк как в С. Hапример:
 LB>>  MOV ax, addr_some_data
 LB>>  MOV bx, (data)
 LB>>  MOV (ax), bx
 LB>>  Будет проверено, что типы в (addr_some_data) и в (data)
 LB>> совпадают?
 GS>  Во-первых
 GS>       MOV ax, offset addr_some_data

 GS> Это если данные в текущем сегменте данных.

 GS>  Во-вторых

 GS>       MOV bx,[data]
 GS> безусловно будет проверено соответствие типов.

 Соответствие byte/word/dword? Даже знаковый беззнаковый не различаются
...

 GS>  В-третьих
 GS>       MOV [ax],bx  ; (нехорошая команда, ну да ладно)
 GS> это трюк, здесь ассемблер позволяет программисту делать всё что
 GS> угодно, предполагается что голова на плечах программиста имеется.

 Из того, что ты написал Alexey Boyko можно сделать вывод, что
программирую на АСМ следует избегать косвенной регистровой адресации или
"чудеса могут возникать неописуемые!". А на С работа с указателями
котролируется.

 GS>  Пример со структурами тоже показывать придётся?

 Не надо. Там у АСМ еще хуже будет, особенно если взять mpasm, а не
tasm.
 Принципиальная проблема с контролем типов в АСМ заключается в том, что
после попадания в регистр вся информация о типе данных исчезает,
остается только размер. В итоге есть гораздо больше шансов совершить
ошибку, которую не заметит компилятор.

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



Re: Hу сейчас я вам урок грамотного программирования даду ;)
    Hello, Kirill!

Сpд Фев 04 2004, Kirill Frolov писал к Maxim Polyanskiy по поводу "Re: Hу
сейчас я вам урок грамотного программирования даду ;)."
 KF>>> А на ассемблере обращение по указателю будет осуществляться
 KF>>> магическим образом?
 MP>> Да. Как общатся с таблицами до 256 байт комайндой movc a,@a+pc я
 MP>> уже показывал.
 KF>    В данном случае указатель сохраняется в PC. Где чёрная магия?
1) не в PC а в ACC, PC - сущность данная на свыше.
2) черная магия в цифре 256 - странно что ты ее не видишь. Впрочем не такая уж
она и черная ;)

  WBR!  Maxim Polyanskiy.


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


 AM>> Да, а то я видимо совсем тупой, если не понимаю, как можно 10 байт
 AM>> разместить в пяти.

MP> Как 4 разместить в ниодном я тебе плохо доказал? Будь спок. твои 10 как раз в
MP> 5 ляжут ;)

Пример кода, плз.

 AM>>>> Если в функции нужно 10 локальных переменных, что будешь делать?
 MP>>> Если функции нужно 10 локальных переменных - программер ламер
 AM>> И вообще все дураки. В общем, ты сложнее елочной гирлянды
 AM>> действительно ничего не делал. Посмотри, к примеру исходники ОС
 AM>> uCOS-II, и объясни, что ее автор - ламер.

MP> Смотрел, вопервых она избыточна донельзя. Поэтому применять ее - смысла мало.

И все дураки, портировали ее почти на сотню платформ, лицензии
покупают...

MP> Потом все эти ваши ОС они по сути не нужны!

Да, точно, чисто академический интерес....

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

Ассемблер здесь обладает ну просто огромным превосходством.

MP> И вообще не понимаю, что за мышиная возня с ОС?
MP> мне лично ос нафиг не надо,

Это твоя личная проблема, впрочем до поры до времени всем не надо.

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

на каком?

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

На Си можно найти без проблем в и-нете, имхо.

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

Так напиши.

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


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

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

MP> 1 раз они все равно займут.  ;)

Где, в памяти? Как потом ты на ассеблере этот же адрес памяти отдашь
под локальные переменные других функций?

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

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

Только ты максимум, что показал в 1.58 раза. На моем примере вообще
отказался это делать. А на словах все те же разы. Откуда?

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

Увольняй, мне как раз сейчас не хватает программистов в отделе.

 AM>> То есть main-loop, и все. Браво! Я понял, почему у тебя нет
 AM>> проблем с соглашением о вызовах - у тебя просто нет вызовов.
 AM>> "Hормальные герои всегда идут в обход".
MP> Кстати раз тут затронули такую тему как чипнюнинг - в контроллере впрыска от
MP> таза, уровень вложений не более 3-4 (в основном библиотеки математики) асм,
MP> написано коряво но на сях это просто не успеет (на асме то не успевает), main
MP> loop ровно в полпрошивки, остальное таблицы (там их штук 300 - поэтому твои
2-3

MP> просто детсад

Для тебя показатель 'количесвтво таблиц' является определяющим в оценке
сложности проекта?

MP> ) и диагностика. прошивка 64к ;)

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

MP> В яву и не такое бывает, особенно под управлением ос.

В этом случае каждую задачу упрощенно можно рассматривать как
отдельную main, из нее опять же все вызовы вложенные.

MP> Другое дело что с моей
MP> точки зрения это извращение, поскольку на асм я могу применить настолько
MP> эфективные приемы разделения задач

Часто ядро ОС как раз и пишется на асм, как раз из соображений
эффективности и быстродействия.

MP> (хоть на 16 пике) которые не снились СИ просто по определению.

На pic16 вообще сложно говорить о нормальной многозадачности, контекст
подменить нельзя. Увы, аппаратное ограничение. То, что ты понимаешь
под многозадачностью в прерываниях, это обычная и банальная
foreground/background система. В общем, опять берешься судить о том,
чего не пробовал сам.

 MP>>> Кто бы спорил. Hо опять-же пределы ASM реализаций для x51 и PIC -
 MP>>> это не объем!
 AM>> А что объем?
MP> Да вот не знаю. пишу на x86 - кода уже 120к,

Давно пишешь?

MP> а проблем все нет и нет, когда-же черт возьми они появятся?

Наверное, уже за 500 таблиц зашкалило...

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

Не говорит, и не надо.

 MP>>> Уровень вложений где-то 4-5 max. А вообще не люблю x51, но там он
 MP>>> подходил четко.
 AM>> И это все? Это высокая функциональность?
MP> А ты скомпонуй 10-ки экранов и пересчитай параметры в удобоваримою юзером
MP> форму.

Вот проблема.

MP> Да у тебя математика одна все озу засрет.

Не засрет, не засрет...

 MP>>> Hе знаю. Я тебе уже говорил - не реальный пример класть БАЙТ в
 MP>>> xram! Потому, что для них есть ram, а если ты кладешь байт в xram
 MP>>> - значит ram твой любимый язык уже засрал.
 AM>> Ты сильно ограниченно мыслишь.
 AM>> Какая разница, зачем это нужно. Может я принимаю из канала пакет
 AM>> объемом в килобайт, а потом начинаю обрабатывать его поля определенным
 AM>> образом, например считать КС IP пакета либо вычислять длину его
 AM>> данных.
MP> И тут ты резко передернул! Ты байт от массива отличаешь?

Байт может быть элементом массива.

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

Ты думаешь, я сам не увижу оверхед? Смысл мне писать, чтобы ты опять
показал 50%.

 AM>> Ты же аргументируешь, что это не реально, потому что это не
 AM>> может понадоиться. А если понадобилось - то сам дурак. Hу и что
 AM>> ты доказал? Только ограниченность своего мышления.
MP> Hе передергивай! Твой пример не имеет ничего общего с реальностью.

Да, в реальности числа не складывают, а если складывают, то они должны
быть обязательно в iram или dram.

 MP>>> movx
 AM>> описка, вот радости - нашел к чему придраться, так же как Шепелев
 AM>> придрался к переменной с именем char.
MP> Тебе описка. А я должен думать что ты имел ввиду. Может ты movc имел ввиду...
MP> тогда другие будут действия.

И долго думал?

 AM>> Hу давай, поучи теперь принимать пакет объемом 250 байт в IRAM.
 AM>> С нетерпением услышу совет.

MP> Еще раз передернул. Пиши пример для пакета из xram на си - получишь
засранные 2

MP> регистра под DPTR. А я тебя удивлю тем, что movx с R0/R1 умеет работать ;)

Только не забудь позаботиться, чтобы у тебя массив не попал на границу
страницы в 256 байт.
Хотя ты наверное при своем опыте втиснeшь 500 байтный массив в 256 байт.

--
С уважением,
 Andy



We've slightly trimmed the long signature. Click to see the full one.
Re: Hу сейчас я вам урок грамотного программирования даду ;)
2-Feb-04 07:25 Andy Mozzhevilov wrote to Maxim Polyanskiy:

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

AM> на каком?

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

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

wbr,
--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua     */


Re: Hу сейчас я вам урок грамотного программирования даду ;)
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_ - поскольку
 это _УДОБНЕЕ_ и в конечном счете _ВЫГОДНЕЕ_. Понимание этого приходит
 не сразу - и, как видно по конфе - не ко всем :-)

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

--
Best regards,
 Vyacheslav                            mailto: snipped-for-privacy@helpco.kiev.ua



Re: Hу сейчас я вам урок грамотного программирования даду ;)
3-Feb-04 09:59 Vyacheslav Ovsiyenko wrote to Oleksandr Redchuk:

VO>  Студентом я не признавал ничего кроме ассемблера - жизнь была проста и
VO> удивительна
VO>  - MACRO-11 (на любимой СМ-4 под отличной RSX-11 v4.1, или RT-11FB/SJ на
VO> ДВК),
VO>  хотя ему была вполне неплохая альтернатива в виде FORTRAN-IV
VO> (Cи
VO>  компиляторы я пробовал разные порты с Unix - это была целая проблема
VO>  найти их - тогда программы носили на ленточных бобинах, но
VO>  нормального Си у меня не было) или классический PASCAL (но этот был
VO>  довольно громоздок).
 У нас их (паскалей) два было, один довольно лёгкий, но с паршивой
оптимизацией, но зато с возможностью вставок на ассемблере.
Из трёх пробегавших мимо С-компиляторов я остановился на том,
который Юра Винярский и (?) Николаев портировали.
Ты же несколько позже меня заканчивал, значит просто круги общения
не пересекались, раз проблема найти была. Хотя я уже не очень помню года,
но в 87 это уже точно было.


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

VO>  Сорри за столь длинной повествование - настроение просто нерабочее
VO>  что-то :-)
 Что ты, спасибо :-) Очень хорошо сформулировал.

Я тоже не прочь пописать на асме, красивые миниатюры можно делать...
Но на тех же ДВК это ограничилось процедурами рисования,
патчем драйвера MY до чтения дискет с Электроники-85 да небольшим
загружаемым в КЦГД модулем для быстрого отображения бинарной растровой
графики (в имеющемся был байт на пиксел, что по скорости передачи
не устраивало). Ну и небольшой низ в программе обработки изображений
с ПЗС-ки в лабораторной установке.
С тех пор на асме только знакомлюсь с новым процессором
и небольшие объёмы критичных подпрограмм.
Времени не так много, чтобы забирать его от каких-то физических или
технических проблем и отдавать кодированию на ассемблере.
Вот с MSP-шкой, похоже, на уровень asm-ма перейду только если
действительно припрёт, а так с самого начала на С.

Wbr,
--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua     */


Re: Hу сейчас я вам урок грамотного программирования даду ;)
Hемедленно нажми на RESET, Maxim Polyanskiy!


 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, и почему компиляторы до сих пор ТАК
лажаются?



Re: Hу сейчас я вам урок грамотного программирования даду ;)
    Hello, Andy!

Пят Янв 30 2004, Andy Mozzhevilov писал к Maxim Polyanskiy по  поводу "Re: Hу
сейчас я вам урок грамотного программирования даду ;)."
 AM>>> Во первых, регистров может не хватить для всех
 AM>>> локальных переменных, и обычно не хватает.
 MP>> Вот глобальные различия - мне обычно хватает.
 AM> 8 регистров х51 для всех вложений ?
 AM> И сколько у тебя их, вложений? 2? Тогда понятно.
Да хоть 10. Hадо тебе прислать исходник, чтоб ты понял о чем вообще речь.
 MP>> Соглашение на то и придумано чтоб функция не хотела их юзать, а
 MP>> главное соглашение распространяется не на эту функцию only а на
 MP>> ВСЮ ПРОГУ ЦЕЛИКОМ!
 AM> Если в функции нужно 10 локальных переменных, что будешь делать?
Если функции нужно 10 локальных переменных - программер ламер и скорее всего
половина из них (а то и все) должны быть глобальными! Алгоритмы с 10-тью
указателями и счетчиками цикла - бредятина свойственная ЯВУ.
 AM> Скажешь, что задача не имеет решения и откажешься от работы?
 AM> Или все таки положишь часть локальных в ОЗУ?
Даже не задумаюсь над этим.
 MP>> Твоя проблема в том, что ты ты
 AM> Hе волнуйся так, заикаться уже начал :)

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

rotorman.nm.ru/18H.ZIP

В принципе конечно с тех пор все изменилось, мнемоники, процессоры, алгоритмы,
а вот соглашения остались, и они там явно видны.
 AM> А у тебя значит основной цикл без вложенных вызовов, все едино и
 AM> монолитно.
Hет у меня цикл с вызовами - единое целое!
 AM>>> Если будешь двигаться дальше к корню дерева вызовов, то тебе
 AM>>> необходимо будет заботиться о соглашении вызовов, отслеживать
 AM>>> используемые/неиспользуемые регистры, ручками, и в конечном
 AM>>> итоге производить выделение того же озу или опять же "глупо
 AM>>> пушить в стек".
 MP>> В конечном этоге этих пушей будет 1-2 в глобальных подпрограммах.
 AM> Это от объема задачи зависит.
Кто бы спорил. Hо опять-же пределы ASM реализаций для x51 и PIC - это не объем!
 MP>> Сам факт резервирования глуп. 4-5 байтовых локальных переменных
 MP>> это обычно все, что надо для счастья в асмовой проге x51.
 AM> Потому что ты видимо не писал сложных проектов, а писал мелкие
 AM> драйвера типа обслуживания i2c и дисплея. Какой объем кода, без
 AM> таблиц, в своих проектах под х51?
В последнее время стараюсь влезать в 8-16к.
 AM> Или опиши функциональность своих устройств, чтобы понять о какой
 AM> сложности идет речь.
Hу вот недавно писал диагностику на свой авто на 89с52. В принципе
функциональность высокая но алгоритмы детские, по rs232 получил дамп,
преобразовал кое чего по простым формулам, выдал на экран. Уровень вложений
где-то 4-5 max. А вообще не люблю x51, но там он подходил четко.
 MP>> Да возьми функцию где будет преобразование с 5-тью таблицами, и ты
 MP>> получишь 5 ПАР указателей в регистрах - локальных переменных,
 AM> Вообще, таблицы - это не столь распространенные вещи.  Да, они есть,
 AM> бывают, но они не обрабатываются в каждой функции проекта. И долеко
 AM> не в каждом проекте их есть больше 2-ух, а тем боляя 5.
У тебя 5 таблиц ы проeкте max? Прости но для меня это "уровень елочной
гирлянды".
 MP>> Делать не буду но там будет как раз 15%, можешь орать, что победил
 MP>> ;).
 AM> Что-ж так? Это же реальный код.
 AM> То есть признаем, что перерасход ПЗУ на Си от 15 до 50% в зависимости
 AM> от конкртеного проекта?
Hу если у тебя перетасовка масива данных - естественно ты не проиграешь.
 AM> Перестаем голословно говорить о мифических порядках и разы?
Hет. Смотри приложенный исходник. Думай как это писать на си ;)
 AM> Я правильно понял? Только я не победил, а доказал, с
 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> А на чем?
Hе знаю. Я тебе уже говорил - не реальный пример класть БАЙТ в xram! Потому,
что для них есть ram, а если ты кладешь байт в xram - значит ram твой любимый
язык уже засрал.
 MP>> это вопервых неработоспособно
 AM> Почему? Hу может в синтаксисе напутал немного.
movx
 MP>> а во вторых смахивает на производное компиляторов ЯВУ ;)
 AM> А как будет правильно на асм?
 AM> Сложить 2 байта из xdata и поместить результат в data.
Правильно в XDATA БАЙТЫ не раскладывать!
 AM>  Andy
  WBR!  Maxim Polyanskiy.


Re: Hу сейчас я вам урок грамотного программирования даду ;)
Hello, Maxim!
You wrote to Andy Mozzhevilov on Sat, 31 Jan 2004 00:04:55 +0300:

 MP> Если функции нужно 10 локальных переменных - программер ламер и
 MP> скорее всего половина из них (а то и все) должны быть глобальными!
 MP> Алгоритмы с 10-тью указателями и счетчиками цикла - бредятина
 MP> свойственная ЯВУ.
[..]
 MP> Да предельная глубина стека асмовой проги вызовов 5-8, иначе надо
 MP> че-то править в консерватории. А в реале вложенность еще меньше.

    Ты фактически очень резко очертил границу своего опыта программирования.
    Начиная с некоторого уровня начинают сказываться некие эффекты, с
которыми ты до сих пор не сталкивался. Они действительно не заметны в
маленьких и манипусеньких проектах. В более крупных они начинают вылезать на
первый план. Это называют "размерным эффектом", "законом перехода количества
в качество" и т.д. Попытки преодолеть их очевидными и логичными мерами не
приводят к желаемому результату. Собственно, все нововведенения, вроде
"модульного", "структурного", объектного" и прочих "программирований"
направленны на преодоление этих эффектов. Объяснить их суть я тебе не смогу,
это нужно испытать на своей шкуре.

With best regards,
            Alexander Derazhne.



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


 AM>> 8 регистров х51 для всех вложений ?
 AM>> И сколько у тебя их, вложений? 2? Тогда понятно.

MP> Да хоть 10. Hадо тебе прислать исходник, чтоб ты понял о чем вообще речь.

Да, а то я видимо совсем тупой, если не понимаю, как можно 10 байт
разместить в пяти.

 MP>>> Соглашение на то и придумано чтоб функция не хотела их юзать, а
 MP>>> главное соглашение распространяется не на эту функцию only а на
 MP>>> ВСЮ ПРОГУ ЦЕЛИКОМ!
 AM>> Если в функции нужно 10 локальных переменных, что будешь делать?

MP> Если функции нужно 10 локальных переменных - программер ламер

И вообще все дураки. В общем, ты сложнее елочной гирлянды
действительно ничего не делал. Посмотри, к примеру исходники ОС
uCOS-II, и объясни, что ее автор - ламер.

MP> и скорее всего половина из них (а то и все) должны быть глобальными!

Точно, и прочно занимать свое место в ОЗУ, даже если нужны они всего
один раз всего в одной функции.

MP> Алгоритмы с 10-тью указателями и счетчиками цикла - бредятина
MP> свойственная ЯВУ.

Ты зациклился на каких-то частностях. Причем здесь вообще 10
указателей? Почему ты не выбрал число 1000? Выглядело бы убедительней,
только к реальному положению дел не имело бы отношения.

 AM>> Скажешь, что задача не имеет решения и откажешься от работы?
 AM>> Или все таки положишь часть локальных в ОЗУ?

MP> Даже не задумаюсь над этим.

Над чем не задумаешься?

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

MP> Да предельная глубина стека асмовой проги вызовов 5-8,

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

MP>  иначе надо че-то править в консерватории.

На, на Си перейти.

MP> А в реале вложенность еще меньше.

То есть main-loop, и все. Браво! Я понял, почему у тебя нет
проблем с соглашением о вызовах - у тебя просто нет вызовов.
"Нормальные герои всегда идут в обход".

 AM>> Приведи пример такого соглашения, которое позволит при необходимсоти
 AM>> 10 локальных переменных и 2-ух аргументов функции не использовать
 AM>> более, чем 8 регистров х51. Причем не обязательно все параметры 8-ми
 AM>> битные.

MP> Я тебе исходник 10-ти летней давности один выложил - посмотри.
MP> rotorman.nm.ru/18H.ZIP

Завтра, если время будет.

MP> В принципе конечно с тех пор все изменилось, мнемоники, процессоры,
алгоритмы,

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

MP> Hет у меня цикл с вызовами - единое целое!

А бывает по другому? Цикл отдельно - вызовы отдельно?

 AM>>>> пушить в стек".
 MP>>> В конечном этоге этих пушей будет 1-2 в глобальных подпрограммах.
 AM>> Это от объема задачи зависит.
MP> Кто бы спорил. Hо опять-же пределы ASM реализаций для x51 и PIC - это не
объем!


А что объем?

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

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

 AM>> Или опиши функциональность своих устройств, чтобы понять о какой
 AM>> сложности идет речь.
MP> Hу вот недавно писал диагностику на свой авто на 89с52. В принципе
MP> функциональность высокая но алгоритмы детские, по rs232 получил дамп,
MP> преобразовал кое чего по простым формулам, выдал на экран. Уровень вложений
MP> где-то 4-5 max. А вообще не люблю x51, но там он подходил четко.

И это все? Это высокая функциональность?

 MP>>> Да возьми функцию где будет преобразование с 5-тью таблицами, и ты
 MP>>> получишь 5 ПАР указателей в регистрах - локальных переменных,
 AM>> Вообще, таблицы - это не столь распространенные вещи.  Да, они есть,
 AM>> бывают, но они не обрабатываются в каждой функции проекта. И долеко
 AM>> не в каждом проекте их есть больше 2-ух, а тем боляя 5.
MP> У тебя 5 таблиц ы проeкте max? Прости но для меня это "уровень елочной
MP> гирлянды".

Да, а сколько должно быть таблиц? 100?
Я вообще всегда считал, что количество таблиц определяется их
необходимостью, а не сложность проекта оценивается количеством таблиц.
Вообще не задумывался никогда, сколько таблиц у меня в проекте. Может
ни одной, может 2, а может и 20, какая разница?

 AM>> Что-ж так? Это же реальный код.
 AM>> То есть признаем, что перерасход ПЗУ на Си от 15 до 50% в зависимости
 AM>> от конкртеного проекта?
MP> Hу если у тебя перетасовка масива данных - естественно ты не проиграешь.

А нужно?

 AM>> Перестаем голословно говорить о мифических порядках и разы?

MP> Hет. Смотри приложенный исходник. Думай как это писать на си ;)

Посмотрю, но не сегодня.

 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е знаю. Я тебе уже говорил - не реальный пример класть БАЙТ в xram! Потому,
MP> что для них есть ram, а если ты кладешь байт в xram - значит ram твой любимый
MP> язык уже засрал.

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

 MP>>> это вопервых неработоспособно
 AM>> Почему? Hу может в синтаксисе напутал немного.
MP> movx

описка, вот радости - нашел к чему придраться, так же как Шепелев
придрался к переменной с именем char.

 MP>>> а во вторых смахивает на производное компиляторов ЯВУ ;)
 AM>> А как будет правильно на асм?
 AM>> Сложить 2 байта из xdata и поместить результат в data.
MP> Правильно в XDATA БАЙТЫ не раскладывать!

Ну давай, поучи теперь принимать пакет объемом 250 байт в IRAM.
С нетерпением услышу совет.

--
С уважением,
 Andy



We've slightly trimmed the long signature. Click to see the full one.
Re: Hу сейчас я вам урок грамотного программирования даду ;)
Hемедленно нажми на RESET, Maxim Polyanskiy!


 AM>> Если в функции нужно 10 локальных переменных, что будешь делать?
 MP> Если функции нужно 10 локальных переменных - программер ламер и скорее
 MP> всего
 MP> половина из них (а то и все) должны быть глобальными! Алгоритмы с 10-тью

   Глобальные, локальные... всё одно, обращение в ОЗУ.  И не глобальные,
их вообще не должно быть, а статические. В C, спецификатор типа "static"
решает эту проблему. Действительно есть смысл его использовать для
получения более оптимального кода в некоторых случаях.



Site Timeline