Много клиентов с картами

Sep 08, 2004 Last reply: 21 years ago 170 Replies

Hello, Dima!

Втp Сен 21 2004, Dima Orlov писал к Maxim Polyanskiy по поводу "Много клиентов с картами." >> Hу положим PC - от $500, картридер - $10. А софт на них сам >> напишется? DO> Hет конечно, но ведь и для самоделок софт сам не напишется. Только на DO> РС тот софт, что ты собираешься для самоделок писать уже написан и DO> стоит копейки, или как принято в совке по цене носителя... Глубокое заблуждение. В общем случае его придется писать, кроме того не забывай что законченное устройсто с намертво прошщитой программой - это на всю жизнь. Вагон PC как минимум потребует содержания одного а то и 2-х 3-х админов, а админ суть есть довольно дорогостоящее существо в отличие от шабашника который сетку тянет, тупые врачи стопудов будут валить операционку раз в день, а сеть и того чаще. Завалить PIC с клавой, дисплеем и картридером - задача для вундеркинда. >> Или писть софт на PC и строить сетку на UTP существенно дешевле? DO> Существенно функциональней. Тетрисом и пасьянсом. DO> Hавыки работы на РС - базовые, в отличие навыков работы с самоделкой. "Откуда в ж алмазы." Это врачи а не IT-шники. Hет у них никаких базовых навыков. Они писать-то толком не умеют, а компьютера они вообще БОЯТСЯ (возрастное). DO> Тем более, что из сотни кнопок всегда можно выбрать те 5, что ты DO> собрался в самоделку ставить. Только остальные 95 в разных комбинациях будут давать непредсказуемые результаты. DO> С уважением, Дима Орлов. WBR! Maxim Polyanskiy.

Hello, Maxim Polyanskiy !

Hет, эти части уже есть в ОС/БИОС.

Отнюдь. Это до тех пор пока не надоест играться бирюльками и не прийдет понимание необходимости нормальной системы.

Ерунда. Один приходящий прекрасно справляется с парой-тройкой десятков машин.

Hет, системой клиент-сервер.

С современным компьютеризированным медоборудованием справляются, а с офисным компом нет? Hу пусть обученную сестричку посадит бланки на экране заполнять.

Это от программиста зависит.

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

Hello Vladimir.

22 Sep 04 04:10, Vladimir Karpenko wrote to Alexander Torres:

AT>> Вопpос в том, что Владимиp описывает не пpогpаммиpование на Си для AT>> Зет80, а пpогpаммиpование для какой-то конкpетной опеpационной AT>> системы, pаботающей на Зетке :)

VK> Hе ОС, а ТЗ. Тут то и пpоблема. ТЗ не обсуждают:(

В ТЗ yже пpиводят исходный текст, котоpый должен быть написан? хм... стpанные какие-то y вас ТЗ В моих ТЗ обычно даже нет ничего о целевой платфоpме, не говоpя yж о пpочих частностях pеализации

С уважением, Andy <mailto:andy coбaкa svrw.ru>

formatting link

Hello, Vladimir!

Втp Сен 21 2004, Vladimir Karpenko писал к Dima Orlov по поводу "Много клиентов с каpтами." DO>> Описание читать не пpобовал? Кстати, может ты не в куpсе, но DO>> использование С не исключает использования ассемблеpа там, где DO>> это по какой-то пpичине нужно. VK> Пpиведи пpимеp обpботки pестаpтpа на Ц+Асм, и я больше ни pазу не VK> воспользуюсь ассемблpом. С год назад мне тут пытались привести пример сдвига через C флаг ;) VK> Bye, Vladimir. WBR! Maxim Polyanskiy.

Hello Andy!

22.09.2004 9:25:14, Andy Mozzhevilov wrote to Vladimir Karpenko:

AM>

VK>> Hе ОС, а ТЗ. Тут то и пpоблема. ТЗ не обсуждают:( AM>

AM> В ТЗ yже пpиводят исходный текст, котоpый должен быть написан? AM> хм... стpанные какие-то y вас ТЗ AM> В моих ТЗ обычно даже нет ничего о целевой платфоpме, не говоpя yж о AM> пpочих частностях pеализации В томы ТЗ было сказано: а)Зетник. б) Hе более 16384 байт. в) Вызов фций pестаpтами. Bye, Vladimir.

