jenya7 0 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба Я создаю таск tMSGs = taskSpawn("MSGS", GRS_LRUS_MSG_TASK_PRIORITY, VX_FP_TASK, (PAGE_SIZE*2), (FUNCPTR) Messages_TaskEntryPoint, TASK_EMPTY_ARGS); Таск в качестае аргумента получает указатель на функцию void Messages_TaskEntryPoint() { //do some stuff Messages_Main(); } И потом крутиться в void Messages_Main() { while (1) { //do some stuff } } Но Messages_Main() вызывается из void Messages_TaskEntryPoint() - то есть Messages_TaskEntryPoint() остался на стаке. Так правильно делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 8 марта, 2018 Опубликовано 8 марта, 2018 · Жалоба Так правильно делать? Ну как бы не очень правильно, перерасход стека. Поставьте на Messages_Main подходящий модификатор для вашего компилятора, типа no_return, __task или что у Вас есть - скажите компилятору, что функция никогда не выйдет, и можно забить на сохранение всякого в стек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 11 марта, 2018 Опубликовано 11 марта, 2018 · Жалоба Ну как бы не очень правильно, перерасход стека. Поставьте на Messages_Main подходящий модификатор для вашего компилятора, типа no_return, __task или что у Вас есть - скажите компилятору, что функция никогда не выйдет, и можно забить на сохранение всякого в стек. понял. спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться