41325

Работа с ИС РПО для семейства МК АVR

Практическая работа

Коммуникация, связь, радиоэлектроника и цифровые приборы

Если уже есть файл с текстом программы на Ассемблере и просто необходимо создать проект а затем подключить туда готовый программный файл снимите соответствующую галочку. Оно должно содержать имя файла куда будет записываться текст программы. При выборе этого элемента диалог создания проекта будет автоматически запускаться каждый раз при запуске программы VR Studio.ps; файл куда будет помещен текст программы на Ассемблере Prog1.

Русский

2013-10-23

5.99 MB

2 чел.

                  Дисциплина: « Микропроцессоры и микропроцессорные системы»

Практическая работа № 9

   Тема:   « Работа с  ИС РПО для семейства МК AVR».

Цель:    Практически исследовать ИС РПО для семейства МК AVR .

    Время:              2 часа

   

   Оборудование:    ПК, ПО.

   Методические материалы и литература:

  •  Методические указания по выполнению практических работ;
  •  Иллюстративный материал: «ИС РПО для семейства МК AVR ».

 Методические указания по выполнению практической работы:

  Последовательность выполнения работы:

  1.  Изучить  и законспектировать основные теоретические положения по теме, используя описание работы;
  2.  Выполнить практическую часть лабораторной работы. При этом  использовать описание работы, лабораторный блок ПК, иллюстративный материал; В практической части отработать следующие подразделы:
  •  Рассмотреть приводимые примеры ИС РПО для семейства МК AVR  
  •  Выполнить законспектировать в тетради порядок работы с ИС РПО  МК AVR и отразить в отчёте
  •  Проанализировать порядок работы с  ИС РПО  МК AVR  в приведённых примерах; сделать выводы.

  1.  Ответить на контрольные вопросы.
  2.  Сделать выводы.
  3.  Подготовить отчёт по установленной форме.
  4.  Представить отчёт для защиты преподавателю.

1. Основные теоретические положения

  Представитель семейства МК AVR:

  

   Рис.1    МК AT90S2313

 Краткая характеристика ИС РПО AVR Studio версии 4.16  

 

 Имеется поддержка  микроконтроллеров:

  •   ATtiny10, ATtiny24A, ATtiny44A, ATxmega32A4, ATxmega16A4
  •   ATmega164PA, ATmega48PA)

             

  дополнительные функциональные возможности

  •  новый инструментарий для сенсорных клавиатур AVR QTouch Studio
  •  поддержка различных комбинаций переходных плат STK600

  •  активирована система отчетов об ошибках Windows (Windows Error Reporting (WER))
  •  поддержка Xmega в командной строке JTAGICE mkII

  •  Размер: 127 MB.

 

    Создание проекта

Предположим, что программа AVR Studio запущена и находится в исходном состоянии (все вкладки окон 1 и 2 пусты, окно 3 не содержит открытых файлов). Приступим к созданию нового проекта.

Для этого выберем в меню «Project»  пункт «New Project». На экране появится окно построителя. В поле «Project Туре:» выбираем тип будущего проекта.

 Программа предлагает два варианта:

  1.  проект на Ассемблере  - Аtmel AVR Assembler;
  2.  проект на языке СИ+ + (AVR  GCC).

Выбираем Ассемблер. Затем в поле «Project name:» выбираем имя проекта. Например, Prog 1..

Сразу под полем с именем проекта расположены два элемента выбора режи-мов. Так называемые «Чек-боксы» (Check box).

 По умолчанию оба чек-бокса выбраны (то есть, в соответствующих квадра-тиках проставлены «галочки»).

 

 Первый чек-бокс (Create initialize file) определяет, нужно ли автоматически создавать главный программный файл.

Если уже есть файл с текстом программы на Ассемблере и  просто необхо-димо создать проект, а затем подключить туда готовый программный файл, сни-мите соответствующую «галочку».

 Если  проект создается «с нуля», оставьте «галочку» нетронутой.

 Второй чек-бокс (Create  folder) определяет, нужно ли автоматически создавать отдельный каталог для данного проекта. Если  заранее уже создан нужный каталог средствами Windows - снимите пометку. Если нет, оставьте.

