Функция ввода ядра ThreadX
Что делает функция ввода ядра ThreadX?
Что это значит, что эта функция не возвращает?
Как создаются темы в tx_application_define
функция запланирована и выполнена?
1 ответ
Подпрограмма ядра-ввода ThreadX выполняет следующее:
Если требуется инициализация ThreadX:
Вызовите любой порт специфической предварительной обработки.
Вызвать низкоуровневую инициализацию, чтобы обработать все специфичные для процессора проблемы инициализации.
Вызвать высокоуровневую инициализацию, чтобы выполнить все компоненты ThreadX.
Позвоните в любой порт для конкретной постобработки.
Вызвать предоставленную пользователем функцию инициализации
tx_application_define
,Вызвать обработку любого пред-планировщика конкретного порта.
Войдите в цикл планирования, чтобы начать выполнение потоков.
Чтобы ответить на ваши вопросы:
На шаге 2 функция вызова ядра ThreadX запускает функцию
tx_application_define
, который зависит от вас, чтобы реализовать. По сути, она очень похожа на процедуру обратного вызова пользователя, за исключением того факта, что она не предоставляется как указатель на функцию (т. Е.tx_application_define
Символ разрешается во время соединения, а не во время выполнения). Эта функция предназначена для создания всех потоков.На шаге 4 процедура входа в ядро ThreadX запускает бесконечный цикл, который по сути является самим планировщиком. Это где все переключатели контекста управляются, и потоки входят и выходят из выполнения. При каждом прерывании HW ПК (программный счетчик) переходит от текущего выполняющегося потока к IV (вектору прерывания) и оттуда к подключенному ISR (подпрограмма обслуживания прерываний). После этого он возвращается к планировщику (т. Е. В бесконечный цикл), который определяет, требуется ли переключение контекста или нет. Выполнение в конечном итоге возвращается к последнему исполняющему потоку или к другому потоку, в зависимости от решения планировщика.
Как вы можете понять, каждое переключение контекста является результатом прерывания HW, но не каждое прерывание HW приводит к переключению контекста. Обычно вы должны воздерживаться от включения прерываний (вызывая функцию
__enable_interrupt
изнутри функцииtx_application_define
), поскольку процедура Thread-kernel-enter проверяет это непосредственно перед тем, как войти в цикл планирования.