STM32 - RTOS - максимальный размер стека - PullRequest
0 голосов
/ 14 октября 2018

Я использую STM32F103R8T6 с ОСРВ с 2 потоками

osThreadDef(ManagerTask, ManagerThread, osPriorityNormal, 0, 128);
  ManagerTaskHandle = osThreadCreate(osThread(ManagerTask), NULL);
  osThreadDef(RFIDTask, RFIDThread, osPriorityNormal, 0, 256);
  RFIDTaskHandle = osThreadCreate(osThread(RFIDTask), NULL);

, когда я пытаюсь дать любому потоку размер стека> 512, ни одна из задач не запускается, но при использовании 128 и 256 какВ приведенном выше примере все в порядке.

Итак, как узнать максимальный общий размер стека, который я могу выделить для своих потоков?

в моей конфигурации RTOS

#define configMINIMAL_STACK_SIZE                 ((uint16_t)128)
#define configTOTAL_HEAP_SIZE                    ((size_t)3072)

1 Ответ

0 голосов
/ 19 октября 2018

Если вы используете FreeRTOS , помните, что значение размера стека в словах не в байтах!Но configTOTAL_HEAP_SIZE в байтах!

В этих условиях:

  • TaskA 512 слов = 2048b
  • TaskB 128 слов = 512b
  • Всего иметь = 2560b

Почти 3072 :), поэтому, если вы не используете другие объекты, это будет работать, но если вы увеличите стек или будете использовать дополнительные объекты, куча будет исчерпана

Источник: https://www.freertos.org/a00125.html

...