ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
240376 Топик полностью
mazur (23.02.2011 09:16 - 10:09, просмотров: 173) ответил maik-vs на Речь шла о "добиться максимальной скорости".
Хм, я человек адекватный и справедливый. Легко признаю свои ошибки. И не зацикливаюсь на каких-то идеях, как бы они мне не нравились. Если в этих идеях есть ошибки. Конечно же, мне еще расти и расти. Но и у вас я заметил несколько существенных моментов. Первый же, за который зацепился мой взгляд, инструкция sbiw допускает максимальное число 64. Второй, что-то скромненько вы преподали cp2i Xh,Xl,(SPI_RECEIVE_BUFFER+SPI_RECEIVE_BUFFER_LENGTH) 4 инструкции, 4 такта. Хотя, я и не знаю, что там у вас в этом макросе. Но предварительные догадки таковы. Приведенный вами код только для одного случая. Если пакеты всегда одинаковы. А если они разные? Потому я и ввел счетчик байтов в пакете. Хорошо, все равно у меня у меня практически всегда остаются неиспользуемые регистры. Задействуем один как счетчик байтов SPI. Еще один для сравнения. В любом случае, вам спасибо, я взял на заметку ваши замечания. Переделал несколько задач с учетом приведенного принципа. clr SPI_CNT_BYTES ldi r16,3 mov SPI_BYTES_LENGHT,r16 SPI_Transfer_Int_Init lds r16,SPI_TRANSFER_BUFFER out SPDR,r16 ;========================================================================= SPI_Transfer_Int: push r16 in r16,SREG push r16 push XL push XH ldix SPI_RECEIVE_BUFFER addw X,SPI_CNT_BYTES,RCLR in r16,SPDR st X+,r16 inc SPI_CNT_BYTES cp SPI_CNT_BYTES,SPI_BYTES_LENGHT brsh SPI_Transfer_Int_Off addiw X,(SPI_TRANSFER_BUFFER-SPI_RECEIVE_BUFFER) ld r16,X out SPDR,r16 rjmp SPI_Transfer_Int_End SPI_Transfer_Int_Off: in r16,SPCR cbr r16,1<<SPIE out SPCR,r16 cbr FLAGS,1<<SPITC_FLG SPI_Transfer_Int_End: pop XH pop XL pop r16 out SREG,r16 pop r16 reti ;========================================================================= 29 команд. Это уже не 42 команды, как прежде.