Собственно правильно сказано "не получается сделать оптимально - пиши в лоб"
Исходно проблема возникла при размещении в одном буфере памяти, различных пакетов, где и обвязка пакета различна и данные в разных местах лежат. При том что порядок байт в пакете отличен от процессорного.
Сообщение от pambaru
|
Возможно из-за преобразования uint16_t* в uint32_t*.
Если адрес в ptr_reg не кратен 4.
Попробуйте преобразовать в (__packed uint32_t*).
|
Раньше писал под 51 и с подобной траблой не сталкивался.
Пробовал по разному и #pragma pack(1) и (__packed uint32_t*), толку нет.
Проблему решил через
. То есть как то так:
do{cnt2-=2;
ptr0 = (uint8_t*)(ptr_reg+cnt2); //uint8_t* ptr0;
tmp = ptr0[0]; ptr0[0] = ptr0[1]; ptr0[1] = tmp;
//ptr1 = (uint16_t*)(ptr_reg+cnt2); //uint16_t* ptr1;
//*(__packed uint16_t*)ptr1 = swap16(*(__packed uint16_t*)ptr1);‹-крах
}while(cnt2);
где uint16_t swap16(uint16_t src){return (uint16_t) __REV16(src);}
комментированные строки работать отказались.
Вообщем всем откликнувшимся спасибо, сам бы еще два дня тупил.