Архивы рубрики: Интернет и сеть

Мини АТС Panasonic — ваш самый надежный выбор

В качестве основы для телекоммуникационных устройств и связи используются линии связи и каналы, в которых в свою очередь используются всевозможные провода: телефонные, телеграфные, волокнисто-оптические, всепроникающие радиоволны. Именно типом проводов и различаются линии связи. При использовании любых видов проводников, создается проводная сеть или кабельная линия связи. Если применяется земная атмосфера или космическое пространство создается беспроводное соединение. В основном в телекоммуникационных системах вся информация может передаваться с помощью радиоволн, световых сигналов и электрического тока.

В настоящее время во всех организациях успешно применяются современные устройства связи, без которых трудно представить себе работу крупного офиса. С появлением УАТС проблемы со внешней и внутренней связью исчезли. А мини АТС обеспечила связь между внутренними телефонными линиями и линиями общего пользования. Данное телекоммуникационное устройство позволяет соединять абонентов между собой и с абонентами, которые находятся на внешней линии городской телефонной сети. Компания Panasonic является успешной компанией в сфере телекоммуникаций, выпускающая целую линейку различных моделей АТС Panasonic, которые успешно могут применяться как в организациях с огромным количеством абонентов, так и в маленьких офисах. АТС подразделяют на цифровые и аналоговые. Цифровые выпускают с расширенным набором функций.Технология Panasonic АТС может поддерживать и системные программные, так и телефоны аналоговые, сотовые телефоны, факсы, модемы. Такие АТС очень легки в обслуживании и эксплуатации, установка программного обеспечения для их работы не потребует установки и применения дополнительного оборудования. Также они оборудованы широким спектром дополнительных услуг и функций, например, переадресация вызова, голосовая почта, функция цифровой секретарь. Благодаря тому, что линейка моделей АТС постоянно усовершенствуется и развивается, в небольшой по размерам установке, находится работа целого офиса. Данные АТС достаточно надежны и просты в использовании. Многие фирмы, занимающиеся телекоммуникациями, при установке АТС сразу же заключают договор об их дальнейшем обслуживании, что очень удобно. При выборе такой министанции нужно определить ее основные задачи, которые будут ей поставлены при работе в офисе, а также определиться с внешними и внутренними звонками, по их количеству и количеству абонентов, и только после этого делать выбор в пользу той или иной АТС.

 

Дата публикации 02.03.2012

Отказ от универсальности

Для операции умножения и деления необходимы значительные усилия от почти любого центрального процессора, так как они должны быть осуществлены (аппаратно или программно) через сдвиги и сложения или сдвиги и вычитания соответственно. Традиционные 4-разрядные и 8-разрядные процессоры не имели машинных команд для умножения или деления, так что данные операции приходилось осуществлять при помощи длинных подпрограмм, где явно осуществляются сдвиги и сложения или вычитания. Первые 16-разрядные процессоры, среди которых 8086, 8088 и 68000, действительно дают возможность осуществить операции умножения и деления аппаратными средствами, но
соответствующие процедуры были очень медленными: в процессорах 8086 и 8088, например, для деления 32- разрядного числа на 16-разрядное было необходимо около 150 тактов.

Поэтому небольшие хитрости для увеличения скорости или устранения операций умножения и деления были и остаются одними из первых приемов, которые рассматривает каждый программист, который стремится к совершенству. Большинство из данных хитростей относится к категории, которую именуют «отказ от универсальности». Это замена рассчитанных на общий случай команд умножения и деления (или вызов соответствующих подпрограмм) рядом сдвигов и сложений или вычитаний для конкретных операндов.

Рассмотрим одну из простых процедур оптимизации умножения. Для умножения числа на степень двойки его следует просто сдвинуть влево на необходимое число двоичных (битовых) позиций. Вот такой, например, имеет вид некоторая общая, но медленная последовательность команд для умножения значения переменной MyVar на 8:

mov ax,MyVar
mov bx,8
mul bx
mov MyVar,ax

Применение отказа от универсальности при выполнении деления несколько более ограничено. Деление на степень двойки, безусловно, очень просто. Для этого следует сдвинуть число вправо, следя только за выбором соответствующей команды сдвига для желаемого типа деления (со знаком или без знака). Определение остатка от деления на степень двойки для чисел без знака еще проще. Для этого следует осуществить просто одну команду операции логического И над операндом и непосредственным значением, которое должно быть записано в виде уменьшенного на единицу значения делителя. Деление чисел со знаком не так просто, так как знак остатка от деления должен
соответствовать знаку делителя и не зависит от знака делимого. Реализация данных операций потребует непременного присутствия условных переходов, а это уже плохо.

 

