скрытое меню

Как работает FreeRTOS

Вот маленький кусок информации со стеком вызова функции vTaskSwitchContext :

Thread (IDLE)	
  PendSV_Handler() [port.c]
    vTaskSwitchContext() [tasks.c]

Как видно все банально начинается с обработчика прерывания PendSV_Handler .

IDLE - это служебный поток самой FreeRTOS , который создается неявно самым первым, еще до старта main.

Кстати стек функций очень легко посмотреть в окне например Debug среды Atollic True Studio , но надо сначала там остановиться как-то отладчиком . И все тайное начинает становиться явным.

фотка 1

Для своей работы freertos использует 3 прерывания :

SVC_Handler - прерывание , вызываемое программно, то есть из кода прямо и вызываем
PendSV_Handler
SysTick_Handler - прерывание от таймера (примерно раз в 1мс, на самом низком приоритете) , по которому идет обход ожидающих потоков по очереди

Вот они все здесь родимые в s файле :

g_pfnVectors:
  .word  _estack
  .word  Reset_Handler

  .word  NMI_Handler
  .word  HardFault_Handler
  .word  MemManage_Handler
  .word  BusFault_Handler
  .word  UsageFault_Handler
  .word  0
  .word  0
  .word  0
  .word  0
  .word  SVC_Handler
  .word  DebugMon_Handler
  .word  0
  .word  PendSV_Handler
  .word  SysTick_Handler