и ещё об оптимизации... строка
unsigned char string[]="Hello World\n";

если string не глобальная а объявленна в функции, то значит она auto и должна быть в стеке