Следующее поле называется «Initial file». Оно должно содержать имя файла, куда будет записываться текст программы. По умолчанию имя файла уже вписано в это поле. Оно соответствует имени проекта. Лучше оставить его без изменений.

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

Откроется диалог «Select  folder», при помощи которого нужно выбрать директорию  Просто войдите в нужную директорию и нажмите кнопку «Select»  При выборе директории нужно учитывать значение чек-бокса «Create  folder ». Если там стоит «галочка», то при выборе в качестве Location  каталога             «с:\AVR\myprog»,

программа поместит ваш проект в каталог

  

  «с:\AVR\myprog\Prog1», .

Но прежде, чем нажимать кнопку «Next», обратите внимание, что в нижней части окна имеется еще один чек-бокс. Он называется «Show dialog at startup». При выборе этого элемента, диалог создания проекта будет автоматически запускаться каждый раз при запуске программы AVR Studio.

Для перехода к следующему этапу, построения проекта нажмите кнопку «Next ». Содержимое окна построителя изменится. Появятся два больших поля под общим названием «Select debug platform and device» (Выбор отладочной платформы и микроконтроллера). В списке Отладочных платформ («Debug platform») перечислены все отладочные платы, которые поддерживает данная программа.

Мы не будем использовать внешних плат, поэтому выберем пункт «AVR Simulator» (Программный имитатор AVR ). В поле «Device » выбираем нужный тип микросхемы. В нашем случае это  ATtiny 2313. Теперь все настройки закончены. Для завершения процесса нажмите кнопку «Finish». После нажатия этой кнопки программа создает проект и записывает его в выбранную вами директорию.

Сразу после создания новый проект состоит всего из двух файлов:

  1.  собственно файл проекта Prog1.aps;
  2.  файл, куда будет помещен текст программы на Ассемблере Prog1.asm

Файл текста программы автоматически открывается в окне 3. Причем он пока абсолютно пустой.

 Теперь можно приступать к набору этого текста.

Если речь идет о программе Prog1, то просто наберите текст, приведенный в листинге 4.1. При наборе текста вы можете пользоваться всеми возможностями, какие обычно предоставляет любой современный текстовый редактор.

Встроенный текстовый редактор программы AVR Studio  поддерживает все необходимые сервисные функции:

  •  выделение текстовых фрагментов;
  •  вырезание;
  •  копирование;
  •  вставку;
  •  перетаскивание мышью;
  •  поиск и замену.

Для управления всеми этими возможностями используется стандартный интерфейс, знакомый  по многим текстовым редакторам, в частности, по  редакто-ру MS Word 

 Набранный тест программы необходимо записать на диск при помощи команды «Save» меню «File» или при помощи  кнопки     на панели инструментов.

Кнопка         позволяет записать сразу все открытые текстовые файлы.и

поместить их содержимое в любую подходящую директорию, например, в директорию с:\AVR\myprog\. 

Таким образом появится целый набор директорий, в каждой из которых помещен свой проект. Причем он содержит не только проекты на Ассемблере, но может содержать и на языке СИ. Любой проект на Ассемблере можно открыть при помощи пункта «Open Project» меню «Project».

 

  2  Практическая часть

  •  Рассмотреть состав ИС РПО для семейства МК AVR 
    •  Выполнить законспектировать в тетради и отразить в отчёте состав и структуру ИС РПО для семейства МК AVR 
      •  Проанализировать структуру и  функциональные возможности ИС РПО для семейства МК AVR в приведённых примерах; сделать выводы.

  Трансляция программы Форматы файлов

 После того, как текст  программы набран и записан на жесткий диск, необходимо произвести трансляцию программы.

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

Кроме hех-файла транслятор создает еще несколько вспомогательных      файлов.

