ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
1020549 Топик полностью
Гyдвин, волшебник (24.07.2020 10:24, просмотров: 709) ответил SciFi на В студии не хватает кода. Там запросто может быть два определения структуры -- с packed и без.
Вот суть: 
#pragma pack(1)
__align(4) struct IH{                //*************** Äëÿ EEPROM 2 ñòð) ****************************
U16      my_id;          // ID êîìáàéíà, ïðèâÿçàííûé èç äàò÷èêà
U8       type_sens;      // òèï 1 - êîìáàéí, 2 - áóíêåð
U32      conag;          // êîíòðàãåíò (4 ñèìâîëà / U32)
U8       fl_card;        // ôëàã ðàçðåøåíèÿ âûãðóçêè êàðòîé.  Ñèìâîë 1 - ðàçðåøåíî, 0 - íåò
U8       fl_rd;          // ôëàã "Òîëüêî ÷òåíèå ëîãà" (1) 0 - ðàçðåøåíî âñå
U8       fl_zero;        // ôëàã ðàçðåøåíû ïóñòûå âûãðóçêè (1) 0 - çàïðåùåíû ïóñòûå âûãðóçêè
U8       conb_nunb;      // Êîëè÷åñòâî êîìáàéíîâ äëÿ îäíîâðåìåííîé âûãðóçêè
S8       rssi_index;     // 0..9 èíäåêñ â òàáëèöå.  Ãðàíèöà RSSI beacon  äëÿ ïðèíÿòèÿ ðåøåíèÿ î åãî ïðèåìå {-95,-90,-85,-80,-75,-70,-65,-60,-55,-50}; // 0..9 // Signed Char!
U32      conag2;         // äîïîëíèòåëüíûé êîíòðàãåíò (4 ñèìâîëà / U32)
}IH;    // (âñåãî 16 áàéò. ****************************** Äëÿ 2 ñòðàíèöû eeprom) ****************************

Если я беру указатель 16 или 32 битного поля структуры и явно привожу к void * или U8 *

memcpy((void*)&IH.conag,(void*)&buffer[32],(4+2+7));

memcpy((void*)&IH.my_id,(void*)&buffer[32],(4+2+7));

в memcpy() вызывается __aeabi_memcpy4 (попытка выкружить что-то с быстродействием)


Если я беру указатель 8 битного поля структуры и явно привожу к void * или U8 *

memcpy((void*)&IH.type_sens,(void*)&buffer[32],(4+2+7));

в memcpy() вызывается __aeabi_memcpy (стандартная "побайтная" функция )



Считаю это косяком, ибо нефуй плодить отсебятину....