Функция ввода ядра ThreadX

Что делает функция ввода ядра ThreadX?

Что это значит, что эта функция не возвращает?

Как создаются темы в tx_application_define функция запланирована и выполнена?

1 ответ

Подпрограмма ядра-ввода ThreadX выполняет следующее:

  1. Если требуется инициализация ThreadX:

    • Вызовите любой порт специфической предварительной обработки.

    • Вызвать низкоуровневую инициализацию, чтобы обработать все специфичные для процессора проблемы инициализации.

    • Вызвать высокоуровневую инициализацию, чтобы выполнить все компоненты ThreadX.

    • Позвоните в любой порт для конкретной постобработки.

  2. Вызвать предоставленную пользователем функцию инициализации tx_application_define,

  3. Вызвать обработку любого пред-планировщика конкретного порта.

  4. Войдите в цикл планирования, чтобы начать выполнение потоков.


Чтобы ответить на ваши вопросы:

  • На шаге 2 функция вызова ядра ThreadX запускает функцию tx_application_define, который зависит от вас, чтобы реализовать. По сути, она очень похожа на процедуру обратного вызова пользователя, за исключением того факта, что она не предоставляется как указатель на функцию (т. Е. tx_application_define Символ разрешается во время соединения, а не во время выполнения). Эта функция предназначена для создания всех потоков.

  • На шаге 4 процедура входа в ядро ​​ThreadX запускает бесконечный цикл, который по сути является самим планировщиком. Это где все переключатели контекста управляются, и потоки входят и выходят из выполнения. При каждом прерывании HW ПК (программный счетчик) переходит от текущего выполняющегося потока к IV (вектору прерывания) и оттуда к подключенному ISR (подпрограмма обслуживания прерываний). После этого он возвращается к планировщику (т. Е. В бесконечный цикл), который определяет, требуется ли переключение контекста или нет. Выполнение в конечном итоге возвращается к последнему исполняющему потоку или к другому потоку, в зависимости от решения планировщика.

  • Как вы можете понять, каждое переключение контекста является результатом прерывания HW, но не каждое прерывание HW приводит к переключению контекста. Обычно вы должны воздерживаться от включения прерываний (вызывая функцию __enable_interrupt изнутри функции tx_application_define), поскольку процедура Thread-kernel-enter проверяет это непосредственно перед тем, как войти в цикл планирования.

Другие вопросы по тегам