И главное, файл с расширением еер. Этот файл имеет точно такую же    внутреннюю структуру, как файл hех . А содержит он информацию,    предназначенную для записи в ЕЕРRОМ. Такая информация появля-   ется в том случае, когда в тексте программы переменным, размещен-   ным в сегменте еерrom, присвоены начальные значение.

  (В наших примерах  этого не делали. Поэтому файл с расшире-    ниием еер  во всех проектах пустой (будет содержать лишь     завершающую строку).

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

В принципе, программисту не обязательно знать структуру этого формата. Достаточно понимать, что в hех -файле определенным способом закодирована программа в машинных кодах. Именно этот файл используется программатором для «прошивки» программной памяти микроконтроллера.

 Любой программатор поддерживает hех -формат и распознает записанные туда коды автоматически.

 

   Краткое описание hех -формата.

 Формат НЕХ-файла

Если  посмотреть содержимое такого файла при помощи редактора «Блокнот», то можно увидеть, что это текстовый файл, в котором данные закодированы в виде текстовых строк.

 Ниже приведено содержимое hех -файла, полученного в результате трансляции программы Рrog1 (листинг 1, см приложение в конце лабораторной работы ):

 Данный файл состоит из четырех строк.

  •  Первая и последняя строки несут служебную информацию. Наличие первой строки необязательно. Система AVR Studio   при трансляции программы всегда добавляет в hех -файд первую строку именно такого содержания. Последняя строка — это стандартный конец для любого hех -файла.

  •  Оставшиеся две строки как раз и содержат информацию о кодах программы. Б каждой такой строке закодирована цепочка байтов и адрес в памяти, где эти байты должны размещаться.

 Строка начинается с двоеточия. Двоеточие— обязательный элемент,    который служит для идентификации hех -формата. Все остальные    символы в строке — это шестнадцатиричные числа, записанные    слитно без пробелов. Отдельные числа отличают по их позиции в    строке. Так первые два знака занимает шестнадцатиричное число,    означающее длину цепочки.

        В нашем случае длина обеих цепочек равна 0x10 (то есть 16) байт.    Следующие четыре символа— это начальный адрес, куда эти байты    должны быть помещены:

  •  Первая цепочка будет размещена в памяти, начиная с нулевого адреса.
  •  Вторая цепочка — с адреса 0x0010.

Очередные два знака занимает код вида строки. В интересующих нас строках он равен «00», что означает, что эти строки предназначены для записи данных (в первой строке такой код равен «02», а в последней «01»).

Сразу после кода вида строки начинаются собственно данные. Каждый байт данных занимает два знака.

Самые последние два символа— это контрольная сумма. Она рассчитывается по специальной формуле с использованием значений всех байтов цепочки и служит для проверки на отсутствие ошибок.

   Процедура трансляции

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

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

 В процессе трансляции сюда выводятся служебные сообщения:

  •  К таким сообщениям относятся: сообщения о завершении различных этапов трансляции,
  •  сообщения об ошибках (Error),
  •  а также предупреждения (Warning).

 В готовой отлаженной программе ошибок и предупреждений быть не  должно.

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

 В этом случае необходимо устранить ошибки и повторить  трансляцию.

Естественно, транслятор не в состоянии найти все виды ошибок. Он находит только явные ошибки, которые можно найти автоматически. 

 

 К таким ошибкам относятся:

  •  ошибки синтаксиса (неправильное написание имени команды);
  •  неверное количество параметров у оператора;
  •  попытка использования неописанных переменных и т. п.

Например, сообщение «Unknown instruction or macro » означает, что

найдена «Неизвестная инструкция или макрокоманда».

Предупреждения— это тоже ошибки, но некритические.

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

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

Все сообщения во вкладке «Build » появляются по мере их поступления.

 Для наглядности каждое сообщение помечено цветным кружочком в начале  строки:

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

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

 то сообщение означает:

  •  что в программном сегменте использованы ячейки

 с адреса 0x000000 по адрес 0x000412.

  •  При этом собственно код программы занимает     508 байт.
  •   Данные в программной памяти занимают             758 байт.
  •  Всего использовано в программной памяти          1266 байт                    (сумма предыдущих двух чисел).
  •  Размер программной памяти для этого микро-                                  контроллера составляет                                            2048 байт.
  •  Процент использования программой памяти             61,8%.

Точно такие же сведения приведены для памяти данных (ОЗУ) и для ЕЕРRОМ.

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

 Последняя строка содержит сообщения об ошибках.

  В данном случае сообщение переводится так:

«Ассемблирование прошло успешно, 0 ошибок, 0 предупреждений».

Каждое сообщение об ошибке во вкладке «Build  содержит точное указание места в программе, где произошла эта ошибка.

 

При этом указывается:

  •  имя файла;
  •  номер строки;
  •  фрагмент текста программы, содержащий ошибку;
  •  ее расшифровка.

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

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

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

 Отладка программы Ошибки алгоритма и его реализации

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

 Можно записывать ее в программную память и пробовать ее работу «в железе».

 Но в большинстве случаев отсутствие синтаксических ошибок еще не означает отсутствие ошибок как таковых:

  •  Можно написать команду правильно, да не ту.
  •  Но самая главная неприятность — ошибки алгоритма или его реализации.

 Программист может упустить какой-либо шаг или неправильно поставить условие. Всех возможных ошибок алгоритма не перечесть. Но в результате про-грамма может работать неправильно либо совсем не работать.

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

 

По-английски процесс отладки называется Debug (Дебаг). Слово «Bug» — означает блоха. А «Debug» — это процесс избавления от ошибок или процесс ловли блох. 

  Этапы процесса отладки

Процесс отладки начинается с перевода программы в соответствующий режим. Если проект открыт, а все его программы записаны и оттранслированы, то для перехода в режим отладки выберите пункт «Start Debugging» в меню «Debug» или нажмите кнопку   | на панели задач.

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

По окончании процесса подготовки программа переходит в новый режим. В окне 1 на передний план выходит вкладка «I/O View» (см. рис.2), которая теперь будет использоваться для просмотра содержимого всех регистров. Причем внешний вид этой вкладки немного изменяется. Для каждого элемента в дереве ресурсов появляется поле, отображающее его содержимое.

 

Б окне 2 на передний план выходит вкладка «Breakpoints and Tracepoints», где теперь будут отображаться все точки останова.

  В панели инструментов активизируются все инструменты, относящиеся к режиму отладки (до этого они были неактивны). 

В окне 3 на первый план выходит текст  главного программного файла. На левой границе окна этого файла появляется желтая стрелка— указатель текущей выполняемой команды.

 Указатель установится в начало программы (напротив первой исполняемой команды). Теперь все готово для отладки.

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

Самый простой метод— пошаговое выполнение.

 Для того, чтобы сделать один шаг,

 выберите в меню «Debug » пункт «Step into» («Шаг в») либо нажмите   кнопку  на панели инструментов.

Можно также просто нажать кнопку «F11». В результате программа  выполнит одну текущую команду. Указатель текущей команды (желтая  стрелка) переместится в следующую позицию. Содержимое регистров  изменится в соответствии с выполненной операцией.

  Можно  это проверить, найдя нужный регистр в окне 1. Убедившись,  что команда выполнена правильно, делайте следующий шаг. И так далее.

 При  этом можно проследить:

  •  последовательность выполнения операций,
  •  правильность выполнения условных переходов
  •  и многое другое.

 В любой момент вы можете вручную изменить содержимое любого из элементов в дереве ресурсов.

 Причем можно изменять как содержимое любого отдельного разряда, так и всего регистра в целом.

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

При этом состояние квадратика изменится на противоположное (единица изме-нится на ноль либо наоборот)

 

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

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

 

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

Кроме директивы «Шаг в», имеется еще несколько ее модификаций. Их назначение и способы вызова приведены в табл.1.

 

         Таблица 1.  

 

  Рис. 2. Изменение содержимого регистров

    

 Директива «Шаг через» используется в том случае, если при пошаговом выполнении программы встретится команда вызова подпрограммы.

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

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

Директива «Выполнить до» применяется в том случае, когда какая-либо часть программы не оформлена в виде подпрограммы, но ее желательно выполнить за один шаг. В этом случае в конце выбранного фрагмента вы можете установить текстовый курсор (мигающую вертикальную полоску) и выбрать директиву «Выполнить до». Отладчик за один шаг выполнит все команды, начиная с текущей (отмеченной желтой стрелкой) и вплоть до текстового курсора. Команда в строке с курсором выполняться не будет. Она станет текущей (на нее теперь будет указывать желтая стрелка).

 Применение точек останова

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

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

Определение.

 Точка останова    —  это специальная метка, которую в отладочном        режиме  программист может поставить против        любой строки  программы/


Листинг программы (фрагмент)                             Приложение

3. Ответить на контрольные вопросы

  1.  Что поддерживает встроенный текстовый редактор?

 

  1.  Какой файл является результирующим в процессе трансляции программы?

  

  1.  Что представляют собой последние два символа во второй и третьей строках hex-файла?

     

  1.  Как запускается процедура трансляции?

    

  1.  Какими цветами выводятся сообщения и предупреждения на вкладке «Build »?

  

4. Сделать выводы.


 

А также другие работы, которые могут Вас заинтересовать

23547. Культура речи 164.43 KB
  Русский язык. Язык и культура. Русский язык.
23548. Стилистика – культура речи 1.38 MB
  2] ОРАТОРСКОЕ ИСКУССТВО В РОССИИ [2] НОРМА КАК ОСНОВНАЯ КАТЕГОРИЯ ТЕОРИИ КУЛЬТУРЫ РЕЧИ [2.3] ОСОБЕННОСТИ СОВРЕМЕННЫХ НОРМ РАЗГОВОРНОЙ РЕЧИ [3] АКТИВНЫЕ ПРОЦЕССЫ В СОВРЕМЕННОМ РУССКОМ ЯЗЫКЕ И СОЦИАЛЬНЫЕ ПРИОРИТЕТЫ В ФОРМИРОВАНИИ СОВРЕМЕННОЙ КУЛЬТУРЫ РЕЧИ [3.2] СОЦИАЛЬНЫЕ ПРИОРИТЕТЫ В ФОРМИРОВАНИИ СОВРЕМЕННОЙ КУЛЬТУРЫ РЕЧИ [4] КУЛЬТУРА РЕЧИ СОВРЕМЕННОЙ МОЛОДЕЖИ [4.
23549. КУЛЬТУРА РЕЧИ. Отношение детей к нецензурной лексике 1.35 MB
  преподавательметодистКолледжа архитектуры и менеджмента в строительстве № 17 Отношение детей к нецензурной лексике Оскверняет человека то что из уст исходитИз сочинения ученика В записной книжке известного юмориста рассказывается о человеке который в публичном месте шепчет приличные и во весь голос произносит неприличные слова. Мат рождается в безграмотности там где за незнанием огромного словарного запаса русского языка мы прикрываемся этими тупыми по сути бессмысленными выражениями. И хотя он употреблял слова покрепче и...
23550. РУССКИЙ ЯЗЫК И КУЛЬТУРА РЕЧИ 1.42 MB
  Русский язык и культура речи Речевое взаимодействие. Нормативные коммуникативные этические аспекты устной и письменной речи. Культура речи.
23552. РУССКИЙ ЯЗЫК И КУЛЬТУРА РЕЧИ. ТЕОРЕТИЧЕСКИЙ КУРС 376 KB
  МЕТОДИЧЕСКАЯ ЗАПИСКА Данное пособие является частью комплекса учебных пособий по русскому языку и культуре речи. В нем представлен теоретический материал предусмотренный программой по русскому языку и культуре речи. Рассматриваются различные аспекты речевой культуры формы существования языка стили современного русского языка характеризуются особенности официальноделовой речи основные черты языка юридических текстов излагаются основы ораторского искусства.
23553. Курс русской риторики 1 MB
  Перечитывая и осмысляя эту книгу читатель подружится с ней на долгие годы. Слово ητρική значает ораторское искусство или учение об ораторском искусстве но главным содержанием риторики уже в то время была теория аргументации в публичной речи. Грамматика наука об общих правилах построения осмысленной речи. Риторика наука об аргументации в публичной речи необходимой при обсуждении вопросов практического характера.
23554. Выразительность и ее основные условия 128 KB
  Выразительность речи зависит от многих причин и условий собственно лингвистических и экстралингвистических. Одним из основных условий выразительности является самостоятельность мышления автора речи что предполагает глубокое и всестороннее знание и осмысление предмета сообщения. В значительной степени выразительность речи зависит и от отношения автора к содержанию высказывания.
23555. ОБЩАЯ РИТОРИКА 2.01 MB
  Объектом этой теории является изучение дискурсивных приемов позволяющих вызвать или усилить сочувствие к предложенным для одобрения положениям Perelman 1958 с. Главы посвященные детальнейшему разбору четырех типов риторических метабол представляют собой образец блестящего анализа живого функционирования языка а значение совокупности содержащихся в них наблюдений эвристических ходов мысли далеко выходит за рамки проблематики даже столь сложного феномена каким является литературный художественный язык. Если с известной долей...