Re: GCC sloučení do správného typu

Jindrich Fucik fulda na seznam.cz
Čtvrtek Říjen 7 09:59:15 CEST 2021


Dne 7.10.2021 v 9:24 Jindroush napsal(a):
> On 07.10.2021 9:03, Jindrich Fucik wrote:
>> mám tu jednu takovou spíš akademickou otázku. Nejprve popíšu 
>> prostředí. Hardware je ESP8266, programovaný v Arduino IDE, takže 
>> překladač je GCC.
>>
>> ESP je připojeno sériovou linkou do zařízení, které komunikuje 
>> sedmibitově. zařízení je založeno na 8bit intel platformě, data jsou 
>> tedy integery 16 bit (znaménkové). Při posílání se nejprve posílá MSB, 
>> první dva bity, pak prostředních 7 a pak posledních 7 LSB. Data přečtu 
>> jako pole "byte" (což je jen alias k unsigned char). Pokud se pokusím 
>> to rozepsat po bitech tak je to takto:
>>
>> precteno byte[3]
>> |0 0 0 0  0 0 D15 D14| |0 D13 D12 D11  D10 D9 D8 D7| |0 D6 D5 D4 D3 D2 
>> D1 D0|
>>
>> A teď otázka - jak nejefektivněji na tom ESP poskládat zpátky int, 
>> který zachová znaménko? 
> 
> pokud mate int16_t na tom esp, tak asi nejak jako, pokud je zajisteno, 
> ze to, co jste vyse napsal jako '0' je vzdy 0.
> int16_t res = ( precteno[0] << 14 ) || ( precteno[1]) << 7 ) || 
> precteno[2];
> Netusim samozrejme, jak drahy je na takovem procesoru shift a v jak 
> 'dlouhe' smycce to je.
> 

To je právě to, co je na mé otázce akademické. Takhle od boku to napsat 
je jednoduché, ale jestli je to ta nejlepší cesta? Jestli se třeba 
nevyplatí ten int16_t rozkládat na dva chary a naplnit je samostatně?


Další informace o konferenci Hw-list