СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 2010-5
ПРОГРАММИРОВАНИЕ 69 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 5 2010 next); rtems_extension my_task_begin (rtems_tcb * curr); rtems_extension my_task_exit (rtems_tcb * curr); rtems_extension my_fatal_error (Internal_errors_Source src, bool internal, uint32_t error_code); // набор функций обработчиков системных событий rtems_extensions_table MyExtTable = { my_task_create, my_task_start, my_task_restart, my_task_delete, my_task_switch, my_task_begin, my_task_exit, my_fatal_error }; Объявленная нами структура MyExt Table и будет использована при ре гистрации набора расширений. Как и всякий объект в RTEMS, наш набор расширений должен иметь своё 4 бай товое имя и идентификатор: // регистрируем расширения ext_name = rtems_build_name('E', 'X', 'T', '1'); status = rtems_extension_create (ext_name, &MyExtTable, &ext_id); if (status!=RTEMS_SUCCESSFUL) printf ("Error: cannot create ex tension with %d\n", status); else printf («Extension created\n"); Если при регистрации произошла ошибка с кодом RTEMS_TOO_MANY – слишком много объектов, – это озна чает, что в таблице конфигурации RTEMS было указано недостаточное количество ресурсов данного типа или мы вообще забыли его указать. Для RTEMS это является типичной ошиб кой разработчика по невнимательнос ти – для каждого типа ресурсов следу ет указывать их максимальное коли чество; по умолчанию RTEMS может и вовсе не выделить для них места, как, например, с набором расширений, по этому указываем максимальное число ресурсов: #define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1 Теперь займёмся самими обработ чиками. Вызываться они будут при смене контекста у каждой из задач или при возникновении неисправи мой ошибки. Пусть наш обработчик переключения задач my_task_switch выводит на экран идентификатор за дачи, с которой происходит переклю чение, и время, которое она выполня лась. Указатель на структуру ядра RTEMS с информацией о задаче, с которой происходит переключение контекста, передаёт аргумент rtems_ tcb * curr . printk("*** current task: id [%d], time elapsed [%d] \n", curr >Object.id, curr >cpu_time_used ); Поле Object в структуре tcb содержит информацию об объекте (имя, иден тификатор), а поле cpu_time_used со держит время выполнения данной за дачи. Полное описание этой структуры находится в заголовочном файле rtems/score/thread.h , который содержит всю необходимую информацию о по токе как, например, приоритет при Тел.: (495) 234 0636 • Факс: (495) 234 0640 • E mail: info@prosoft.ru • Web: www.prosoft.ru ОФИЦИАЛЬНЫЙ ДИСТРИБЬЮТОР ПРОДУКЦИИ ADLINK Реклама © СТА-ПРЕСС
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy