Как реализовать уровень абстракции над VxWorks, чтобы обеспечить дескрипторы для обработки исключений и управления памятью? - PullRequest
0 голосов
/ 29 марта 2012

Я только начал работать над VxWorks. В настоящее время я работаю над следующим: -

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

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

Компонент ED & R должен быть настроен с образом ядра для работы с определенными API (если я правильно понимаю), но если это DKM, который уже находится в пространстве ядра, он не имеет полного доступа к памяти (ОЗУ, постоянная память) и, следовательно, может напрямую получить доступ?

Можете ли вы дать мне некоторые рекомендации относительно того, как мне следует идти к достижению моей цели?

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

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

Я заглянул в edrStub.c (метод edrKernelFatalPolicyHandler), но мне не удалось понять, как манипулировать им, чтобы получить желаемый результат.

1 Ответ

1 голос
/ 30 марта 2012

Я думаю, что вы хотите реализовать какое-то расширение механизма исключений.
ED & R уже хорошо справляется с условиями, которые вы упомянули. Задача-нарушитель обычно приостанавливается, чтобы вы могли подключить к ней отладчик.

Если вам не нравится обработка исключения по умолчанию, вы можете изменить код, расположенный в comp / src / vxworks / edrStub.c (я думаю, что именно там он и находится). Затем вы можете реализовать свою собственную функцию для обработки фатальных исключений.

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

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

Так, например:

void regularExceptionHandler() {
   if (__myExceptionHandler != NULL) {
       __myExceptionHandler();
       return;
   }

Конечно, __myExceptionHandler должен быть частью базового образа ядра vxWorks.
Этот шаблон часто используется в vxWorks.

...