Цитата(yashok @ Apr 22 2011, 12:57)

При выделении или очистки памяти, а именно в макросе prvInsertBlockIntoFreeList, вылитаем на HardFault. Скорее всего получается ,что в каком-то блоке указатель на следующий свободный блок не указывает на какой-нибудь блок и не ревен нулю, просто содержет левое значение. Или в блоке портится размер блока.
Надо искать ошибку в вашем коде - сам по себе heap_2 исправен.
Цитата(yashok @ Apr 22 2011, 12:57)

Но очень не понятно как portBYTE_ALIGNMENT может влиять на sprintf.
Нарушается требование по выравниванию стека по границе двух слов.