1 Предисловие Симулятор Atmel® – это программный симулятор для устройств Atmel. Он имитирует работу центрального процессора, включая все инструкции, прерывания и большинство встроенных модулей ввода-вывода. Симулятор работает в приложении Atmel Studio в качестве целевого объекта отладки. Это позволяет пользователю использовать обычные команды отладки, такие как Run, Break, Reset, Single step, set breakpoints и watch variables. Представления ввода-вывода, памяти и регистров полностью функциональны при использовании симулятора. Обратите внимание, что окна представления ввода-вывода, памяти и регистров не обновляются во время работы симулятора. Содержимое этих окон также нельзя изменить в режиме запуска. Симулятор основан на программных моделях, полученных непосредственно из конструкции оборудования, и, таким образом, отличается циклической точностью. 2 Поддерживаемые устройства Обратитесь к Поддерживаемым устройствам в Atmel Studio для получения списка поддерживаемых устройств, включенных в Atmel Studio. Дополнительные поддерживаемые устройства или расширения симулятора доступны в галерее Atmel. Примечание. Помните, что настройки fuse-бит по умолчанию обычно соответствуют реальному устройству, что может привести к неожиданностям. Исключениями являются: – fuse-бит совместимости ATmega128 mega103 (M103C) по умолчанию не запрограммирован, и в некоторых устройствах SUT установлен на минимально возможное значение; – в большинстве устройств tinyAVR® fuse-бит SPM по умолчанию не запрограммирован, что не позволяет SPM работать. Установите этот fuse-бит при работе с SPM; – многие устройства tinyAVR имеют внешний сброс в качестве альтернативной функции порта и fuse-бит RSTDISBL для отключения внешнего сброса. При не запрограммированном fuse-бите (настройка по умолчанию) соответствующий PIN порта не будет работать должным образом. Информацию о fuse-битах и их настройках по умолчанию см. в паспорте устройства. Другие известные проблемы, касающиеся симулятора, см. в разделе Известные проблемы в симуляторе. 3 Использование симулятора в Atmel Studio 3.1 Ключевые различия между симулятором и аппаратными средствами В Atmel Studio 6 симулятор управляется в основном как любой другой аппаратный инструмент. Его можно выбрать как для диалога программирования, так и для сеансов отладки. Однако есть несколько ключевых отличий: – симулятор является энергозависимым, что означает, что у него нет памяти между сеансами. Все, что запрограммировано в энергонезависимой памяти симулятора (например, содержимое флэш-памяти или fuse-биты) в течение одного сеанса, будет забыто после завершения сеанса. Когда сеанс завершается, моделируемое устройство в буквальном смысле перестает существовать, а когда запускается новый сеанс, новое моделируемое устройство создается с нуля, начиная свое существование в исходном состоянии. В частности, это означает, что вы не можете запрограммировать fuse-биты в диалоговом окне программирования, а затем начать сеанс отладки с сохранением этих настроек fuse-бит. Новый сеанс всегда начинается с настроек fuse-бит по умолчанию. fuse-биты и другие опции для использования в сеансах отладки с симулятором должны быть настроены с помощью страницы свойств, специфичной для симулятора, активной только во время сеанса отладки симулятора. В будущем может быть рассмотрена возможность сохранения частей или всего состояния симулятора между сеансами; – Симулятор не имеет выбираемых интерфейсов программирования или отладки. Это связано с тем, что моделируемое устройство реализовано с помощью программной модели, и весь доступ к внутренним компонентам внутри модели осуществляется через программный API; физический интерфейс не задействован; – В настоящее время одновременно можно запускать только один экземпляр симулятора. Кроме того, у симулятора отсутствуют серийные номера, как у большинства аппаратных средств; – Симулятор работает не в режиме реального времени. Это означает, что скорость моделирования (измеряемая в имитируемых циклах процессора в секунду) значительно ниже, чем на реальном устройстве. Симулятор может использовать только одно ядро процессора в многоядерном процессоре, поэтому обновление вашего компьютера большим количеством ядер не сделает его быстрее; – Симулятор – это не полная модель устройства. В то время как цифровая логика моделируется циклически точно, вся аналоговая периферия в настоящее время отсутствует. Кроме того, моделирование NVM[1] является неполным. Степень неполноты варьируется в зависимости от устройства, см. Известные проблемы в симуляторе) – Поддержка устройств неполна. Симулятор зависит от модели программного обеспечения каждого моделируемого устройства / семейства. Поддерживаемые устройства отображаются в окне выбора устройств при выборе симулятора. См. раздел Поддерживаемые устройства для получения дополнительной информации; – Симулятор работает изолированно, что означает, что окружение моделируемого устройства не моделируется. Для запуска реальных приложений на симуляторе на входы моделируемого устройства должны подаваться стимулы. Стимулы могут быть предоставлены простыми файлами стимулов, как показано в разделе под названием “Стимулы симулятора”. 3.2 Ключевые отличия от AVR Studio 4 и AVR32 Studio Симулятор на основе моделей использует ту же технологию, что и в AVR Studio® 4, также известную как "Simulator 2". Он был расширен для поддержки моделирования также 32-разрядных устройств UC3 и ARM®. Симулятор набора инструкций от AVR32 Studio в настоящее время недоступен в Atmel Studio. Вместо него используется симулятор на основе моделей. 3.3 Использование симулятора в диалоговом окне программирования Хотя это возможно, использование симулятора в диалоговом окне программирования не имеет такой уж большой практической пользы из-за изменчивости симулятора. Однако новым пользователям может быть полезно изучить диалоговое окно программирования без риска повреждения какого-либо реального оборудования или даже без вложений в какое-либо оборудование вообще. Диалоговое окно программирования обычно описано в диалоговом окне программирования в Atmel Studio. Симулятор поддерживает следующие операции: – Считывание идентификатора устройства; – Стирание устройства / памяти; – Программирование, считывание и проверку памяти; – Программирование, считывание и проверку fuse-битов; – Программирование, считывание и проверку lock-битов. Когда открывается диалоговое окно программирования и выбирается устройство, моделируемое устройство запускается с заводскими настройками по умолчанию и пустой памятью. Любые данные, запрограммированные в симуляторе, будут сохраняться до тех пор, пока не будет выбрано другое устройство или пока диалоговое окно программирования не будет закрыто. 3.4 Использование симулятора в сеансе отладки В основном симулятор используется в качестве отладчика. Отладка с помощью симулятора запускается таким же образом, как и с другими инструментами. Подробнее об этом можно прочитать в разделе Отладка в Atmel Studio. При запуске симулятора он неявно применяет сброс при включении питания (POR) к модели. Следовательно, симулятор запустится с вектора сброса с установленным флагом сброса POR. Аналогично, кнопка сброса Atmel Studio применяет POR к симулятору. Если watchdog запрограммирован на сброс, его можно перехватить, установив точку останова в векторе сброса, и позволить симулятору работать. В режиме отладки симулятор полностью поддерживает все функции отладки Atmel Studio, включая все представления, неограниченное количество точек останова и так далее. Невозможно подключиться к работающему симулятору или отсоединиться от него и поддерживать его работу в фоновом режиме. Как и в диалоговом окне программирования, моделируемое устройство перестает существовать, когда пользователь прекращает отладку. Опять же, это ограничение может быть снято в будущих версиях Atmel Studio, Поскольку симулятор является программной моделью, он не ограничен системой OCD на устройстве и обладает определенными возможностями, недоступными аппаратным средствам: – Неограниченное количество точек останова независимо от устройства и системных ограничений OCD. – Добавление и удаление точек останова во время выполнения целевой задачи. – Отладка устройств, на которых отсутствует система OCD. – Доступ к частям задачи, недоступным системе OCD. – Имитация устройств, которые еще не существуют (ранняя поддержка до появления образцов). – Наличие функций не имеющих аналогов в аппаратном обеспечении, например счетчик циклов. – В отличие от реального оборудования, симулятор позволяет изменять содержимое flash и EEPROM напрямую, используя представление памяти Atmel Studio. 3.4.1. Использование симулятора для контроля ввода-вывода Просмотр ввода-вывода в основном работает таким же образом, как и другие инструменты. Однако из-за способа отображения адресов ввода-вывода на внутренние сигналы в модели симулятора есть несколько особенностей. Это относится к регистрам или битовыми полями внутри регистров, которые доступны только для чтения, только для записи, чтения и записи из разных аппаратных регистров или имеют особые режимы записи. Как правило, разные битовые поля в одном и том же регистре могут вести себя по-разному, поскольку они могут быть сопоставлены с разными устройствами оборудования. При изменении регистра в процессе ввода-вывода новое значение регистра записывается в целевой объект, а затем считывается обратно, и уже считанное значение отображается как результат ввода-вывода. По разным причинам отображаемое значение может отличаться от записываемого: – В обычном регистре / битовом поле с доступом для чтения / записи при изменении его значения новое значение отображается немедленно; – В некоторых случаях доступ для чтения и записи предоставляется в разных местах оборудования. В результате попытка изменить регистр / битовое поле может не имеет видимого эффекта, даже если регистр фактически и записан (например, регистр USART UDR во многих устройствах), или эффект задерживается на один или несколько циклов (например, регистры с двойной буферизацией); – Если регистр / битовое поле доступно только для чтения, попытка его изменения не даст эффекта; – Если регистр / битовое поле доступен только для записи, обычно он всегда будет показывать ноль; – Некоторые регистры / битовые поля (особенно в устройствах XMEGA и UC3) имеют специальные режимы записи, такие как set, clear или toggle. Это означает, что запись единицы в такой бит выполнит над ним одну из этих операций, в то время как запись нуля не имеет никакого эффекта (это устраняет необходимость в последовательностях чтения-изменения-записи для изменения отдельных битов в регистре). Часто такие регистры зеркально отображаются как обычный регистр по другому адресу, в этих случаях симулятор обычно разрешает запись в этот обычный регистр, даже если он задокументирован как доступный только для чтения. Использовать обычный регистр при внесении изменений с помощью операций ввода-вывода намного проще; – По возможности симулятор часто разрешает полный доступ на чтение / запись к регистрам / битовым полям, даже если они задокументированы как доступные только для чтения или записи. Одним из особенно важных примеров этого являются флаги прерывания. Часто они предназначены только для чтения, но возможность их записи из симулятора позволяет запускать прерывание, если аппаратное обеспечение спроектировано таким образом, что флаг прерывания и является причиной прерывания. Эта функция важна для генерации стимулов, например, прерывания АЦП можно стимулировать путем записи преобразованного значения в регистр данных АЦП, а затем запускать прерывание АЦП посредством установки флага прерывания АЦП (как регистр данных АЦП, так и флаг прерывания АЦП обычно описываются как доступные только для чтения в таблицах данных); – В некоторых 32-разрядных моделях (ARM и UC3) доступ к некоторым регистрам ввода-вывода периферийных модулей использует встроенную шину вместо прямого доступа к внутренним сигналам. В этих случаях на симулятор будут распространяться те же ограничения, что и на эмуляторы на основе OCD (встроенная система отладки, например, на основе JTAG). Например, регистры, доступные только для чтения, остаются доступными только для чтения, для некоторых регистров требуется, чтобы шаблон (бит) защиты был записан в другой регистр, прежде чем можно будет записать фактический регистр, у некоторых периферийных устройств должна быть явно включена синхронизация, прежде чем к ним можно будет получить доступ, и т.д. Подробную информацию о каждом устройстве можно найти в разделе под названием “Проблемы, связанные с устройством и семейством”; – Иногда из-за конструкции оборудования невозможно правильно отобразить бит-поля с разумными затратами. Чаще всего это влияет на доступ для записи, но иногда даже на чтение. Такие недостатки описаны в разделе под названием “Проблемы, связанные с устройством и семейством”; – Наконец, не отвечающие или иным образом неисправные регистры в представлении ввода-вывода могут быть вызваны ошибками в отображении ввода-вывода в модели симулятора. Это наиболее распространенный тип ошибок в симуляторе. Примечания относительно вышеизложенного: 1. Ошибки или недочеты в отображении ввода-вывода симулятора влияют только на представление регистра в отладчике, а не на функцию модели. Такие ошибки не повлияют на приложение, запущенное на целевой платформе; 2. Все, что сказано о представлении ввода-вывода в этом разделе, в равной степени верно, когда представление памяти используется для доступа к местоположениям ввода-вывода. Единственное различие между ними заключается в представлении; 3. Ограничения, перечисленные для представления ввода-вывода, также повлияют на стимулы, описанные в разделе под названием “Стимулы симулятора”. 4 Стимулы симулятора 4.1 Введение Начиная с версии Atmel Studio 6.1, используется файловый стимулятор, ранее находившийся в AVR Studio 4. Примечание – В AVR Studio 4 было два варианта стимуляторов. Сохранился последний вариант, используемый в Simulator 2, более ранний вариант не поддерживается. Особенности стимулятора: – Время выражается в терминах задержки, а не в абсолютных значениях счетчика циклов; – Любой регистр ввода-вывода может быть переназначен (стимулирован), а не только регистры портов; – Отдельные биты в регистрах ввода-вывода могут быть стимулированы с помощью побитовых назначений; – Введены директивы, повышающие гибкость. 4.2 Формат файла стимулов Файл стимулов - это простой текстовый файл в формате ASCII, содержащий команды (стимулы), по одной команде в строке. Помимо комментариев, есть только три вида команд: задержки, назначения и директивы. 4.2.1 Комментарии Комментарии начинаются с // и длятся до конца строки. Блокирование комментариев (/* ... */) не поддерживается. 4.2.2 Задержки Задержка определяется символом #, за которым следует длительность задержки, указанная в тактовых циклах процессора. #20 означает задержку в 20 тактовых циклов. Использование задержек - единственный способ разделения команд по времени. Команды, которые не разделены задержками, будут выполняться одновременно, то есть в пределах одного такта. В текущей реализации стимулы оцениваются только между отдельными шагами процессора, что означает, что задержка может быть больше, чем указано, если она закончится в середине многоцикловой инструкции. 4.2.3 Назначения Назначения используются для присвоения нового значения регистру ввода-вывода. Операторы назначения перечислены в Таблице 1 “Операторы назначения стимулов”. Таблица 1. Операторы назначения стимулов Формат Описание target = value Прямое назначение; установите целевое значение равным значению. target |= value Побитовое Или assignment; биты, значение которых равно '1', будут установлены в target, остальные биты останутся неизменными. target &= value Побитовое И присваивание; биты, имеющие значение '0', будут удалены в целевом файле, остальные биты останутся неизменными. target ^= value Побитовое назначение XOR; биты, значение которых равно '1', будут переключены (инвертированы) в target, остальные биты останутся неизменными. Целевым значением может быть числовой адрес памяти регистра ввода-вывода в карте ввода-вывода. Для простых устройств с плоской структурой ввода-вывода, таких как tinyAVR® и megaAVR®, также можно использовать название регистра, указанное в паспорте данных. Для устройств со сложной структурой ввода-вывода (XMEGA®, UC3, SAM) пока рекомендуется использовать адреса. Самый простой способ определить адрес - вызвать представление вводавывода и выбрать нужный регистр. Адрес может быть скопирован из представления ввода-вывода (выберите нужный регистр, щелкните правой кнопкой мыши и выберите "Скопировать адрес"). Значение может быть либо числовой константой, заданной в десятичной, восьмеричной или шестнадцатеричной форме в соответствии с синтаксисом C, либо иметь вид *source. С использованием представленного синтаксиса, в качестве source применяется либо имя, либо адрес памяти регистра ввода-вывода. Текущая версия интерпретатора не поддерживает выражения. Например: GPIOR0 = *GPIOR1 + 1 // Не допускается! 4.2.4 Директивы Директива инициируется символом $, за которым следует команда. Директивы используются для управления различными аспектами выполнения стимулов и протоколирования. Поддерживаемые в настоящее время директивы перечислены в Таблице 2 “Директивы стимулов”. Таблица 2. Директивы стимулов Директива $stimulate Аргументы Описание filename Начало чтения стимулов из нового файла. Новый файл будет считываться параллельно с текущим файлом. В настоящее время это единственный способ открыть несколько файлов стимулов в сеансе стимулов. $quit Закрыть текущий файл стимулов. Оставшаяся часть файла будет удалена, и файл будет закрыт. (то же, что и конец файла) $break Прервать выполнение программы. Файлы стимулов остаются открытыми, и стимулы будут возобновлены при возобновлении выполнения программы. $repeat number Запустите цикл повтора, повторяйте несколько раз до $endrep директивы. Конец цикла повтора. $endrep Настроено ведение журнала регистрации регистра. Ведение журнала не начнется до тех пор, пока не будет выполнена $startlog директива. $log IO-register $unlog IO-register Прекратить ведение журнала регистрации. $startlog filename Начните запись в именованный файл. Прекратить ведение журнала. $stoplog $fuse address value Установите байт предохранителя в address равным value. [b][c] Адреса предохранителей обычно начинаются с 0. Устройство сброса. Возможные типы сброса перечислены ниже. [c] Таблица 3. Типы сброса $reset type Тип Описание p Сброс включения питания (POR) e Внешний сброс (EXT) b Обнаружение потемнения (BOD) s Спайк Директива Аргументы Описание Загружает содержимое file в память. В конструкциях AVR вы можете указать segment, куда загружать данные. Если вы добавите nocheck в конце команды, любые ошибки контрольной суммы в файле будут проигнорированы. [a] Таблица 4. Сегменты памяти $memload file segment nocheck Сегмент Описание s Память данных (по умолчанию) f Flash e EEPROM i IO Сбрасывайте содержимое памяти в file, начиная с adr и сбрасывая size количество байтов. Опционально укажите segment, чтобы выбрать, какую память сбрасывать. [a] Таблица 5. Сегменты памяти $memdump file adr size segment Сегмент Описание s Память данных (по умолчанию) f Flash e EEPROM i IO Примечания: [a] – Несколько аргументов разделяются пробелом; [b] – После замены предохранителя необходимо выполнить сброс при включении питания, чтобы замена вступила в силу. [c] – Эта команда была введена в Atmel Studio 6.1 SP2. [a] – Эта команда была введена в Atmel Studio 6.2 с пакетом обновления 1. Запись в журнале генерируется всякий раз, когда регистрируемый регистр ввода-вывода изменяет значение по какой-либо причине. Формат журнала совместим с форматом стимулов, что означает, что выходные данные журнала могут использоваться в качестве входных данных стимулов. Файл журнала будет состоять из инструкций по задержке и назначений. Примечание – Относительные пути относятся к каталогу исходного файла стимулов 4.3 Использование в Atmel Studio Входной файл стимулов необходимо подготовить заранее с помощью текстового редактора, подобного редактору Atmel Studio. Для файлов стимулов рекомендуется использовать расширение .stim. Перед началом отладки файл стимулов выбирается на вкладке Инструмент на странице свойств проекта. Во время сеанса отладки вы можете выбрать новый файл стимулов, используя меню выбора Debug → Set Stimulifile. Генерацию стимулов можно запустить из Atmel Studio, выбрав в меню пункт Debug → Execute Stimulifile. Эта опция доступна только во время активного сеанса отладки. Время между этим действием и вводом стимулов истекает при закрытии последнего файла стимулов, что называется сеансом стимулов. Во время сеанса стимулов можно использовать все обычные функции отладки, такие как точки останова, пошаговое выполнение и т.д. Стимулы применяется по мере выполнения прикладной программы (в свободном режиме или в пошаговом режиме). Если сеанс отладки будет продолжен после завершения сеанса стимулов, он будет продолжаться без стимулов (если не будет запущен новый сеанс стимулов). Нет способа явно прервать сеанс активных стимулов, кроме завершения сеанса отладки. Выходные данные сеанса стимулов будут перенаправлены на панель Output в Atmel Studio. Выберите FileStimuliProvider в раскрывающемся списке Show output from: drop-down list. Панель FileStimuliProvider создается при первом запуске файла стимулов и будет оставаться на месте до закрытия Studio. Выходные данные сохраняются во время сеансов отладки, если это нежелательно, их необходимо очистить вручную. Смотрите раздел под названием “Формат панели вывода FileStimuliProvider”. Ведение журнала можно запустить только с помощью команд в файлах стимулов, в настоящее время нет средств графического интерфейса для настройки или запуска ведения журнала. Atmel Studio в настоящее время поддерживает ведение журнала только в файл, а не в панель вывода. 4.3.1 Формат панели вывода FileStimuliProvider Во время выполнения сеанса стимулов, все выходные данные сеанса выводятся на панель FileStimuliProvider. Все строки вывода начинаются с отметки времени в форме #00000028. Это значение счетчика циклов в десятичной системе счисления. На этой панели выводятся три типа данных, рассмотренные ниже. 4.3.1.1 Открытие или закрытие файла стимулов и завершение сеанса Всякий раз, когда файл стимулов открывается или закрывается, он регистрируется в выходных данных. Первой строкой выходных данных будет открытие исходного файла стимулов, это может выглядеть следующим образом: #000000000 Открыт файл 'C:\Project\Test\test.stim' как [ 0] Число в квадратных скобках - присвоенный файлу номер, начинающийся с 0. Это число используется для ссылки на файл в других сообщениях. Если открыть другой файл стимулов, он получит номер 1 и так далее. Когда файл закрыт, появляется аналогичное сообщение: #000000028 Закрыт файл 'C:\Project\Test\test.stim' [ 0] Когда последний файл стимулов закрыт, сеанс стимулов завершается, и больше стимулы создаваться не будут. Обратите внимание, что последний закрытый файл не обязательно должен быть исходным файлом. После закрытия последнего файла выдается следующее сообщение: #000000036 Все файлы стимулов закрыты 4.3.1.2 Командное эхо Весь текст из файлов стимулов отображается эхом во время выполнения. Отображаемому тексту предшествуют временная метка и номер файла, и он может выглядеть следующим образом: #000000016 [ 0] PINB ^= 0x03 #000000016 [ 0] #4 #000000020 [ 0] PINA = 0x01 В этом примере назначения PINB и PINA разделены по времени четырьмя циклами, и все команды считываются из файла 0. 4.3.1.3 Сообщения об ошибках и предупреждения Сообщения об ошибках / предупреждения явно ссылаются на имя файла и номер строки, в которых была обнаружена ошибка, и могут выглядеть следующим образом: #000000006 [ 0] log foo.bar Ошибка: L:\Project\Test\test.stim (6): Синтаксическая ошибка 4.4 Известные проблемы Примечание – Сопоставление имен регистров и адресов надежно работает только для устройств с плоской структурой ввода-вывода с уникальными именами регистров. Пунктирное обозначение (Dotted notation) не работает, вместо этого используйте числовые адреса. – Ведение журнала некоторых регистров ввода-вывода на 32-разрядных устройствах может не поддерживаться. Это будет задокументировано для каждого устройства. – В присваиваниях оператор (= и т.д.) должен быть окружен пробелами. – Интерпретатор стимулов завершится сбоем, если последняя строка входного файла стимулов не будет заканчиваться символом перевода строки. – На 8-разрядных устройствах невозможно присвоить значения 16- или 32-разрядным кортежам регистров, например, для присвоения ADC необходимо присваивать ADCL и ADCH отдельно. Смотрите пример в разделе под названием “Пример сеанса стимулов; Простая программа AVR” – Отчеты об ошибках оставляют желать лучшего. – Синхронизация стимулов может быть отклонена на один или два цикла по сравнению со спецификацией задержки, поскольку файлы стимулов оцениваются только между одноступенчатыми операциями процессора в текущей реализации. – Нарушение общего доступа при попытке отредактировать файл стимулов во время открытия. 4.5 Пример сеанса стимулов; Простая программа AVR Следующий пример должен работать с любым устройством ATtiny или ATmega, имеющим как минимум два порта GPIO (PORTA и PORTB). Ее следует запускать с активным режимом ввода-вывода и настраивать для отображения модулей PORTA и PORTB. Эта программа настраивает PORTA как выходные данные и PORTB как входные, а затем выполняет цикл, считывая все, что присутствует в PINB, увеличивает это на единицу и выводит в PORTA. reset: rjmp start start: ldi r16, 0xff out DDRA, r16 clr r0 out DDRB, r0 loop: in r0, PINB inc r0 out PORTA, r0 rjmp // PORTA => output // input <= PORTB // Requires stimuli for any action Без стимулов эта программа будет считывать 0 из PINB и выводить от 1 до PORTA вечно. Теперь применим следующий файл стимулов: // Example stimuli file, feeds any output on PINA back to PINB. #10 $repeat 10 PINB = *PINA #10 $break $endrep В результате PINB теперь будет определяться PORTA в каждом 10-м цикле, и эффект будет виден непосредственно в окне ввода-вывода. Благодаря $break директиве внутри цикла программа может останавливаться каждые 10 циклов без какой-либо точки останова в программе. Рисунок 1. Скриншот сеанса стимулов из примера. 5 Известные проблемы в симуляторе В этом разделе перечислены известные ошибки и недочеты текущего симулятора. Цифры, указанные в скобках, относятся к номерам ошибок в системе отслеживания ошибок. 5.1 Общие проблемы 5.2 Проблемы, связанные с устройством и семейством – Диалоговое окно настроек симулятора еще не реализовано (# 13412); – XMegaB1, UC3, за исключением серий UC3A и UC3L, и многие устройства tinyAVR® и megaAVR® еще не поддерживаются в Atmel Studio 6.2. Смотрите раздел "Поддерживаемые устройства" в Atmel Studio для получения дополнительной информации о поддержке устройств; – Устройства AT90CAN* / ATmega* C*, AT90USB* / ATmega* U*, AT90PWM* и ATtiny87 / 167 никогда не будут поддерживаться моделями симуляторов; – Внешняя память не поддерживается симулятором (#7570, #9442); – При записи в регистры портов ввода-вывода, если порт настроен как выходной, изменение может немедленно появиться в регистре PIN, а не с задержкой в один цикл, как в реальном чипе (# 7188). Это влияет только на представление ввода-вывода Atmel Studio, а не на выполнение программ; – Симулятор набора команд AVR32 Studio по-прежнему не реализован в Atmel Studio 6.2 (# 11557); – Если имитируемое устройство переведено в спящий режим, пошаговое переключение не приведет к запуску счетчика программ. Как и у реального устройства, это состояние будет сохраняться до тех пор, пока что-нибудь не выведет его из спящего режима. Причина такого поведения заключается в том, что центральный процессор не выполняет код в режиме ожидания, альтернативой может быть одношаговое зависание до тех пор, пока устройство не проснется, что приведет к зависанию всей Atmel Studio до тех пор, пока это не произойдет (возможно, никогда); – Установка fuse-бит в коде моделируемой программы может помешать работе симулятора. Особенно предохранители OCDEN и SUT могут привести к прерыванию сеанса симулятором. Это вызвано таймаутом в симуляторе, который подсчитывает количество тактов, необходимых для вывода чипа из режима сброса. Если этот таймаут превышен, симулятор завершит сеанс с ошибкой. 5.2.1 Устройства tinyAVR – Регистр ATtiny40 RAMDR не может быть записан из представления (окна?) ввода-вывода Atmel Studio. Обходной путь: запись SRAM напрямую через представление памяти; – Выбор внешнего тактирования ATtiny10 в симуляторе приведет к зависанию Atmel Studio (# 9349); – PRR регистр ATtiny25/45/85 не работает (# 5584, он работает с другими устройствами, имеющими PRR); – ATtiny25 / 45/ 85: слишком длительное время ожидания сторожевого тайм-аута (~ в 64 раза больше, чем должно быть при частоте 1 МГц); – Функция предварительной настройки системного тактирования не включена в модели симуляторов, запись CLKPR не повлияет на системное тактирование. (все устройства, кроме ATtiny10/9/5/4, ATtiny20, ATtiny40); – CLKPR не обновляется при отладке, если fuse-бит CKDIV8 запрограммирован (#10515). 5.2.2 megaAVR и устройства Smart Battery – Указатель стека ATmega16HVB инициализируется некорректно и должен быть инициализирован приложением. Это проблема с реальным чипом, и симулятор просто отражает реальность, см. Раздел 38.1.1 с ошибками в техническом паспорте (Rev. B); – Не работает сторожевой таймер ATmega169PA / 165PA / 329P /325P / 3250P / 3290P / 649P / 645P / 6490P / 6450P (#9301); – Функция предварительной настройки системного тактирования не включена в модели симуляторов, запись CLKPR не повлияет на системное тактирование; – Стирание (установка?) флага внешнего прерывания на некоторых устройствах mega срабатывает на обоих флагах (# 13434); – CLKPR не обновляется при отладке, если fuse-бит CKDIV8 запрограммирован (#10515). 5.2.3 XMEGA устройства – Запись/стирание ФЛЭШ-памяти с использованием SPM и EEPROM из приложения еще не реализовано в устройствах ATxmega (# 7611); – Моделирование выполняется медленно по сравнению с другими устройствами; – Просмотр ввода-вывода: включение сторожевого таймера путем установки битов ENABLE в регистре WDT.CTRL не работает; – Попытка изменить CLK.CTRL регистра в режиме ввода-вывода приведет к зависанию Studio (или отображению только для чтения в xmegaE5); – xmegaE5: регистр сравнения/захвата TCCOM и TCxn_CTRLD доступны только для чтения в режиме ввода-вывода; – xmegaE5: FAULTn.CTRLG регистр битs 5-7 доступны только для чтения в режиме ввода-вывода; – xmegaE5: SPI.DATA Регистр доступен только для чтения в режиме ввода-вывода; – xmegaE5: регистр CRC.DATAIN доступен только для чтения в режиме ввода-вывода. 5.2.4 32-разрядные устройства UC3 – Карта ввода-вывода модели UC3A еще не завершена. Следующие модули ввода-вывода всегда будут показывать ноль в режиме ввода-вывода Atmel Studio: SMC, HMATRIX, FLASHC, MACB SMC, DRAMC INTC, PM RTC,,,,,,,,,,,,,,,,,,, и,,,. – Моделирование выполняется медленно по сравнению с другими устройствами. 6 42171B 2013-09-27 42171A 2013-02-14 Редакции документа Добавлена информация о стимулах и пример в разделе под названием “Стимулы симулятора”. Первоначальный документ. Неизданный.