tn_start_system()

Функция предназначена для запуска системы. В функции создаются две системные задачи - задача таймера (timer) и задача простоя (idle), затем производится переключение контекста на задачу таймера. Возврат из функции не производится.

Вызов:

void tn_start_system (TN_UWORD *timer_task_stack,
                      TN_UWORD timer_task_stack_size,
                      TN_UWORD *idle_task_stack,
                      TN_UWORD idle_task_stack_size,
                      void     (*app_in_cb)(void),
                      void     (*cpu_int_en)(void),
                      void     (*idle_user_cb)(void)
                     );

Разрешен вызов:

Один раз в функции main()

Параметры функции:

timer_task_stack
указатель на стек задачи системного таймера
timer_task_stack_size
размер стека задачи системного таймера
idle_task_stack
указатель на стек системной задачи простоя
idle_task_stack_size
размер стека системной задачи простоя
app_in_cb
указатель на функцию инициализации приложения. Функция вызывается один раз при старте системы
cpu_int_en
указатель на функцию конфигурации и разрешения прерываний. Функция вызывается один раз при старте системы после вызова функции app_in_cb
idle_user_cb
указатель на функцию, которая периодически вызывается из системной задачи простоя


Возвращаемые значения:

нет

Пример вызова:

#define TMR_TASK_STACK_SIZE   128
#define IDL_TASK_STACK_SIZE    64
 
TN_UWORD stk_tmr_task[TMR_TASK_STACK_SIZE];
TN_UWORD stk_idl_task[IDL_TASK_STACK_SIZE];
 
void Appl_Init (void)
{
    /* инициализация приложения */
    /* инициализация системного таймера */
    /* создание пользовательских задач */
}
 
void Int_Init (void)
{
    /* разрешение прерывания от системного таймера */
    /* разрешение других прерываний */
}
 
void IDLE_func (void)
{
    /* */
}
 
int main (void)
{
    tn_start_system (stk_tmr_task,
                     TMR_TASK_STACK_SIZE,
                     stk_idl_task,
                     IDL_TASK_STACK_SIZE,
                     Appl_Init,
                     Int_Init,
                     IDLE_func
                    );
    return (0);
}



К списку сервисов