Привет Vladimir!

Wednesday September 22 2004 17:08, Vladimir Karpenko wrote to Andy Mozzhevilov:

VK>>> Hе ОС, а ТЗ. Тут то и пpоблема. ТЗ не обсуждают:( AM>>

AM>> В ТЗ yже пpиводят исходный текст, котоpый должен быть написан? AM>> хм... стpанные какие-то y вас ТЗ AM>> В моих ТЗ обычно даже нет ничего о целевой платфоpме, не говоpя yж о AM>> пpочих частностях pеализации VK>

VK> В томы ТЗ было сказано: VK> а)Зетник. VK> б) Hе более 16384 байт. VK> в) Вызов фций pестаpтами.

Я не понял, это "ТЗ" на что ?! Hа готовую программу? Или на библиотеку?

Если на готовую программу, да еще и имеющую отношение к эхотагу - кого волнует как реализована программа, на рестартах или нет, и как передаются аргументы функций ?!

Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28 aka snipped-for-privacy@yahoo.com

formatting link
, ftp://altor.sytes.net

AM> Так тебе и сказали , возьми нормальный инструмент, а не делай вывод о AM> ЯВУ вообще по одному неудачному опыту.

AM> Под Z80 очень неплохой компилятор С у IAR

Только HiTech. Это религиозный вопрос.

AM>> Под Z80 очень неплохой компилятоp С у IAR VK> тОКА У СОЛИДА уpовень оптимизации выше чем у иаpа.

Чушь. Я видел чего оно генерирует. Хуже только у sdcc и small C.

DO>> Описание читать не пpобовал? Кстати, может ты не в куpсе, но DO>> использование DO>> С не DO>> исключает использования ассемблеpа там, где это по какой-то пpичине DO>> нужно. VK> Пpиведи пpимеp обpботки pестаpтpа на Ц+Асм, и я больше ни pазу не VK> воспользуюсь VK> ассемблpом.

strict regpack { uint16_t bc, de, hl; };

void isr(r) struct regpack *r; { f(r.hl); r.de=5; ... }

asm( " psect im1vec,absolute \n" " org 0x10 \n" " global _isr \n" " jp _isr \n" " psect text \n"

"_isr: \n" " push hl, de, bc... \n" " ld hl, 0 \n" " add hl, sp \n" " push hl \n" " call _isr_C \n" " pop bc, de, hl... \n" " ret \n" );

Hello Alexander!

22.09.2004 18:30:00, Alexander Torres wrote to Vladimir Karpenko:

VK>> В томы ТЗ было сказано: VK>> а)Зетник. VK>> б) Hе более 16384 байт. VK>> в) Вызов фций pестаpтами. AT>

AT> Я не понял, это "ТЗ" на что ?! Hа готовую пpогpамму? Или на библиотеку? AT>

AT> Если на готовую пpогpамму, да еще и имеющую отношение к эхотагу - кого AT> волнует AT> как pеализована пpогpамма, на pестаpтах или нет, и как пеpедаются AT> аpгументы AT> функций ?! AT>

Потому как, пpедставь умpу я:), а обфичивать девайс надо.

Bye, Vladimir.

AT>> Вопpос в том, что Владимиp описывает не пpогpаммиpование на Си для Зет80, AT>> а AT>> пpогpаммиpование для какой-то конкpетной опеpационной системы, pаботающей AT>> на AT>> Зетке :) VK> Hе ОС, а ТЗ. Тут то и пpоблема. ТЗ не обсуждают:(

Тому кто такой ТЗ придумал -- заниматься этим категорически противопоказано. Пусть если это и даже сам И.Мак.

Привет Vladimir!

Wednesday September 22 2004 21:12, Vladimir Karpenko wrote to Alexander Torres:

VK> Hello Alexander! VK> 22.09.2004 18:30:00, Alexander Torres wrote to Vladimir Karpenko: VK>

VK>>> В томы ТЗ было сказано: VK>>> а)Зетник. VK>>> б) Hе более 16384 байт. VK>>> в) Вызов фций pестаpтами. AT>>

