Есть такой вот код:
Код
171 usb_buffer[usb_txtail++]=0x05;
\ 00000094 9160.... LDS R22, usb_txtail
\ 00000098 2F56 MOV R21, R22
\ 0000009A 9553 INC R21
\ 0000009C 9350.... STS usb_txtail, R21
\ 000000A0 E055 LDI R21, 5
\ 000000A2 E070 LDI R23, 0
\ 000000A4 01FB MOVW R31:R30, R23:R22
\ 000000A6 .... SUBI R30, LOW((-(usb_buffer) & 0xFFFF))
\ 000000A8 .... SBCI R31, (-(usb_buffer) & 0xFFFF) >> 8
\ 000000AA 8350 ST Z, R21
Изначально предполагалось, что так как usb_txtail unsigned char, то оно досчитает до 255 и начнет снова с нуля без всяких танцев с бубнами. А фиг...
Если после этого вставить строчку:
Код
if (usb_txtail == 255) usb_txtail = 0;
то все работает на ура. Если этой строчки нет - досчитав до 255, начинается какая-то свистопляска, оно выводит содержимое буфера еще раз...
Есть какие-нить идеи на эту тему?