Достоинства и недостатки оптимизации

Оптимизация кодов для любого языка всегда заставляет идти на компромиссы. Такими компромиссами являются:

1) сокращение используемого объема памяти в результате снижения быстродействия;
2) увеличение быстродействия в результате ухудшения возможностей сопровождения и доступности текста программы для чтения;
3) уменьшение времени деятельности программы в результате увеличения времени ее разработки. Среди операций, которые приведены ниже, каждая следующая требует больше времени, чем предшествующая. Рассмотрим эти операции: регистр-регистр, операции с памятью, операции с диском и операции взаимодействия с пользователем. Так что не стоит тратить силы на сокращение нескольких машинных циклов
в программе, когда скорость ее исполнения ограничена операциями обращения к дисковым файлам. Взамен можно применить сокращение числа таких операций. А после выполнения того, что, в принципе, могло бы быть оптимизацией, следует осуществить тщательную
проверку полученных результатов.

Прежде чем рассматривать настройку некоторой программы, следует убедиться, что она правильная
и полная, что применяется правильный для решения поставленной задачи подход и что составлен наиболее ясный, наиболее простой, наиболее структурированный код, который только был возможен. Если программа удовлетворяет всем приведенным критериям, то на самом деле ее объем и скорость вы-полнения чаще всего будут вполне приемлемыми без каких-либо дальнейших усовершенствований. Но только применение ассемблера само по себе приводит к повышению скорости выполнения программы в 2—3 раза и примерно к такому же уменьшению размера по сравнению с такой же программой на языке высокого уровня. Кроме того, если что-то делает проще чтение программы и ее сопровождение, то
обычно при этом увеличивается скорость исполнения. Можно отказаться от «макаронных» кодов со многими ненужными переходами и вызовами подпрограмм, а также предпочтение простых прямолинейных машинных команд похожим сложным.

Кроме того, самой главной заботой должны быть ощущения потенциального пользователя при работе с данной программой: насколько производительной покажется программа ему? Если о полученной программе складывается мнение, как о неуклюжей, то есть вероятность, что она не будет должным образом оценена. Примером является судьба пакета ToolBook.

 

Оптимизация по размеру в Ассемблер

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

Оптимизация программы для уменьшения размера не похожа на оптимизацию для повышения быстродействия.

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

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

 

Оптимизация по быстродействию в Ассемблер

Приведем некоторые из самых общих процедур этой категории.

1. Замена универсальных инструкций учитывающими конкретную ситуацию, например замена команды умножения на степень двойки на команды сдвига. Уменьшение числа передач в программе: вследствие преобразования подпрограмм в макрокоманды для прямого включения в исполнимый код; за счет преобразования условных переходов, так, чтобы условие перехода было истинным относительно реже, чем причины для его отсутствия; перемещение условий общего характера к началу разветвленной последовательности переходов; изменение вызовов, сразу
после чего происходит возврат в программу, в переходы и т. д.

2. Оптимизация циклов, в том числе сдвиг вычислений неизменяющихся величин за границы циклов, разворачивание циклов и «соединение» отдельных циклов, выполняемых одно и то же количество раз, в единый цикл («сжатие цикла»).

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

4. Применение специфических для этого процессора инструкций, например, инструкции засылки в стек прямого значения или умножения числа на непосредственный операнд, имеющийся в процессорах 80186, 80188, 80286, 80386 и 80486. Также примером могут быть двухсловные строковые инструкции, команды перемножения 32-разрядных чисел и деления 64-разрядного на 32-разрядное число, которые проводятся в процессорах 80386 и 80486. Программа должна, конечно, первоначально определять, с каким типом процессора она работает. В процессорах 80 x 86, но не 80 x 88, возможно, удастся повысить скорость действия программы на несколько процентов в результате выравнивания расположения данных и меток, на которые осуществляется передача управления, относительно определенных границ. Процессоры 8088 и 80188 имеют 8-разрядную шину, и для них не имеет значения, на какую границу выровнены данные, поэтому выравнивание можно не применять или установить на границу байта (1 байт, 8 бит); процессоры 8086, 80186 и 80286 обладают 16- разрядной шиной, и им проще действовать с данными, выровненными на границу слова (2 байта, 16 бит); процессор 80386, для которого свойственна 32-разрядная шина, использует выравнивание на границу двойного слова (4 байта, 32 бита); из-за особенностей своей внутренней кэш-памяти процессору 80486, то же с 32-разрядной шиной, проще работать, если осуществляется выравнивание на границу параграфа (16 байт, 96 бит).

 

