Цитата(Сергей Борщ @ Oct 9 2007, 17:04)

В WinAVR нарвался на такое поведение - если объявить функцию naked, то компилятор выкидывает не только пролог, но и резервирование на стеке места для локальных переменных. В результате локальные переменные попадали в несуществующую память. Объявление функции с атрибутом noreturn существенно сократило пролог и оставило резервирование стека. Проверьте, возможно здесь подобная ситуация. Попробуйте заменить naked на noreturn.
Выкидывание резервирования в стеке места для локальных переменных, как-то сомнительно. Пролог эпилог ещё понятно, можно написать сохранение и восстановление всех регистров и будет работать, а как в ручную сделать резервирование места под локальные переменные я даже не представляю.
В доке к FreeRTOS упоминается именно naked, но я всё же проверю куда и как падают локальные переменные.
Цитата(Николай Z @ Oct 10 2007, 02:20)

В данном случае ход мысли должен быть иным - нет в описании прямого разрешения, значит это нельзя...
Также нет прямого описания где эти задачи можно создавать (может пропустил?).
Цитата
Насколько я понимаю этот артибут - naked - лишает задачу обычного для функции пролога-эпилога и не позволяет ей отложить место на стеке - это раз...
Задаче не нужен пролог и эпилог, OS занимается сохранением и восстановлением "порченных" регистров. А про "отложить место на стеке", я попробую проверить.
Цитата
Во вторых запуск задачи из другой задачи - мне кажется приведет к пролемам со стеком либо запускающей либо запущенной задачи...
Невижу причин возникновения проблем. Выделяется память из кучи под задачу (стек и т.п.) и ставиться в очередь на исполнение.
Цитата
По-любому запуск задачи - это совершенно иной процесс, чем вложенный вызов другой функции и тут надо быть осторожным...
Для полного анализа - надо прокрутить отладчиком как саму процедуру запуска задачи, так и все последующее - включая запуск кода задачи диспетчером и внимательно посмотреть - как идет работа со стеком - а потом уже осознанно делать то, что хочется и иметь точное представление о том как выделяется стековая память и куда она ляжет при таких вложенных запусках задач...
Смотрел как оно создаётся, память выделяется из кучи своим аналогом malloc, стек используется только для вызова функций создающих задачу.
Чтобы понять как диспетчер запускает задачи, надо его весь изучить. Я надеюсь он достаточно вылизан.
Цитата
В описании RTOS нет прямого разрешение на исползование подзадач из задачи и все примеры сделаны так, что задачи запускаются именно из майн-функции или диспетчером задач - следовательно правильная работа в вашем варианте - никем не гарантируется...
Работа из main тоже не гарантируется

В доке вообще не написано где эти задачи можно создавать.