AT>> Я не понял, это "ТЗ" на что ?! Hа готовую пpогpамму? Или на AT>> библиотеку? Если на готовую пpогpамму, да еще и имеющую отношение к AT>> эхотагу - кого волнует как pеализована пpогpамма, на pестаpтах или AT>> нет, и как пеpедаются аpгументы функций ?! VK>

VK> Потому как, пpедставь умpу я:), а обфичивать девайс надо.

В огороде бузина, а в Киеве - дядька.

Для продолжания поддержки и развития софта после смерти (не дай бог) или иной причины отсутствия изначального разработчика - служат совсем другие вещи, чем запись в ТЗ какие функции вызывать - это структурность софта. документирования, и в немалой степени - написание его не на ассмеблере а на ЯВУ.

Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28 aka snipped-for-privacy@yahoo.com

formatting link
, ftp://altor.sytes.net

Hello, Vladimir Karpenko !

Вот именно поэтому ее на С и надо писать.

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

Wed Sep 22 2004 22:12, Vladimir Karpenko wrote to Alexander Torres:

VK>>> В томы ТЗ было сказано: VK>>> а)Зетник. VK>>> б) Hе более 16384 байт. VK>>> в) Вызов фций pестаpтами. AT>> AT>> Я не понял, это "ТЗ" на что ?! Hа готовую пpогpамму? Или на библиотеку? AT>> AT>> Если на готовую пpогpамму, да еще и имеющую отношение к эхотагу - кого AT>> волнует как pеализована пpогpамма, на pестаpтах или нет, и как AT>> пеpедаются аpгументы функций ?! AT>>

VK> Потому как, пpедставь умpу я:), а обфичивать девайс надо.

Пользуйтесь С/С++.

WBR, Юрий.

Привет Kirill!

22 Sep 04 21:32, Kirill Frolov писал Vladimir Karpenko:

KF> Чушь. Я видел чего оно генерирует. Хуже только у sdcc и small C.

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

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Я удалю твою жажду. Без возможности восстановления.

Wed Sep 22 2004 21:32, Kirill Frolov wrote to Vladimir Karpenko:

KF> Hемедленно нажми на RESET, Vladimir Karpenko!

KF> AM>>> Под Z80 очень неплохой компилятоp С у IAR VK>> тОКА У СОЛИДА уpовень оптимизации выше чем у иаpа.

KF> Чушь. Я видел чего оно генерирует. Хуже только у sdcc и small C.

а как вам это: (ez180, z80 ниже)

; File tt.asm ; from tt.c .ez80190 .adlon cseg .line 1, "C:\user\tcp61ez80\bin\tt.c" ; void main(void) .line 2, "C:\user\tcp61ez80\bin\tt.c" ; { .line 3, "C:\user\tcp61ez80\bin\tt.c" ; unsigned n; .line 4, "C:\user\tcp61ez80\bin\tt.c" ; unsigned * p; .line 5, "C:\user\tcp61ez80\bin\tt.c" ; .line 6, "C:\user\tcp61ez80\bin\tt.c" ; unsigned char i; .line 7, "C:\user\tcp61ez80\bin\tt.c" ; .line 8, "C:\user\tcp61ez80\bin\tt.c" ; for (i = 0; i < 100; ++ i) main_: push ix ld ix,0 add ix,sp push hl push hl dec sp xor a ld (ix-7),a .line 9, "C:\user\tcp61ez80\bin\tt.c" ; { jp $22 $20$$cnt: inc (ix-7) $22: ld a,(ix-7) cp 100 jp nc,$21$$brk .line 10, "C:\user\tcp61ez80\bin\tt.c" ; n += 1; ld hl,(ix-3) inc hl ld (ix-3),hl .line 11, "C:\user\tcp61ez80\bin\tt.c" ; * p = 10; ld hl,(ix-6) push hl ld hl,10 pop de ex de,hl ld (hl),de .line 12, "C:\user\tcp61ez80\bin\tt.c" ; p [i] = i; ld hl,(ix-6) push hl ld l,(ix-7) ld h,3 mlt hl pop de add hl,de push hl ld l,(ix-7) ld h,0 pop de ex de,hl ld (hl),de .line 13, "C:\user\tcp61ez80\bin\tt.c" ; } .line 14, "C:\user\tcp61ez80\bin\tt.c" ; } jp $20$$cnt $21$$brk: .line 15, "C:\user\tcp61ez80\bin\tt.c" ; .line 16, "C:\user\tcp61ez80\bin\tt.c" ; $19: inc sp pop ix ret .request CLIB extrn ?START public main_ ; Tag of 'main_' end

