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

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

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

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

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

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

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

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

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


person user1301217    schedule 29.03.2012    source источник


Ответы (1)


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

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

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

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

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

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

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

person Benoit    schedule 29.03.2012