Перейти к содержанию
    

Servus

Участник
  • Постов

    11
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Servus

  • День рождения 12.02.1985

Контакты

  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

1 304 просмотра профиля
  1. Для маленьких чисел проверял с помощью калькулятора, для больших - шифрованием/дешифрованием.
  2. Извините, скопировал не проверив. Все i должны быть int8_t. Проверил в железе: Контролер - ATMega 32 Частота - 3686400 На 32-х байтовых числах - 60 секунд. Результат правильный.
  3. Не помню где взял) Компилятор - WinAVR #include <avr/io.h> #define MesSize 16 void DivideByTwo ( uint8_t *x ) { //Divides multiple-precision integer x by 2 by shifting to right by one bit uint16_t d=0; uint8_t i; for ( i=0; i<MesSize; i++ ) { d |= x[i]; x[i] = ( ( d >> 1 ) & 0xFF ); if ( d & 0x01) d = 0x100; else d = 0; } } void aSubtract ( uint8_t *a, uint8_t *b ) { //Computes a = a - b uint8_t i; uint8_t borrow=0; int16_t d; for ( i=MesSize-1; i>=0; i-- ) { d = a[i] - b[i] - borrow; if ( d < 0 ) { d = d + 0x100; borrow = 1; } else borrow = 0; a[i] = d & 0xFF; } } void aModAdd ( uint8_t *a, uint8_t *b, uint8_t *m ) { //Computes a = (a + b) mod m uint8_t i; uint16_t d=0; uint8_t tmp=1; //1. Add a = a + b for ( i=MesSize-1; i>=0; i-- ) { d = a[i] + b[i] + d; a[i] = d & 0xFF; d >>= 8; } //2. If a > m then a = a - m while ( tmp ) { for ( i=0; i<MesSize; i++ ) { if ( a[i] != m[i] ) break; } if ( a[i] >= m[i] ) aSubtract( a, m ); else tmp=0; } } uint8_t aIsZero ( uint8_t *a ) { //Returns true if a is zero uint8_t i; for ( i=MesSize-1; i>=0; i-- ) { if ( a[i] != 0 ) return 0; } return 1; } void aModMult ( uint8_t *w, uint8_t *abX, uint8_t *abY, uint8_t *abMod ) { //Returns w = (x * y) mod m uint8_t x[MesSize]; uint8_t y[MesSize]; uint16_t nBits; uint8_t i; //1. Set w = 0, and temps x = abX, y = abY for ( i=0; i<MesSize; i++ ) { x[i] = abX[i]; y[i] = abY[i]; w[i] = 0; } //2. From LS bit to MS bit of X do: for ( nBits=MesSize*8; nBits>0; nBits-- ) { //2.1 if x is odd then w = (w + y) mod m if ( ( x[MesSize - 1] & 0x01 ) != 0 ) aModAdd ( w, y, abMod ); //2.2 x = x / 2 DivideByTwo ( x ); //2.3 if x != 0 then y = (y + y) mod m if ( aIsZero ( x ) ) break; aModAdd( y, y, abMod ); } } void aModExp ( uint8_t *a, uint8_t *abBase, uint8_t *abExponent, uint8_t *abModulus ) { //Computes a = b^e mod m and returns the result in a byte array as a VARIANT uint8_t e[MesSize]; uint8_t s[MesSize]; uint16_t nBits; uint8_t i; //Perform right-to-left binary exponentiation //1. Set A = 1, S = b //NB s and e are trashed so use copies for ( i=0; i<MesSize; i++ ) { s[i] = abBase[i]; e[i] = abExponent[i]; a[i] = 0; } a[MesSize-1] = 1; //2. While e != 0 do: for ( nBits=MesSize*8; nBits>1; nBits-- ) { //2.1 if e is odd then A = A*S mod m if ( ( e[MesSize - 1] & 0x01) != 0 ) aModMult ( a, a, s, abModulus ); //2.2 e = e / 2 DivideByTwo ( e ); //2.3 if e != 0 then S = S*S mod m if ( aIsZero( e ) ) break; aModMult( s, s, s, abModulus ); } } int main ( int argc, char *argv[] ) { uint8_t rsa_mod[MesSize]; uint8_t rsa_key[MesSize]; uint8_t in_mes[MesSize]; uint8_t out_mes[MesSize]; aModExp ( out_mes, in_mes, rsa_key, rsa_mod ); return 0; }
  4. http://www.masterkit.ru/main/set.php?code_id=23631 или http://www.kpsk.ru/pages/danfoss-03-08.html
  5. Wikipedia я читал. Проблема решена. В WT12 есть тестовый режим, в котром модуль передает сигнал определенной частоты, што мне подходит. Спасибо за ответ.
  6. Отдал устройство, в котором используется модуль Bluegiga WT12, на тестирование. Мне сказали что им нужно штоб устройство работало на одной частоте. В описании Bluetooth сказано что частота все время меняется. Возможно ли сделать так, штоб он работал на одной частоте?
  7. Добрый день. Есть проект для AVR написаный в WinAVR. Можно скомпилировать ево с командной строки? Можно скомпилировать проект написаный в WinAVR под Linux? Спасибо.
  8. Добрый день. Работаю с акселерометром LIS302DL. От нево мне нужно собирать даные каждую секунду и отслеживать "double click". С первым проблем нету, запускаю акселерометр с частотой 100Гц и каждую секунду читаю значения XYZ. А вот с "double click" есть одна проблема: при сборе даных срабатывает прерывание от "double click" (каждую секунду). Когда даные не читаю "double click" работает нормально. Инициализация акселерометра: CLICK_timelimit = 0xFF; CLICK_latency = 0x80; CLICK_window = 0xFF; CLICK_THSZ = 0x00 ); //Click Threshold on Z axis CLICK_SRC = 0x60; //Interrupt active, Double click on Z axis event CLICK_CFG = 0x20; //Enable interrupt generation on double click event on Z axis Ctrl_Reg3 = 0x87; Ctrl_Reg1 = 0x47; Возможно ли одновременно читать даные и отслеживать "double click"? Может я неправильно ево инициализирую, поделитесь кодом плз. Спасибо.
  9. Спасибо огромное, помогло. P.S. Но все же не ясно почему компилятор сам инлайнит функцию. Оптимизацию разную пробовал - эфект тот же.
  10. Есть следуюющий пример: #include <avr/io.h> #include <compat/ina90.h> #include <avr/interrupt.h> #define baudrate 23 #define UART_RX_BUFFER_SIZE 256 #define UART_TX_BUFFER_SIZE 256 #define UART_RX_BUFFER_MASK 255 #define UART_TX_BUFFER_MASK 255 #define F_ReceiveByte 0 #define F_TransmitData 1 static volatile uint8_t fl; static volatile uint8_t UART_RxBuf[uART_RX_BUFFER_SIZE]; static volatile uint8_t UART_RxHead; static volatile uint8_t UART_RxTail; static volatile uint8_t UART_TxBuf[uART_TX_BUFFER_SIZE]; static volatile uint8_t UART_TxHead; static volatile uint8_t UART_TxTail; void initUART ( void ) { UBRRH = ( uint8_t ) ( baudrate >> 8 ); UBRRL = ( uint8_t ) baudrate; UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) ); UART_RxTail = 0; UART_RxHead = 0; UART_TxTail = 0; UART_TxHead = 0; } void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; while ( tmphead == UART_TxTail ); UART_TxBuf[tmphead] = data; UART_TxHead = tmphead; UCSRB |= ( 1 << UDRIE ); } uint8_t ReceiveByte ( void ) { uint8_t tmptail; while ( UART_RxHead == UART_RxTail ); tmptail = ( UART_RxTail + 1 ) & UART_RX_BUFFER_MASK; UART_RxTail = tmptail; if(UART_RxHead == UART_RxTail) fl &= ~( 1 << F_ReceiveByte ); return UART_RxBuf[tmptail]; } SIGNAL ( USART_RXC_vect ) { uint8_t data; uint8_t tmphead; fl |= ( 1 << F_ReceiveByte ); data = UDR; tmphead = ( UART_RxHead + 1 ) & UART_RX_BUFFER_MASK; UART_RxHead = tmphead; UART_RxBuf[uART_RxHead] = data; } SIGNAL ( USART_UDRE_vect ) { uint8_t tmptail; if ( UART_TxHead != UART_TxTail ) { tmptail = ( UART_TxTail + 1 ) & UART_TX_BUFFER_MASK; UART_TxTail = tmptail; UDR = UART_TxBuf[tmptail]; } else { UCSRB &= ~( 1 << UDRIE ); } } int main ( void ) { initUART(); _SEI ( ); while ( 1 ) { TransmitByte(36); TransmitByte(37); TransmitByte(38); TransmitByte(39); TransmitByte(40); TransmitByte(41); TransmitByte(42); TransmitByte(43); } return 0; } После компиляции в WinAVR получаю: main.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .text 000002b8 00000000 00000000 00000074 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .bss 00000205 00800060 00800060 0000032c 2**0 ALLOC 2 .debug_aranges 00000020 00000000 00000000 0000032c 2**0 CONTENTS, READONLY, DEBUGGING 3 .debug_pubnames 00000069 00000000 00000000 0000034c 2**0 CONTENTS, READONLY, DEBUGGING 4 .debug_info 00000337 00000000 00000000 000003b5 2**0 CONTENTS, READONLY, DEBUGGING 5 .debug_abbrev 00000164 00000000 00000000 000006ec 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_line 00000348 00000000 00000000 00000850 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_frame 00000070 00000000 00000000 00000b98 2**2 CONTENTS, READONLY, DEBUGGING 8 .debug_str 000000fa 00000000 00000000 00000c08 2**0 CONTENTS, READONLY, DEBUGGING 9 .debug_loc 000000fa 00000000 00000000 00000d02 2**0 CONTENTS, READONLY, DEBUGGING 10 .debug_ranges 00000180 00000000 00000000 00000dfc 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 2a 00 jmp 0x54 ; 0x54 <__ctors_end> 4: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 8: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 10: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 14: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 18: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 1c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 20: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 24: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 28: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 2c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 30: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 34: 0c 94 83 00 jmp 0x106 ; 0x106 <__vector_13> 38: 0c 94 a7 00 jmp 0x14e ; 0x14e <__vector_14> 3c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 40: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 44: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 48: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 4c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 50: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt> 00000054 <__ctors_end>: 54: 11 24 eor r1, r1 56: 1f be out 0x3f, r1 ; 63 58: cf e5 ldi r28, 0x5F ; 95 5a: d8 e0 ldi r29, 0x08 ; 8 5c: de bf out 0x3e, r29 ; 62 5e: cd bf out 0x3d, r28 ; 61 00000060 <__do_copy_data>: 60: 10 e0 ldi r17, 0x00 ; 0 62: a0 e6 ldi r26, 0x60 ; 96 64: b0 e0 ldi r27, 0x00 ; 0 66: e8 eb ldi r30, 0xB8 ; 184 68: f2 e0 ldi r31, 0x02 ; 2 6a: 02 c0 rjmp .+4 ; 0x70 <.do_copy_data_start> 0000006c <.do_copy_data_loop>: 6c: 05 90 lpm r0, Z+ 6e: 0d 92 st X+, r0 00000070 <.do_copy_data_start>: 70: a0 36 cpi r26, 0x60 ; 96 72: b1 07 cpc r27, r17 74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop> 00000076 <__do_clear_bss>: 76: 12 e0 ldi r17, 0x02 ; 2 78: a0 e6 ldi r26, 0x60 ; 96 7a: b0 e0 ldi r27, 0x00 ; 0 7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start> 0000007e <.do_clear_bss_loop>: 7e: 1d 92 st X+, r1 00000080 <.do_clear_bss_start>: 80: a5 36 cpi r26, 0x65 ; 101 82: b1 07 cpc r27, r17 84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop> 86: 0e 94 cb 00 call 0x196 ; 0x196 <main> 8a: 0c 94 5a 01 jmp 0x2b4 ; 0x2b4 <_exit> 0000008e <__bad_interrupt>: 8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> 00000092 <initUART>: void initUART ( void ) { UBRRH = ( uint8_t ) ( baudrate >> 8 ); 92: 10 bc out 0x20, r1 ; 32 UBRRL = ( uint8_t ) baudrate; 94: 87 e1 ldi r24, 0x17 ; 23 96: 89 b9 out 0x09, r24 ; 9 UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) ); 98: 88 e9 ldi r24, 0x98 ; 152 9a: 8a b9 out 0x0a, r24 ; 10 UART_RxTail = 0; 9c: 10 92 62 01 sts 0x0162, r1 UART_RxHead = 0; a0: 10 92 61 01 sts 0x0161, r1 UART_TxTail = 0; a4: 10 92 64 02 sts 0x0264, r1 UART_TxHead = 0; a8: 10 92 63 02 sts 0x0263, r1 } ac: 08 95 ret 000000ae <TransmitByte>: void TransmitByte ( uint8_t data ) { ae: 28 2f mov r18, r24 uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; b0: 90 91 63 02 lds r25, 0x0263 b4: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); b6: 80 91 64 02 lds r24, 0x0264 ba: 98 17 cp r25, r24 bc: e1 f3 breq .-8 ; 0xb6 <TransmitByte+0x8> UART_TxBuf[tmphead] = data; be: e9 2f mov r30, r25 c0: f0 e0 ldi r31, 0x00 ; 0 c2: ed 59 subi r30, 0x9D ; 157 c4: fe 4f sbci r31, 0xFE ; 254 c6: 20 83 st Z, r18 UART_TxHead = tmphead; c8: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); cc: 55 9a sbi 0x0a, 5 ; 10 } ce: 08 95 ret 000000d0 <ReceiveByte>: uint8_t ReceiveByte ( void ) { uint8_t tmptail; while ( UART_RxHead == UART_RxTail ); d0: 90 91 61 01 lds r25, 0x0161 d4: 80 91 62 01 lds r24, 0x0162 d8: 98 17 cp r25, r24 da: d1 f3 breq .-12 ; 0xd0 <ReceiveByte> tmptail = ( UART_RxTail + 1 ) & UART_RX_BUFFER_MASK; dc: e0 91 62 01 lds r30, 0x0162 e0: ef 5f subi r30, 0xFF ; 255 UART_RxTail = tmptail; e2: e0 93 62 01 sts 0x0162, r30 if(UART_RxHead == UART_RxTail) e6: 90 91 61 01 lds r25, 0x0161 ea: 80 91 62 01 lds r24, 0x0162 ee: 98 17 cp r25, r24 f0: 29 f4 brne .+10 ; 0xfc <ReceiveByte+0x2c> fl &= ~( 1 << F_ReceiveByte ); f2: 80 91 60 00 lds r24, 0x0060 f6: 8e 7f andi r24, 0xFE ; 254 f8: 80 93 60 00 sts 0x0060, r24 return UART_RxBuf[tmptail]; fc: f0 e0 ldi r31, 0x00 ; 0 fe: ef 59 subi r30, 0x9F ; 159 100: ff 4f sbci r31, 0xFF ; 255 102: 80 81 ld r24, Z } 104: 08 95 ret 00000106 <__vector_13>: SIGNAL ( USART_RXC_vect ) { 106: 1f 92 push r1 108: 0f 92 push r0 10a: 0f b6 in r0, 0x3f ; 63 10c: 0f 92 push r0 10e: 11 24 eor r1, r1 110: 8f 93 push r24 112: 9f 93 push r25 114: ef 93 push r30 116: ff 93 push r31 uint8_t data; uint8_t tmphead; fl |= ( 1 << F_ReceiveByte ); 118: 80 91 60 00 lds r24, 0x0060 11c: 81 60 ori r24, 0x01 ; 1 11e: 80 93 60 00 sts 0x0060, r24 data = UDR; 122: 9c b1 in r25, 0x0c ; 12 tmphead = ( UART_RxHead + 1 ) & UART_RX_BUFFER_MASK; 124: 80 91 61 01 lds r24, 0x0161 128: 8f 5f subi r24, 0xFF ; 255 UART_RxHead = tmphead; 12a: 80 93 61 01 sts 0x0161, r24 UART_RxBuf[uART_RxHead] = data; 12e: 80 91 61 01 lds r24, 0x0161 132: e1 e6 ldi r30, 0x61 ; 97 134: f0 e0 ldi r31, 0x00 ; 0 136: e8 0f add r30, r24 138: f1 1d adc r31, r1 13a: 90 83 st Z, r25 } 13c: ff 91 pop r31 13e: ef 91 pop r30 140: 9f 91 pop r25 142: 8f 91 pop r24 144: 0f 90 pop r0 146: 0f be out 0x3f, r0 ; 63 148: 0f 90 pop r0 14a: 1f 90 pop r1 14c: 18 95 reti 0000014e <__vector_14>: SIGNAL ( USART_UDRE_vect ) { 14e: 1f 92 push r1 150: 0f 92 push r0 152: 0f b6 in r0, 0x3f ; 63 154: 0f 92 push r0 156: 11 24 eor r1, r1 158: 8f 93 push r24 15a: 9f 93 push r25 15c: ef 93 push r30 15e: ff 93 push r31 uint8_t tmptail; if ( UART_TxHead != UART_TxTail ) 160: 90 91 63 02 lds r25, 0x0263 164: 80 91 64 02 lds r24, 0x0264 168: 98 17 cp r25, r24 16a: 59 f0 breq .+22 ; 0x182 <__vector_14+0x34> { tmptail = ( UART_TxTail + 1 ) & UART_TX_BUFFER_MASK; 16c: e0 91 64 02 lds r30, 0x0264 170: ef 5f subi r30, 0xFF ; 255 UART_TxTail = tmptail; 172: e0 93 64 02 sts 0x0264, r30 UDR = UART_TxBuf[tmptail]; 176: f0 e0 ldi r31, 0x00 ; 0 178: ed 59 subi r30, 0x9D ; 157 17a: fe 4f sbci r31, 0xFE ; 254 17c: 80 81 ld r24, Z 17e: 8c b9 out 0x0c, r24 ; 12 180: 01 c0 rjmp .+2 ; 0x184 <__vector_14+0x36> } else { UCSRB &= ~( 1 << UDRIE ); 182: 55 98 cbi 0x0a, 5 ; 10 } } 184: ff 91 pop r31 186: ef 91 pop r30 188: 9f 91 pop r25 18a: 8f 91 pop r24 18c: 0f 90 pop r0 18e: 0f be out 0x3f, r0 ; 63 190: 0f 90 pop r0 192: 1f 90 pop r1 194: 18 95 reti 00000196 <main>: void initUART ( void ) { UBRRH = ( uint8_t ) ( baudrate >> 8 ); 196: 10 bc out 0x20, r1 ; 32 UBRRL = ( uint8_t ) baudrate; 198: 87 e1 ldi r24, 0x17 ; 23 19a: 89 b9 out 0x09, r24 ; 9 UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) ); 19c: 88 e9 ldi r24, 0x98 ; 152 19e: 8a b9 out 0x0a, r24 ; 10 UART_RxTail = 0; 1a0: 10 92 62 01 sts 0x0162, r1 UART_RxHead = 0; 1a4: 10 92 61 01 sts 0x0161, r1 UART_TxTail = 0; 1a8: 10 92 64 02 sts 0x0264, r1 UART_TxHead = 0; 1ac: 10 92 63 02 sts 0x0263, r1 } int main ( void ) { initUART(); _SEI ( ); 1b0: 78 94 sei { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; while ( tmphead == UART_TxTail ); UART_TxBuf[tmphead] = data; 1b2: b4 e2 ldi r27, 0x24 ; 36 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 1b4: a5 e2 ldi r26, 0x25 ; 37 1b6: 76 e2 ldi r23, 0x26 ; 38 1b8: 67 e2 ldi r22, 0x27 ; 39 1ba: 58 e2 ldi r21, 0x28 ; 40 1bc: 49 e2 ldi r20, 0x29 ; 41 1be: 3a e2 ldi r19, 0x2A ; 42 1c0: 2b e2 ldi r18, 0x2B ; 43 1c2: 90 91 63 02 lds r25, 0x0263 1c6: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 1c8: 80 91 64 02 lds r24, 0x0264 1cc: 98 17 cp r25, r24 1ce: e1 f3 breq .-8 ; 0x1c8 <main+0x32> UART_TxBuf[tmphead] = data; 1d0: e9 2f mov r30, r25 1d2: f0 e0 ldi r31, 0x00 ; 0 1d4: ed 59 subi r30, 0x9D ; 157 1d6: fe 4f sbci r31, 0xFE ; 254 1d8: b0 83 st Z, r27 UART_TxHead = tmphead; 1da: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 1de: 55 9a sbi 0x0a, 5 ; 10 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 1e0: 90 91 63 02 lds r25, 0x0263 1e4: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 1e6: 80 91 64 02 lds r24, 0x0264 1ea: 98 17 cp r25, r24 1ec: e1 f3 breq .-8 ; 0x1e6 <main+0x50> UART_TxBuf[tmphead] = data; 1ee: e9 2f mov r30, r25 1f0: f0 e0 ldi r31, 0x00 ; 0 1f2: ed 59 subi r30, 0x9D ; 157 1f4: fe 4f sbci r31, 0xFE ; 254 1f6: a0 83 st Z, r26 UART_TxHead = tmphead; 1f8: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 1fc: 55 9a sbi 0x0a, 5 ; 10 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 1fe: 90 91 63 02 lds r25, 0x0263 202: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 204: 80 91 64 02 lds r24, 0x0264 208: 98 17 cp r25, r24 20a: e1 f3 breq .-8 ; 0x204 <main+0x6e> UART_TxBuf[tmphead] = data; 20c: e9 2f mov r30, r25 20e: f0 e0 ldi r31, 0x00 ; 0 210: ed 59 subi r30, 0x9D ; 157 212: fe 4f sbci r31, 0xFE ; 254 214: 70 83 st Z, r23 UART_TxHead = tmphead; 216: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 21a: 55 9a sbi 0x0a, 5 ; 10 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 21c: 90 91 63 02 lds r25, 0x0263 220: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 222: 80 91 64 02 lds r24, 0x0264 226: 98 17 cp r25, r24 228: e1 f3 breq .-8 ; 0x222 <main+0x8c> UART_TxBuf[tmphead] = data; 22a: e9 2f mov r30, r25 22c: f0 e0 ldi r31, 0x00 ; 0 22e: ed 59 subi r30, 0x9D ; 157 230: fe 4f sbci r31, 0xFE ; 254 232: 60 83 st Z, r22 UART_TxHead = tmphead; 234: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 238: 55 9a sbi 0x0a, 5 ; 10 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 23a: 90 91 63 02 lds r25, 0x0263 23e: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 240: 80 91 64 02 lds r24, 0x0264 244: 98 17 cp r25, r24 246: e1 f3 breq .-8 ; 0x240 <main+0xaa> UART_TxBuf[tmphead] = data; 248: e9 2f mov r30, r25 24a: f0 e0 ldi r31, 0x00 ; 0 24c: ed 59 subi r30, 0x9D ; 157 24e: fe 4f sbci r31, 0xFE ; 254 250: 50 83 st Z, r21 UART_TxHead = tmphead; 252: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 256: 55 9a sbi 0x0a, 5 ; 10 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 258: 90 91 63 02 lds r25, 0x0263 25c: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 25e: 80 91 64 02 lds r24, 0x0264 262: 98 17 cp r25, r24 264: e1 f3 breq .-8 ; 0x25e <main+0xc8> UART_TxBuf[tmphead] = data; 266: e9 2f mov r30, r25 268: f0 e0 ldi r31, 0x00 ; 0 26a: ed 59 subi r30, 0x9D ; 157 26c: fe 4f sbci r31, 0xFE ; 254 26e: 40 83 st Z, r20 UART_TxHead = tmphead; 270: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 274: 55 9a sbi 0x0a, 5 ; 10 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 276: 90 91 63 02 lds r25, 0x0263 27a: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 27c: 80 91 64 02 lds r24, 0x0264 280: 98 17 cp r25, r24 282: e1 f3 breq .-8 ; 0x27c <main+0xe6> UART_TxBuf[tmphead] = data; 284: e9 2f mov r30, r25 286: f0 e0 ldi r31, 0x00 ; 0 288: ed 59 subi r30, 0x9D ; 157 28a: fe 4f sbci r31, 0xFE ; 254 28c: 30 83 st Z, r19 UART_TxHead = tmphead; 28e: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 292: 55 9a sbi 0x0a, 5 ; 10 void TransmitByte ( uint8_t data ) { uint8_t tmphead; tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; 294: 90 91 63 02 lds r25, 0x0263 298: 9f 5f subi r25, 0xFF ; 255 while ( tmphead == UART_TxTail ); 29a: 80 91 64 02 lds r24, 0x0264 29e: 98 17 cp r25, r24 2a0: e1 f3 breq .-8 ; 0x29a <main+0x104> UART_TxBuf[tmphead] = data; 2a2: e9 2f mov r30, r25 2a4: f0 e0 ldi r31, 0x00 ; 0 2a6: ed 59 subi r30, 0x9D ; 157 2a8: fe 4f sbci r31, 0xFE ; 254 2aa: 20 83 st Z, r18 UART_TxHead = tmphead; 2ac: 90 93 63 02 sts 0x0263, r25 UCSRB |= ( 1 << UDRIE ); 2b0: 55 9a sbi 0x0a, 5 ; 10 2b2: 87 cf rjmp .-242 ; 0x1c2 <main+0x2c> 000002b4 <_exit>: 2b4: f8 94 cli 000002b6 <__stop_program>: 2b6: ff cf rjmp .-2 ; 0x2b6 <__stop_program> Вопросы: - почему компилятор вставляет функции (TransmitByte) на место их вызова - как сделать штоб функции нормально вызывались P.S. Сори если вопрос дурацкий :laughing:
  11. Какую микросхему лучше использовать, эсли нужно связать две ATMega по UART на растоянии 30м? Скорость не ниже 19200. Сойдет ли MAX232?
×
×
  • Создать...