Функции создания и уничтожения эмулятора




Интерфейс управления платой или программным эмулятором для подключения к отладчику gdb

 

Общие соображения

Система отладки на основе программы gdbи универсального стаба состоит из трех компонент:

1. Отладчик nm-gdb, который предоставляет пользователям полноценный функционал для отладки приложений и может работать как самостоятельно, так и в составе IDEEclipse

2. Программа gdb-stub (далее стаб), которая принимает от gdb по протоколу TCP-IP и обрабатывает низкоуровневые команды для эмулятора или платы, такие как запись или чтение из памяти, запись или чтение регистров, запуск, останов программы и т.д. Стаб преобразует команды, поступаемые в виде TCP-IPпакетов в вызов функций управления платой или симуляторов.

3. Библиотека управления – динамически подключаемая библиотека (в формате so), в которой содержаться все функции управления отладочной платой или эмулятором, необходимые стабу.

Для запуска процесса отладки необходимо запустить две программы стаб и gdb в следующей последовательности:

gdb-stub –l control_lib.so –p port_num&

Nm-gdb

т.е в начале в виде отдельного процесса запускается стаб, затем, при запущеномстабе запускается nm-gdb.

Параметрыgdb-stub:

control_lib.so – имябиблиотеки управления. В главе 2 приведен полный список функций, которые должны быть реализованы в библиотеке управления для корректной работы отладчика

port_num – номер TCP-порта, по которому будет nm-gdbбудет связываться со стабом

 

Интерфейс библиотеки управления платой или эмулятором

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

Интерфейс с отладчиком

Интерфейс эмулятора можно условно разделить на две части:

- функции создания и уничтожения эмулятора;

- интерфейсный класс TDbgInterface.

Функции создания и уничтожения эмулятора

В таблицах 4.1.1 ‑ 4.1.2 приведены описания интерфейсов функций относящихся к процессу создания (инициализации) и уничтожения эмулятора.

Таблица 4.1.1 Функция создания эмулятора.

Интерфейс TDbgInterface* InitSys()
Описание Функция выполняет инициализациюотладочной платы или эмулятора. Это первая функции бибиблиотеки управления, которую вызывает gdb-stub
Аргументы -
Возвращаемое значение В случае успеха: Любое значение, кроме NULL В случае ошибки: NULL
Примечания -

 

Таблица 4.1.2 Функция уничтожения эмулятора.

Интерфейс voidSysDestroy()
Описание Функция завершения работы с платой или эмулятором
Аргументы -
Возвращаемое значение -
Примечания -

 

Функция GetProcCfg.

Интерфейс tDProcCfg* GetProcCfg()
Описание Возвращает указатель на структуру, описывающую элементы процессора (регистры, флаги, шины памяти и т.д)
Аргументы -
Возвращаемое значение Указатель на структуру, описывающую элементы процессора
Примечания  

 

Структура tDProcCfg:

structtDProcCfg

{

intnreg; // кол-во регистров

consttDRegister *regs; // массив дескрипторов регитстров

intnbuses; // кол-во адресных пространств памяти

consttDMemBus *bus; // массив дескрипторов адресных пространств

intnflags; // количество флагов

consttDProcFlags *flags; // массив дескрипторов флагов

intnfifos; // количество FIFO-блоков

consttProcFifo *fifos; // массив дескрипторов FIFO-блоков

};

 

Структура дескриптора регистров:

structtDRegister

{

constchar *name; // ассемблерное имя

inttype; // размер регистра в байтах

intarrsize; // размер регистрового массива

intflag; // зарезервировано

};

 

Структура дескриптора шин памяти:

structtDMemBus

{

constchar *name; // ассемблерное имя адресного пространства

intasize; // размер шины адреса в битх

intdsize; // размер шины данных в битах

};

 

Структура дескриптора флага:

structtDProcFlags

{

char *name; // имяфлага

const int regnum; // индексрегистра

constintreg_arrnum; // индекс регистра в регистровом массиве

intbit; // бит в регистре

};

 

 

Структура дескриптора ФИФО:

structtProcFifo

{

constchar *name; // имя

intElemBitSize; // размер одного элемента в битах

intNumElems; // размер ФИФО (макс. Кол-во элементов)

};

Таблица 4.2.2 Функция ProcGetRegIdx.

Интерфейс int GetRegIdx(char* aRegName)
Описание Возвращает индекс регистра по его имени
Аргументы char* aRegName – Имя регистра
Возвращаемое значение В случае успеха: индекс регистра, по которому можно считать\записать значение регистра функциями GetReg\SetReg; В случае ошибки: -1 – регистра с таким именем не существует
Примечания Имена регистровых массивов должны передаваться в функцию так, как они обозначены в PPDL: gr$ - массив регистров gr (gr0…gr7) ar$ - массиврегистров ar (ar0…ar7)

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: