Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Данный раздел содержит спецификацию набора макроопределений, реализация которых зависит от операционной системы, под которую компилируется симулятор. Все остальные части кода, не описанные в данном разделе, считаются независимыми от операционной системы.
Функции и переменные, обеспечивающие инициализацию эмулятора и запуска потока симуляции, располагаются в следующих файлах:
1) ppdl\libs_src\simlib\sources\sim_thread.cpp – функции инициализации эмулятора, создания потока симуляции и главной функции потока симуляции;
2) ppdl\libs_src\simlib\headers\threads_cfg.h – макроопределения для создания и управления потоком симуляции.
Для абстрагирования уровня операционной системы создан набор макроопределений для создания потока симуляции и управления им. Для адаптации «Эмулятора» к другой операционной системе достаточно переопределить эти макроопределения. В главе 4.1 дано подробное описание каждого макроопределения.
5.1 Платформо-зависимые макроопределения
Эмулятор ppdl имеет набор платформо-зависимых макроопределений, отвечающих за создание, уничтожение и удаление потока симуляции. Все макроопределения располагаются в файле threads_cfg.h. Полный список макроопределений с вариантами реализации для ОС Windows XP приведен в таблице 5.1.
Таблица 5.1 ‑ Список макроопределений
| 1 | Имя | CREATE_SIM_THREAD |
| Назначение | Создание потока симуляции | |
| Реализация под Windows | #define CREATE_SIM_THREAD(){\ DWORD mThreadId;\ Thread = СreateThread(0,0,Runner,(LPVOID)NULL,0,&mThreadId);\ } | |
| 2 | Имя | DESTROY_THREAD() |
| Назначение | Уничтожение потока эмулятора | |
| Реализация под Windows | #define DESTROY_THREAD()\ TerminateThread(Thread,0);\ CloseHandle(Thread);\ | |
| 3 | Имя | SIM_FUNC_DECL() |
| Назначение | Декларация заголовка функции потока симуляции | |
| Реализация под Windows | #define SIM_FUNC_DECL()\ DWORD WINAPI Runner(LPVOID pParam) | |
| 4 | Имя | SEND_START_MSG() |
| Назначение | Отправка отладчиком сообщения эмулятору о старте потока симуляции | |
| Реализация под Windows | #define SEND_START_MSG()\ while(PostThreadMessage(ThreadId,SIM_START_IN,0,0)==FALSE); | |
| 5 | Имя | WAIT_START_MSG() |
| Назначение | Ожидание сигнала старта от отладчика потоку симуляции | |
| Реализация под Windows | MSG tmp_msg;\ do{\ GetMessage(&tmp_msg,NULL,SIM_START_IN,SIM_START_IN+1);\ }while(tmp_msg.message!= SIM_START_IN);\ | |
| 6 | Имя | SEND_STOP_REASON(reason) |
| Назначение | Отправка эмулятором сообщения отладчику об остановке процесса исполнения программы Аргумент Reason – причина останова. | |
| Реализация под Windows | #define SEND_STOP_REASON(reason)\ PostThreadMessage(OwnerId,SIM_STOPPED_OUT,0,0); | |
| 7 | Имя | LIB_EXPORT |
| Назначение | Декларация функции, экспортируемой из dll эмулятора | |
| Реализация под Windows | #define LIB_EXPORT __declspec(dllexport) |
Функция потока симуляции
Ниже приведена реализация функции основного потока симуляции:
SIM_FUNC_DECL()
{
#ifdef SYSTEMC_USED
sc_initialize(); // используется только для потактовой модели
#endif
//
while(true) // основной цикл
{
WAIT_START_MSG() // ожидаем сигнала от отладчика
if(IsRunned) // если выполнение разрешено
{
while(IsRunned) // выполняем, пока симуляция не остановлена
SingleClock(); // исполняем одну инструкцию
}
SEND_STOP_REASON(0) // посылаем сигнал отладчику об остановке эмулятора
}// while true
}
Эмуляция периферийных устройств
Таймеры
В эмулятор ядра процессора NM6406 реализована функциональность, позволяющая эмулировать интервальные таймеры TIMER0 и TIMER1 в соответствии с 4.1 документа [1].
Для эмуляции таймеров при каждом запуске функции Operate после эмуляции работы инструкций исполняется функция CheckTimers. Данная функция проверяет состояния таймеров. Если таймеры активны, то выполняется инкрементация счетчиков таймеров и, в соответствии со спецификацией, в случае перехода счетчиков в «0», выполняется перезагрузка счетчиков и\или установление запроса на прерывание.
Контроллер прерываний
Контроллер прерываний также реализован как часть ядра процессора.
Перед началом исполнения каждой инструкции эмулятором запускается функция CheckIrqs, которая проверяет состояние битов поля регистра IRR – регистра запросов внешних прерываний. Если IRR не равен нулю (установлен хотя-бы один запрос на прерывание) и запрос не замаскирован, то соответствующий вектор записывается в регистр intr.
После проверки регистра IRR осуществляется проверка регистра intr. В регистре intr помимо вектора внешних прерываний, устанавливаются вектора запросов внутренних прерываний. Регистр intr анализируется на предмет наличия незамаскированных прерываний и, в случае наличия хотя-бы одного запроса на прерывания, функция CheckIrqs возвращает значение вектора прерывания.
Регистр IRR доступен извне класса эмулятора. Таким образом, эмуляторы внешних устройств могут посылать запросы ядру посредством установки бит IRR.
|
|
|
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!