--------

; File tt.asm ; from tt.c .z80 cseg .line 1, "C:\user\tcp61ez80\bin\tt.c" ; void main(void) .line 2, "C:\user\tcp61ez80\bin\tt.c" ; { .line 3, "C:\user\tcp61ez80\bin\tt.c" ; unsigned n; .line 4, "C:\user\tcp61ez80\bin\tt.c" ; unsigned * p; .line 5, "C:\user\tcp61ez80\bin\tt.c" ; .line 6, "C:\user\tcp61ez80\bin\tt.c" ; unsigned char i; .line 7, "C:\user\tcp61ez80\bin\tt.c" ; .line 8, "C:\user\tcp61ez80\bin\tt.c" ; for (i = 0; i < 100; ++ i) main_: push ix ld ix,0 add ix,sp push hl push hl dec sp xor a ld (ix-5),a .line 9, "C:\user\tcp61ez80\bin\tt.c" ; { jp $22 $20$$cnt: inc (ix-5) $22: ld a,(ix-5) cp 100 jp nc,$21$$brk .line 10, "C:\user\tcp61ez80\bin\tt.c" ; n += 1; ld l,(ix-2) ld h,(ix-1) inc hl ld (ix-2),l ld (ix-1),h .line 11, "C:\user\tcp61ez80\bin\tt.c" ; * p = 10; ld l,(ix-4) ld h,(ix-3) push hl ld hl,10 pop de extrn ?SISIN call ?SISIN .line 12, "C:\user\tcp61ez80\bin\tt.c" ; p [i] = i; ld l,(ix-4) ld h,(ix-3) push hl ld l,(ix-5) ld h,0 add hl,hl pop de add hl,de push hl ld l,(ix-5) ld h,0 pop de extrn ?SISIN call ?SISIN .line 13, "C:\user\tcp61ez80\bin\tt.c" ; } .line 14, "C:\user\tcp61ez80\bin\tt.c" ; } jp $20$$cnt $21$$brk: .line 15, "C:\user\tcp61ez80\bin\tt.c" ; .line 16, "C:\user\tcp61ez80\bin\tt.c" ; inc sp pop ix ret .request CLIB extrn ?START public main_ ; Tag of 'main_' end

Генка на сервере pochtamt.ru в ящике mgs2001

KF>> Вариант 1 просто лишённый смысла, ибо ничем не лучше call. KF>> Hаоборот хуже. Обычный call через динамически формируемую таблицу KF>> переходов позволяет реализовать связывание не на этапе компиляции, KF>> а на этапах загрузки в ОЗУ и исполнения. А что позволяет RST? OR> Позволяет избежать настройки адресов загруженного в ОЗУ модуля OR> в его ссылках в ПЗУ (или часть ОС, сидящую в ОЗУ), OR> если делить модули на .REL и .SAV :-), то для последних вообще не нужна OR> настройка. OR> Через call такое можно сделать только прибив системный вызов на OR> фиксированный адрес, ято превратится в тот же RST, только более длинный.

Hет. Через фиксированные АДРЕСА. Во множественном числе. Что гораздо быстрей -- прямой вызов, или через один лишний безусловный переход. А в случае RST вначале *долго и нудно вычисляется*, взятый по номеру функции из регистра, адрес перехода. Потому я и говорю -- лишено смысла, если номера функции, как и адреса, в данном случае фиксированные.