Сообщения Дельфи

Осуществить сообщения можно с помощью нескольких процедур: с помощью процедуры ShowMessage, функции MessageDlg, создания дополнительного окна. Процедура showmessage дает возможность вывести пользователю простое сообщение. При этом образуется дополнительное окно с названием проекта и кнопкой ОК. Выглядит все это так: Синтаксис: ShowMessage(Msg: string); Пример:

ShowMessage(‘Все задачи выполнены успешно’);
Функция messageDlg дает возможность создавать сложные диалоговые запросы с применением обратной связи. Имеет форму дополнительного окна, дополненного изображением. Кроме того, можно применять диалоговые запросы. Название окна определяется типом
запроса.

Синтаксис:

MessageDlg(Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;
Msg — строковой параметр. Определяет выводимое сообщение;
Atype — внутренний параметр функции. Определяет тип сообщения:
1) mtWarning — сообщение о предупреждении;
2) mtError — сообщение об ошибке;
3) mtInformation — информационное сообщение;
4) mtConfirmation — сообщение о подтверждении;
5) mtCustom — сообщение не содержит в углу изображения. Название окна соответствует названию исполняемого файла (аналогично showmessage);
Abuttons — определяет имена кнопок, отображающиеся в диалоговом запросе. Возможны значения:
mbYes, mbNo, mbOK, mbCancel, mbHelp, mbAbort,
mbRetry, mbIgnore, mbAll;
HelpCtx — включает номер раздела, используемый пользователем, если он вызовет справку, когда диалог активизирован.

Например:

MessageDlg(‘Продолжить выполнение программы’, mtConfirmation, [mbYes, mbNo], 0);

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

If MessageDlg(‘Закончить выполнение задачи?’,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
Then
Begin
MessageDlg(‘Выполнение задачи закончено.’, mtInformation, [mbOk], 0);
Close;
end;

Создание сообщения с применением дополнительного окна достаточно трудно. Данный способ применяется для создания сложных запросов, когда одного только «Да» и «Нет» недостаточно. Например, когда от пользователя необходимо получить код продолжения, в зависимости от которого приложение выполнит те или иные операции.

 

Окно редактора кода Дельфи

Окно редактора кода. Окно данного редактора имеет три части:
1) панель модулей описания переменных и используемых модулей;
2) панель кода программы;
3) панель найденных ошибок программы (на этапе создания программы данное окно является невидимым, активизируется, если это необходимо, при компиляции программы).

Рассмотрим конкретные проблемы программирования. Покажем раздел Delphi, который называется диалоги. С одной стороны, это достаточно простой раздел. Затруднительным является вопрос о том, как можно совершить операции над файлом, который должен выбрать пользователь. В различных литературных источниках встречаются разные варианты решения и создания дополнительной формы объекта: и попытка
заставить пользователя от руки написать адрес файла, и предлагали воспользоваться компонентами Treeview, OutLine и им подобными. Однако существует и более короткий и простой путь для решения проблемы. Достаточно использовать компоненты OpenDialog. Этот компонент легко устанавливается на форму проекта в форме квадрата. В случае запуска программы он невидим. Квадрат только указывает на то, что компонент
установлен и дает возможность обращаться к его свойствам с помощью инспектора объектов. Рассмотрим их поподробнее.

После установки компонента на конструкцию проекта диалоговое окно возможно активизировать, применяя функции Execute:Boolean. В этом случае, если пользователь выбрал один или несколько файлов и нажал кнопку ОК, функция возвращает True. Свойство элемента FileName включает имя последне- го файла из всех выбранных в диалоге. Свойство Files является списком всех файлов, выбранных в диалоге.
Свойство InitialDir определяет каталог, к которому диалог обращается в случае открытия. Свойство Title включает в себя заголовок диалогового окна. Необходимо кроме этого отметить свойство Filter. С помощью данного свойства в случае выбора и сохранения файлов
удобно производить отбор файлов только с заданными расширениями. Например, при создании фильтра для исполняемых файлов в свойство должна входить следующая строка:

‘Исполняемые файлы | *.EXE’
В одном фильтре можно отбирать файлы и с разными расширениями:
‘Графические изображения | *.JPG; *.GIF; *.PNG’
Фильтр также можно создать в обычном редакторе, связанном со свойством Filter в инспекторе объектов.