То есть, получается, проблема в том, что AVR 8 битный и его слово в памяти = байту, а 32 битный. и не может писать лонг в последовательные байты, если пересекается граница 32 битного слова? то есть, если заменить
*(long*)tokenOut = (long)val;
на побайтовую запись в то же самое место, то все...