Как ускорить преобразование int8 to char
- Войдите на сайт для отправки комментариев
Вс, 12/07/2015 - 12:07
Привет заметил что такой код работает очень медленно:
uint8_t Random_numbers(uint8_t a, uint8_t b)
{
return random(a, b);
}
char a[17]
a[8] = Random_numbers(0, 255);
Путём замеров, проб и ошибок понял, что дело тут не в считывании с аналоговой ножки, а имнно в присвоении uint8_t char'у.
Можно ли как-то ускорить это преобразование?
Как на счет доказательств? Каким именно образом производились измерения?
Ускорить - это до какого уровня?
Вот код преобразования int8_t в char:
2b4: 77 27 eor r23, r23 2b6: 67 fd sbrc r22, 7 2b8: 70 95 com r23Куда уж быстрее?
А это код random (фрагмент):
long random(long howsmall, long howbig) { e1e: cf 92 push r12 e20: df 92 push r13 e22: ef 92 push r14 e24: ff 92 push r15 e26: 6b 01 movw r12, r22 e28: 7c 01 movw r14, r24 if (howsmall >= howbig) { e2a: 62 17 cp r22, r18 e2c: 73 07 cpc r23, r19 e2e: 84 07 cpc r24, r20 e30: 95 07 cpc r25, r21 e32: 64 f4 brge .+24 ; 0xe4c <_Z6randomll+0x2e> return howsmall; } long diff = howbig - howsmall; e34: ca 01 movw r24, r20 e36: b9 01 movw r22, r18 e38: 6c 19 sub r22, r12 e3a: 7d 09 sbc r23, r13 e3c: 8e 09 sbc r24, r14 e3e: 9f 09 sbc r25, r15 return random(diff) + howsmall; e40: 0e 94 eb 06 call 0xdd6 ; 0xdd6 <_Z6randoml> e44: 6c 0d add r22, r12 e46: 7d 1d adc r23, r13 e48: 8e 1d adc r24, r14 e4a: 9f 1d adc r25, r15 } e4c: ff 90 pop r15 e4e: ef 90 pop r14 e50: df 90 pop r13 e52: cf 90 pop r12 e54: 08 95 ret