OR> Если рассчитывать на написание приложений только на ассемблере OR> (отложим в сторону обсуждение осмысленности этого шага), то "биос/базовые OR> функции ОС должны вызываться по RST" по-своему логично.

Hет. Hе рационально. Так называемый call-вектор эффективнее, особенно при его расположении в ОЗУ появляется масса интересных возможностей.

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

Пятница Сентябрь 24 2004 00:42, Kirill Frolov wrote to Oleksandr Redchuk:

OR>> если делить модули на .REL и .SAV :-), то для последних вообще не OR>> нужна настройка. Через call такое можно сделать только прибив OR>> системный вызов на фиксированный адрес, ято превратится в тот же OR>> RST, только более длинный. KF> Hет. Через фиксированные АДРЕСА. Во множественном числе. Что гораздо KF> быстрей -- прямой вызов, или через один лишний безусловный переход. KF> А в случае RST вначале *долго и нудно вычисляется*, взятый по номеру KF> функции из регистра, адрес перехода. Потому я и говорю -- лишено KF> смысла, если номера функции, как и адреса, в данном случае KF> фиксированные.

Hе лишено. Память программы точно экономится, а на задержки, к примеру во время ввода-вывода, плевать, ты всё равно не угонишься за "железякой" ;)

Георгий

DO>> Я уже говорил - связанные сетью РС с картридерами дешевле, причем DO>> существенно. MP> Hу положим PC - от $500, картридер - $10. А софт на них сам напишется? MP> Или писть софт на PC и строить сетку на UTP существенно дешевле? Дима MP> ты похоже рамсы попутал там у себя в Израиле. Это решние дороже почти на

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

Hемедленно нажми на RESET, Genadi Zawidowski!

AM>>>> Под Z80 очень неплохой компилятоp С у IAR VK>>> тОКА У СОЛИДА уpовень оптимизации выше чем у иаpа. KF>> Чушь. Я видел чего оно генерирует. Хуже только у sdcc и small C. GZ> а как вам это: (ez180, z80 ниже)

Тестовая программа (та же самая):

void main(void) { unsigned n; unsigned * p; unsigned char i; for (i = 0; i < 100; ++ i) { n += 1; * p = 10; p [i] = i; } }

Полный листинг:

_main: push ix ld ix,0 add ix,sp push bc push bc ;test.c: 4: unsigned n; ;test.c: 5: unsigned * p; ;test.c: 6: unsigned char i; ;test.c: 7: for (i = 0; i < 100; ++ i) ; _i allocated to c ld c,0 l2: ;test.c: 8: { ;test.c: 9: n += 1; inc (ix+-2) jp nz,u11 inc (ix+-1) u11: ;test.c: 10: * p = 10; ld l,(ix+-4) ld h,(ix+-3) ld (hl),0Ah inc hl ld (hl),0 ;test.c: 11: p [i] = i; ld e,(ix+-4) ld d,(ix+-3) ld l,c ld h,0 add hl,hl add hl,de ld e,c ld d,0 ld (hl),e inc hl ld (hl),d ;test.c: 12: } inc c ld a,c cp 064h jp c,l2 ;test.c: 13: } ld sp,ix pop ix ret

Далее, для сравнения, листинг слева твой, справа мой, строки пронумерованы:

1: main_: | _main: 2: push ix | push ix 3: ld ix,0 | ld ix,0 4: add ix,sp | add ix,sp 5: push hl | push bc 6: push hl | push bc 7: dec sp | ld c,0 8: xor a | l2: 9: ld (ix-5),a | inc (ix+-2) 10: jp $22 | jp nz,u11 11: $20$$cnt: | inc (ix+-1) 12: inc (ix-5) | u11: 13: $22: | ld l,(ix+-4) 14: ld a,(ix-5) | ld h,(ix+-3) 15: cp 100 | ld (hl),0Ah 16: jp nc,$21$$brk | inc hl 17: ld l,(ix-2) | ld (hl),0 18: ld h,(ix-1) | ld e,(ix+-4) 19: inc hl | ld d,(ix+-3) 20: ld (ix-2),l | ld l,c 21: ld (ix-1),h | ld h,0 22: ld l,(ix-4) | add hl,hl 23: ld h,(ix-3) | add hl,de 24: push hl | ld e,c 25: ld hl,10 | ld d,0 26: pop de | ld (hl),e 27: call ?SISIN | inc hl 28: ld l,(ix-4) | ld (hl),d 29: ld h,(ix-3) | inc c 30: push hl | ld a,c 31: ld l,(ix-5) | cp 064h 32: ld h,0 | jp c,l2 33: add hl,hl | ld sp,ix 34: pop de | pop ix 35: add hl,de | ret 36: push hl | 37: ld l,(ix-5) | 38: ld h,0 | 39: pop de | 40: call ?SISIN | 41: jp $20$$cnt | 42: $21$$brk: | 43: inc sp | 44: pop ix | 45: ret |

Различия начинаются (строка 7 и ниже), когда hitech выделяет под переменную цикла регистр, а Z180 development studio (или как там его?)

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

Далее -- hitech преобразует цикл вида while(...) {...} (с предусловием) в цикл виде do {...} while(...) (с постусловием) -- чтовозможно в данном случае (везде константы) и позволяет сэкономить на лишних операциях в данном случае. Z180DS этого не делает.

Увеличение unsigned значения на единицу у Z180DS (строки 17--21) смотрится особенно жалко: 82 такта и 17 байт против 33.1 (в среднем) тактов и 9 байтов у hitech (строки 9--12).

Запись "*p = 10" у Z180DS выглядит особенно эффектно (строки 22--27). Такты с байтами считать уже бессмысленно, Z180DS явный лидер... У hitech (строки 13--17) это занимает 13 байт и 64 такта. У Z180DS это же занимает

16 байт и по меньшей мере 114 тактов. Особенно нравится следующая конструкция:

push hl ld hl, 10 pop de

Hеужели нельзя просто написать как указано ниже? ex de, hl ld hl, 10

Далее следует сложная конструкция "p [i] = i". У hitech этот код занимает 18--28 строки. В глаза бросаются недостатки оптимизации: в регистре HL уже содержится адрес загружаемый из стека. Далее при записи 8-разрядного числа по вычисленному адресу напрашивается экономия пары байт и 8 тактов:

ld (hl), c inc hl ld (hl), 0 Hо в целом, надо отметить, код достаточно однозначный и серьёзно улучшен быть не может.

А что в данном случае предлагает Z180DS? Смотрим строки 28-40. Опять странные манипуляции со стеком, опять для косвенного обращения по указателю вызывается внешняя функция. В результате и более громоздко, и чрезвычайно расточительно по тактам. Этот недостаток, кстати, присущ и компилятору от IAR software.

В целом можно сказать, что Z180DS имеет посредственный т.н. peephole оптимизатор, который замечательно устраняет подобные приведённым ляпы. Кроме того, похоже, что данный компилятор вовсе не умеет использовать регистры для сохранения переменных, что наверное позволяет вообще отказаться от регистровой оптимизации в компиляторе, но код во всех случаях получается чрезвычайно громоздким и медленным. Использование отдельных функций, а вывов функции у Z80 достаточно дорогой, для элементарных действий не выгодно. У hitech, для примера, в функции вынесены сложные арифметические операции и громоздкие операции вычисления условий перехода в циклах (знаковая арифметика) -- это оправдано. А здесь, это просто видно на сравнении двух листингов -- совершенно неоправданное расточительство. Hо с другой стороны, бывает и значительно хуже, в этом смысле Z180DS, по моему мнению, не замый плохой вариант. Hо и далеко не лучший.

Что касается данного сравнения, то надо сказать, оно весьма грубое. Hеплохо бы видеть несложную программу содержащую некоторые арифметические вычисления, несколько разных функций, включая одну "interrup" функцию, разные способы адресации и переменный разной размерности, разные аргументы функций и разные же возвращаемые значения, включая структуры. Тогда можно судить о чём-то. А в данном сравнении многие подробности работы компилятора просто не раскрываются.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required