diff --git a/.vs/hdlc_screen/v14/.atsuo b/.vs/hdlc_screen/v14/.atsuo new file mode 100644 index 0000000..f74bc15 Binary files /dev/null and b/.vs/hdlc_screen/v14/.atsuo differ diff --git a/Lсd_print/lcd.h b/Lсd_print/lcd.h deleted file mode 100644 index f798ae0..0000000 --- a/Lсd_print/lcd.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef Lsd_print_h -#define Lsd_print_h -#include "protocol.h" - -void Lcd_inciliation(); -void printLcd(struct message* decode_message); - -#endif \ No newline at end of file diff --git a/MyLCD/MyLCD.h b/MyLCD/MyLCD.h deleted file mode 100644 index f9d17f9..0000000 --- a/MyLCD/MyLCD.h +++ /dev/null @@ -1,22 +0,0 @@ - -#ifndef MYLCD_H_ -#define MYLCD_H_ - - -// ���������� ��� ���� -#include <avr/io.h> -#include <util/delay.h> -#include <stdlib.h> -#include <string.h> -#include <stdint.h> -#include <compat/twi.h> -#include <inttypes.h> -#include <avr/pgmspace.h> -#include <avr/interrupt.h> -#include <stdio.h> -#include "lcdpcf8574.h" -#include "pcf8574.h" -#include "i2cmaster.h" - - -#endif \ No newline at end of file diff --git a/MyLCD/lcdpcf8574.cpp b/MyLCD/lcdpcf8574.cpp deleted file mode 100644 index c5808d5..0000000 --- a/MyLCD/lcdpcf8574.cpp +++ /dev/null @@ -1,316 +0,0 @@ -#include "MyLCD.h" - -// задержеки через асемблер -#define lcd_e_delay() __asm__ __volatile__( "rjmp 1f\n 1:" ); -#define lcd_e_toggle() toggle_e() - - -volatile uint8_t dataport = 0; - -static void toggle_e(void); - -// сама реализация задержек -static inline void _delayFourCycles(unsigned int __count) -{ - if ( __count == 0 ) - __asm__ __volatile__( "rjmp 1f\n 1:" ); - else - __asm__ __volatile__ ( - "1: sbiw %0,1" "\n\t" - "brne 1b" - : "=w" (__count) - : "0" (__count) - ); -} - -// тупа оборачиваем функцию в макрос -#define delay(us) _delayFourCycles( ( ( 1*(F_CPU/4000) )*us)/1000 ) - -// переключение пина для начала записи команды -static void toggle_e(void) -{ - pcf8574_setoutputpinhigh(LCD_PCF8574_DEVICEID, LCD_E_PIN); - lcd_e_delay(); - pcf8574_setoutputpinlow(LCD_PCF8574_DEVICEID, LCD_E_PIN); -} - - -// отправка байта для контроллера LCD -static void lcd_write(uint8_t data,uint8_t rs) -{ - if (rs) //отправка данных (RS=1, RW=0) - dataport |= _BV(LCD_RS_PIN); - else // отпрака инструкций(RS=0, RW=0) - dataport &= ~_BV(LCD_RS_PIN); - dataport &= ~_BV(LCD_RW_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - - // отправка старшего полубайта - dataport &= ~_BV(LCD_DATA3_PIN); - dataport &= ~_BV(LCD_DATA2_PIN); - dataport &= ~_BV(LCD_DATA1_PIN); - dataport &= ~_BV(LCD_DATA0_PIN); - if(data & 0x80) dataport |= _BV(LCD_DATA3_PIN); - if(data & 0x40) dataport |= _BV(LCD_DATA2_PIN); - if(data & 0x20) dataport |= _BV(LCD_DATA1_PIN); - if(data & 0x10) dataport |= _BV(LCD_DATA0_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - lcd_e_toggle(); - - // отправка младшего полубайта - dataport &= ~_BV(LCD_DATA3_PIN); - dataport &= ~_BV(LCD_DATA2_PIN); - dataport &= ~_BV(LCD_DATA1_PIN); - dataport &= ~_BV(LCD_DATA0_PIN); - if(data & 0x08) dataport |= _BV(LCD_DATA3_PIN); - if(data & 0x04) dataport |= _BV(LCD_DATA2_PIN); - if(data & 0x02) dataport |= _BV(LCD_DATA1_PIN); - if(data & 0x01) dataport |= _BV(LCD_DATA0_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - lcd_e_toggle(); - - // завершаем передачу - dataport |= _BV(LCD_DATA0_PIN); - dataport |= _BV(LCD_DATA1_PIN); - dataport |= _BV(LCD_DATA2_PIN); - dataport |= _BV(LCD_DATA3_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); -} - -// чтение байта -static uint8_t lcd_read(uint8_t rs) -{ - uint8_t data; - - if (rs) // запись данных (RS=1, RW=0) - dataport |= _BV(LCD_RS_PIN); - else // запись инструкций (RS=0, RW=0) - dataport &= ~_BV(LCD_RS_PIN); - dataport |= _BV(LCD_RW_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - - pcf8574_setoutputpinhigh(LCD_PCF8574_DEVICEID, LCD_E_PIN); - lcd_e_delay(); - // чтение страшего полубайта - data = pcf8574_getoutputpin(LCD_PCF8574_DEVICEID, LCD_DATA0_PIN) << 4; - pcf8574_setoutputpinlow(LCD_PCF8574_DEVICEID, LCD_E_PIN); - - lcd_e_delay(); - - pcf8574_setoutputpinhigh(LCD_PCF8574_DEVICEID, LCD_E_PIN); - lcd_e_delay(); - // чтение младшего полубайта - data |= pcf8574_getoutputpin(LCD_PCF8574_DEVICEID, LCD_DATA0_PIN) &0x0F; - pcf8574_setoutputpinlow(LCD_PCF8574_DEVICEID, LCD_E_PIN); - - return data; -} - -// ждем пока ЖК освободится -static uint8_t lcd_waitbusy(void) - -{ - register uint8_t c; - - // ждем - while ( (c=lcd_read(0)) & (1<<LCD_BUSY)) {} - // задержка - delay(2); - // получаем адрес - return (lcd_read(0)); -} - - -// перемещение курсора по строкам -static inline void lcd_newline(uint8_t pos) -{ - register uint8_t addressCounter; - - -#if LCD_LINES==1 - addressCounter = 0; -#endif -#if LCD_LINES==2 - if ( pos < (LCD_START_LINE2) ) - addressCounter = LCD_START_LINE2; - else - addressCounter = LCD_START_LINE1; -#endif -#if LCD_LINES==4 - if ( pos < LCD_START_LINE3 ) - addressCounter = LCD_START_LINE2; - else if ( (pos >= LCD_START_LINE2) && (pos < LCD_START_LINE4) ) - addressCounter = LCD_START_LINE3; - else if ( (pos >= LCD_START_LINE3) && (pos < LCD_START_LINE2) ) - addressCounter = LCD_START_LINE4; - else - addressCounter = LCD_START_LINE1; -#endif - lcd_command((1<<LCD_DDRAM)+addressCounter); -} - -// служебная функция для отправки команд дисплею -void lcd_command(uint8_t cmd) -{ - lcd_waitbusy(); - lcd_write(cmd,0); -} - -// отправка байта на дисплей -void lcd_data(uint8_t data) -{ - lcd_waitbusy(); - lcd_write(data,1); -} - -// перемещение курсора по координатам -void lcd_gotoxy(uint8_t x, uint8_t y) -{ -#if LCD_LINES==1 - lcd_command((1<<LCD_DDRAM)+LCD_START_LINE1+x); -#endif -#if LCD_LINES==2 - if ( y==0 ) - lcd_command((1<<LCD_DDRAM)+LCD_START_LINE1+x); - else - lcd_command((1<<LCD_DDRAM)+LCD_START_LINE2+x); -#endif -#if LCD_LINES==4 - if ( y==0 ) - lcd_command((1<<LCD_DDRAM)+LCD_START_LINE1+x); - else if ( y==1) - lcd_command((1<<LCD_DDRAM)+LCD_START_LINE2+x); - else if ( y==2) - lcd_command((1<<LCD_DDRAM)+LCD_START_LINE3+x); - else - lcd_command((1<<LCD_DDRAM)+LCD_START_LINE4+x); -#endif -} - -// тырим координаты -int lcd_getxy(void) -{ - return lcd_waitbusy(); -} - -// очистка дисплея -void lcd_clrscr(void) -{ - lcd_command(1<<LCD_CLR); -} - -// вкл и откл подсветки -void lcd_led(uint8_t onoff) -{ - if(onoff) - dataport &= ~_BV(LCD_LED_PIN); - else - dataport |= _BV(LCD_LED_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); -} - -// курсов в начало координат -void lcd_home(void) -{ - lcd_command(1<<LCD_HOME); -} - -// отображение символа в текущей позиции курсора -void lcd_putc(char c) -{ - uint8_t pos; - - pos = lcd_waitbusy(); - if (c=='\n') - { - lcd_newline(pos); - } - else - { -#if LCD_WRAP_LINES==1 -#if LCD_LINES==1 - if ( pos == LCD_START_LINE1+LCD_DISP_LENGTH ) { - lcd_write((1<<LCD_DDRAM)+LCD_START_LINE1,0); - } -#elif LCD_LINES==2 - if ( pos == LCD_START_LINE1+LCD_DISP_LENGTH ) { - lcd_write((1<<LCD_DDRAM)+LCD_START_LINE2,0); - }else if ( pos == LCD_START_LINE2+LCD_DISP_LENGTH ){ - lcd_write((1<<LCD_DDRAM)+LCD_START_LINE1,0); - } -#elif LCD_LINES==4 - if ( pos == LCD_START_LINE1+LCD_DISP_LENGTH ) { - lcd_write((1<<LCD_DDRAM)+LCD_START_LINE2,0); - }else if ( pos == LCD_START_LINE2+LCD_DISP_LENGTH ) { - lcd_write((1<<LCD_DDRAM)+LCD_START_LINE3,0); - }else if ( pos == LCD_START_LINE3+LCD_DISP_LENGTH ) { - lcd_write((1<<LCD_DDRAM)+LCD_START_LINE4,0); - }else if ( pos == LCD_START_LINE4+LCD_DISP_LENGTH ) { - lcd_write((1<<LCD_DDRAM)+LCD_START_LINE1,0); - } -#endif - lcd_waitbusy(); -#endif - lcd_write(c, 1); - } -} - -// вывод строки на дисплей -void lcd_puts(const char *s) -{ - register char c; - - while ( (c = *s++) ) { - lcd_putc(c); - } -} - -// вывод строки из памяти -void lcd_puts_p(const char *progmem_s) -{ - register char c; - - while ( (c = pgm_read_byte(progmem_s++)) ) { - lcd_putc(c); - } -} - -// инициализация дисплея -void lcd_init(uint8_t dispAttr) -{ - #if LCD_PCF8574_INIT == 1 - //инициализация pcf - pcf8574_init(); - #endif - - dataport = 0; - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - - delay(16000); - - // первоначальная запись на ЖК-дисплей — 8 бит - dataport |= _BV(LCD_DATA1_PIN); // _BV(LCD_FUNCTION)>>4; - dataport |= _BV(LCD_DATA0_PIN); // _BV(LCD_FUNCTION_8BIT)>>4; - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - - // дрючим дисплей чтобы он начал работать - lcd_e_toggle(); - delay(4992); - lcd_e_toggle(); - delay(64); - lcd_e_toggle(); - delay(64); - - // переходим в 4 битный режим - dataport &= ~_BV(LCD_DATA0_PIN); - pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); - lcd_e_toggle(); - delay(64); - - - lcd_command(LCD_FUNCTION_DEFAULT); // настраиваем кол-во строк - lcd_command(LCD_DISP_OFF); // вырубаем дисплей - lcd_clrscr(); // чистим экран - lcd_command(LCD_MODE_DEFAULT); // запускаемся в стандартном режиме - lcd_command(dispAttr); // отправляем настройки -} diff --git a/MyLCD/pcf8574.cpp b/MyLCD/pcf8574.cpp deleted file mode 100644 index e93f3d8..0000000 --- a/MyLCD/pcf8574.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "MyLCD.h" -uint8_t pcf8574_pinstatus[PCF8574_MAXDEVICES]; - -// инициализация pcf -void pcf8574_init() { - #if PCF8574_I2CINIT == 1 - // инитим i2c - i2c_init(); - _delay_us(10); - #endif - uint8_t i = 0; - for(i=0; i<PCF8574_MAXDEVICES; i++) - pcf8574_pinstatus[i] = 0; - -} - -// получаем статус вывода -int8_t pcf8574_getoutput(uint8_t deviceid) { - int8_t data = -1; - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES)) { - data = pcf8574_pinstatus[deviceid]; - } - return data; -} - -// получаем статус пинов вывода -int8_t pcf8574_getoutputpin(uint8_t deviceid, uint8_t pin) { - int8_t data = -1; - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { - data = pcf8574_pinstatus[deviceid]; - data = (data >> pin) & 0b00000001; - } - return data; -} - -// настройка вывода -int8_t pcf8574_setoutput(uint8_t deviceid, uint8_t data) { - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES)) { - pcf8574_pinstatus[deviceid] = data; - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); - i2c_write(data); - i2c_stop(); - return 0; - } - return -1; -} - -// установить выходные контакты, заменить фактический статус устройства из pinstart для i2c -int8_t pcf8574_setoutputpins(uint8_t deviceid, uint8_t pinstart, uint8_t pinlength, int8_t data) { - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pinstart - pinlength + 1 >= 0 && pinstart - pinlength + 1 >= 0 && pinstart < PCF8574_MAXPINS && pinstart > 0 && pinlength > 0)) { - uint8_t b = 0; - b = pcf8574_pinstatus[deviceid]; - uint8_t mask = ((1 << pinlength) - 1) << (pinstart - pinlength + 1); - data <<= (pinstart - pinlength + 1); - data &= mask; - b &= ~(mask); - b |= data; - pcf8574_pinstatus[deviceid] = b; - //рестартим - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); - i2c_write(b); - i2c_stop(); - return 0; - } - return -1; -} - -// настройка пинов вывода -int8_t pcf8574_setoutputpin(uint8_t deviceid, uint8_t pin, uint8_t data) { - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { - uint8_t b = 0; - b = pcf8574_pinstatus[deviceid]; - b = (data != 0) ? (b | (1 << pin)) : (b & ~(1 << pin)); - pcf8574_pinstatus[deviceid] = b; - //рестартим - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); - i2c_write(b); - i2c_stop(); - return 0; - } - return -1; -} - -// установка высокого уровня на выходных пинах -int8_t pcf8574_setoutputpinhigh(uint8_t deviceid, uint8_t pin) { - return pcf8574_setoutputpin(deviceid, pin, 1); -} - -// установка низкого уровня на выходных пинах -int8_t pcf8574_setoutputpinlow(uint8_t deviceid, uint8_t pin) { - return pcf8574_setoutputpin(deviceid, pin, 0); -} - -// получение входных данных -int8_t pcf8574_getinput(uint8_t deviceid) { - int8_t data = -1; - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES)) { - i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_READ); - data = ~i2c_readNak(); - i2c_stop(); - } - return data; -} - -// получение входного контакта (высокий или низкий) -int8_t pcf8574_getinputpin(uint8_t deviceid, uint8_t pin) { - int8_t data = -1; - if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { - data = pcf8574_getinput(deviceid); - if(data != -1) { - data = (data >> pin) & 0b00000001; - } - } - return data; -} \ No newline at end of file diff --git a/MyLCD/twimaster.cpp b/MyLCD/twimaster.cpp deleted file mode 100644 index 2fad0d7..0000000 --- a/MyLCD/twimaster.cpp +++ /dev/null @@ -1,117 +0,0 @@ -#include "MyLCD.h" - -// инициализация интерфейса i2c -void i2c_init(void) -{ - // предделитель тактовой частоты равен 1 - TWSR = 0; - // рассчет скорости передачи данных - TWBR = ((F_CPU/SCL_CLOCK)-16)/2; -} - -// передача условия СТАРТ на шину -unsigned char i2c_start(unsigned char address) -{ - uint8_t twst; - - // отправка условия СТАРТ - TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); - // ожидание завершения передачи условия СТАРТ - while(!(TWCR & (1<<TWINT))); - // проверка значений регистра - twst = TW_STATUS & 0xF8; - if ( (twst != TW_START) && (twst != TW_REP_START)) return 1; - // отправка адреса устрой-ва - TWDR = address; - TWCR = (1<<TWINT) | (1<<TWEN); - // ожидание ответа от ведомого уст-ва - while(!(TWCR & (1<<TWINT))); - // проверка полученных значений - twst = TW_STATUS & 0xF8; - if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1; - - return 0; - -} - -// ждем, если устрой-во занято, а потом передаем условие СТАРТ на шину -void i2c_start_wait(unsigned char address) -{ - uint8_t twst; - - for(;;) - { - // отправка условия СТАРТ - TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); - // ожидание завершения передачи условия СТАРТ - while(!(TWCR & (1<<TWINT))); - // проверка значений регистра - twst = TW_STATUS & 0xF8; - if ( (twst != TW_START) && (twst != TW_REP_START)) continue; - // отправка адреса устрой-ва - TWDR = address; - TWCR = (1<<TWINT) | (1<<TWEN); - // ожидание ответа от ведомого уст-ва - while(!(TWCR & (1<<TWINT))); - // проверка занято ли ведомое уст-во - twst = TW_STATUS & 0xF8; - if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) ) - { - // устройство занято, отправьте условие остановки для прекращения операции записи - TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); - // ждем освобождения шины - while(TWCR & (1<<TWSTO)); - continue; - } - break; - } -} - -// тупа повторяем условие СТАРТ -unsigned char i2c_rep_start(unsigned char address) -{ - return i2c_start(address); -} - -// передача условия СТОП на шину -void i2c_stop(void) -{ - // отправка условия СТОП - TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); - // ждем выполнения условия остановки - while(TWCR & (1<<TWSTO)); -} - -// отправка данных, если функция вернет 0, то все успешно, иначе нет -unsigned char i2c_write( unsigned char data ) -{ - uint8_t twst; - - // отправляем данные на уст-во - TWDR = data; - TWCR = (1<<TWINT) | (1<<TWEN); - // ждем завершения передачи - while(!(TWCR & (1<<TWINT))); - // записываем ответ от ведомого уст-ва - twst = TW_STATUS & 0xF8; - if( twst != TW_MT_DATA_ACK) return 1; - return 0; -} - -// читаем данные и продолжаем вещание -unsigned char i2c_readAck(void) -{ - TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA); - while(!(TWCR & (1<<TWINT))); - - return TWDR; -} - -// читаем данные и после их получения передаем услови СТОП -unsigned char i2c_readNak(void) -{ - TWCR = (1<<TWINT) | (1<<TWEN); - while(!(TWCR & (1<<TWINT))); - - return TWDR; -} diff --git a/UART/uart.c b/UART/uart.c deleted file mode 100644 index 1b31d04..0000000 --- a/UART/uart.c +++ /dev/null @@ -1,61 +0,0 @@ -#include <avr/io.h> -#include <avr/interrupt.h> -#include <stdint.h> -#include <string.h> -#include "circular_buf.h" -#include "uart.h" - -struct circular_buffer uartRxBuffer; -struct circular_buffer uartTxBuffer; - -void UART_init(void) { - UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0) | (1<<TXCIE0) | (1 << UDRIE0); // прерывание по приему и передаче - UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); - UBRR0H = 0; - UBRR0L = 103; -} - -void UART_send(uint8_t* data, size_t length) { - for (size_t i = 0; i < length; i++) { - if (!buffer_full(&uartTxBuffer)) { - write_buffer(&uartTxBuffer, data[i]); - } else { - break; // если буфер передачи заполнен, то отправка прерывается - } - } - UCSR0B |= (1 << TXCIE0); // включаем прерывание по завершении передачи -} - -// Получение данных из буфера -int UART_receive(uint8_t* data, size_t length) { - char overflow = 0; // Флаг переполнения, который устанавливается, если превышен размер массива - uint32_t byteCount = 0; // Счетчик байтов, принятых из буфера приема - // Пока буфер приема не пуст и не превышен лимит длины массива, - // функция продолжает читать байты из буфера и сохранять их в массив data. - while (!buffer_empty(&uartRxBuffer) && byteCount < length) { - int reader = read_buffer(&uartRxBuffer); // Прием и запись символа в переменную - data[byteCount] = reader; // Запись в массив с индексом byteCount - byteCount++; - } - // Проверка переполнения - if (byteCount > length) { - overflow = 1; - } - return overflow ? -1 : byteCount; // Возвращает количество успешно принятых байт или -1 в случае переполнения -} - -// прерывание по завершению приема -ISR(USART_RX_vect) { - uint8_t data = UDR0; // читаем из регистра UDR0 - if (!buffer_full(&uartRxBuffer)) { - write_buffer(&uartRxBuffer, data);// записываем символ в буфер приема - } -} - -ISR(USART_TX_vect) { - if (!buffer_empty(&uartTxBuffer)) { - UDR0 = read_buffer(&uartTxBuffer); - } else { - UCSR0B &= ~(1 << TXCIE0); // отключаем прерывание, когда все данные отправлены - } -} \ No newline at end of file diff --git a/UART/uart.h b/UART/uart.h deleted file mode 100644 index 99fd06c..0000000 --- a/UART/uart.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef UART_H -#define UART_H -#include <stdint.h> -#include <stddef.h> - -#define F_CPU 16000000 - -void UART_init(void); -void UART_send(uint8_t* data, size_t length); -int UART_receive(uint8_t* data, size_t length); - - -#endif /* UART_H */ \ No newline at end of file diff --git a/hdlc/main.c b/hdlc/main.c deleted file mode 100644 index bf69aa9..0000000 --- a/hdlc/main.c +++ /dev/null @@ -1,181 +0,0 @@ -//#include "hdlc.h" -#include "stdio.h" -#include "client.h" - -int main(){ - struct Client hdlc; - init_hdlc_client(&hdlc, 200); - hdlc_connect(&hdlc); - uint8_t buffer_for_ex[20]; - uint8_t fake_buffer; - hdlc_get_raw_frame(&hdlc, buffer_for_ex, sizeof(buffer_for_ex)); - - for (int i = 0; i < 200; i++){ - int z = hdlc_timeout_handler(&hdlc, 1); - hdlc_decode_recived_raw_data(&hdlc, &fake_buffer, sizeof(fake_buffer), 0, 0); - } - - hdlc_get_raw_frame(&hdlc, buffer_for_ex, sizeof(buffer_for_ex)); - int i = hdlc_decode_recived_raw_data(&hdlc, buffer_for_ex, sizeof(buffer_for_ex), 0, 0); - if (i < 0){ - printf("err connect: %d\n", i); - } - - uint8_t data[] = {32, 233, 132, 102, 12, 12, 44, 121, 34}; - hdlc_send_data(&hdlc, data, sizeof(data)); - uint8_t buffer_for_ex_data[20]; - - hdlc_get_raw_frame(&hdlc, buffer_for_ex_data, 20); - - //printf("first_ex:%d\n", buffer_for_ex_data[0]); - uint8_t recivedData[] = {}; - size_t len_recived_data = 0; - int x = hdlc_decode_recived_raw_data(&hdlc, buffer_for_ex_data, 20, recivedData, &len_recived_data); - if (x < 0){ - printf("err send: %d\n", x); - } - printf("recived data: %d\n", recivedData[1]); - - - - -// uint8_t send[64]; -// uint8_t buffer[134]; -// for (int i = 0; i < sizeof(send); i++) { -// send[i] = (uint8_t) (rand() % 0x70); -// } -// send_data(&hdlc, send, sizeof(send_data)); -// //get_frame(&hdlc, buffer, sizeof(buffer), send_data, sizeof(send_data)); -// -// hdlc_get_raw_data(&hdlc, buffer, sizeof(buffer)); - - // test 1 - -// int ret; -// uint8_t frame_data[8], recv_data[8]; -// size_t i, frame_length = 0, recv_length = 0; -// hdlc_control_t control_send, control_recv; - -// // Run through the supported sequence numbers (3-bit) -// for (i = 0; i <= 7; i++) { -// // Initialize the control field structure with frame type and sequence number -// control_send.frame = HDLC_FRAME_ACK; -// control_send.seq_no = i; -// -// // Create an empty frame with the control field information -// ret = hdlc_frame_data(&control_send, NULL, 0, frame_data, &frame_length); -// -// // Get the data from the frame -// ret = hdlc_get_data(&control_recv, frame_data, frame_length, recv_data, -// &recv_length); -// -// // Result should be frame_length minus start flag to be discarded and no bytes received -// if(ret != (int )frame_length - 1){ -// printf("err"); -// } -// } -// if (recv_length != 0){ -// printf("err2"); -// } -// -// if (control_send.frame != control_recv.frame){ -// printf("err3"); -// } -// -// if (control_send.seq_no != control_recv.seq_no){ -// printf("err4"); -// } - - // test 2 - - // Run through the supported sequence numbers (3-bit) -// for (i = 0; i <= 7; i++) { -// // Initialize the control field structure with frame type and sequence number -// control_send.frame = HDLC_FRAME_DATA; -// control_send.seq_no = i; -// -// char* input = "311"; -// uint8_t data = (uint8_t)atoi(input); -// -// // Create an empty frame with the control field information -// ret = hdlc_frame_data(&control_send, &data, 3, frame_data, &frame_length); -// if (ret != 0){ -// printf("err123\n"); -// } -// -// // Get the data from the frame -// ret = hdlc_get_data(&control_recv, frame_data, frame_length, recv_data, -// &recv_length); -// -// // Result should be frame_length minus start flag to be discarded and no bytes received -// if(ret != (int )frame_length - 1){ -// printf("err333\n"); -// } -// if (recv_length != 0){ -// printf("err2\n"); -// } -// -// // Verify the control field information -// if (control_send.frame != control_recv.frame){ -// printf("err3\n"); -// } -// -// if (control_send.seq_no != control_recv.seq_no){ -// printf("err4\n"); -// } -// } - -// int ret; -// hdlc_control_t control; -// uint8_t send_data[512], frame_data[530], recv_data[530]; -// size_t i, frame_length = 0, recv_length = 0, buf_length = 16; -// -// // Initialize data to be send with random values (up to 0x70 to keep below the values to be escaped) -// for (i = 0; i < sizeof(send_data); i++) { -// send_data[i] = (uint8_t) (rand() % 0x70); -// } -// -// // Initialize control field structure and create frame -// control.frame = HDLC_FRAME_DATA; -// ret = hdlc_frame_data(&control, send_data, sizeof(send_data), frame_data, -// &frame_length); -// -// // Check that frame length is maximum 2 bytes larger than data due to escape of FCS value -// if(frame_length >= ((sizeof(send_data) + 6) + 2)){ -// printf("1"); -// } -// if(ret != 0){ -// printf("2"); -// } -// -// // Run though the different buffers (simulating decode of buffers from UART) -// for (i = 0; i <= sizeof(send_data); i += buf_length) { -// // Decode the data -// ret = hdlc_get_data(&control, &frame_data[i], buf_length, recv_data, -// &recv_length); -// -// printf("%zu: %s\n", i, recv_data); -// -// if (i < sizeof(send_data)) { -// // All chunks until the last should return no message and zero length -// if (ret != -ENOMSG){ -// printf("3"); -// } -// if (recv_length != 0){ -// printf("1231"); -// } -// } else { -// if (ret > 7){ -// printf("332"); -// } -// if (recv_length != sizeof(send_data)){ -// printf("88888"); -// } -// // The last chunk should return max 6 frame bytes - 1 start flag sequence byte + 2 byte for the possible -// // escaped FCS = 7 bytes -//// BOOST_CHECK(ret <= 7); -//// BOOST_CHECK_EQUAL(recv_length, sizeof(send_data)); -// //printf("5"); -// } -// } -} \ No newline at end of file diff --git a/hdlc_screen.atsln b/hdlc_screen.atsln new file mode 100644 index 0000000..012050c --- /dev/null +++ b/hdlc_screen.atsln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Atmel Studio Solution File, Format Version 11.00 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "hdlc_screen", "hdlc_screen\hdlc_screen.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|AVR = Debug|AVR + Release|AVR = Release|AVR + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR + {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR + {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR + {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/hdlc_screen/.gitignore b/hdlc_screen/.gitignore new file mode 100644 index 0000000..14484fa --- /dev/null +++ b/hdlc_screen/.gitignore @@ -0,0 +1,14 @@ +hdlc1.c +hdlc1.h +hdlc_frame.c +hdlc_frame.h +main1.c +uart.c +uart.h + +!./hdlc +/.idea/Display_Avr_3.iml +/.idea/.gitignore +/.idea/vcs.xml +/.idea/modules.xml +/CMakeLists.txt diff --git a/hdlc_screen/Debug/LCD/Lcd_print.d b/hdlc_screen/Debug/LCD/Lcd_print.d new file mode 100644 index 0000000..ff5c8f2 --- /dev/null +++ b/hdlc_screen/Debug/LCD/Lcd_print.d @@ -0,0 +1,81 @@ +LCD/Lcd_print.d LCD/Lcd_print.o: ../LCD/Lcd_print.c ../LCD/lcd_headers.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \ + ../LCD/lcdpcf8574.h ../LCD/pcf8574.h ../LCD/i2cmaster.h ../LCD/lcd.h + +../LCD/lcd_headers.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: + +../LCD/lcdpcf8574.h: + +../LCD/pcf8574.h: + +../LCD/i2cmaster.h: + +../LCD/lcd.h: diff --git a/hdlc_screen/Debug/LCD/Lcd_print.o b/hdlc_screen/Debug/LCD/Lcd_print.o new file mode 100644 index 0000000..f7cbbd1 Binary files /dev/null and b/hdlc_screen/Debug/LCD/Lcd_print.o differ diff --git a/hdlc_screen/Debug/LCD/lcdpcf8574.d b/hdlc_screen/Debug/LCD/lcdpcf8574.d new file mode 100644 index 0000000..5154933 --- /dev/null +++ b/hdlc_screen/Debug/LCD/lcdpcf8574.d @@ -0,0 +1,80 @@ +LCD/lcdpcf8574.d LCD/lcdpcf8574.o: ../LCD/lcdpcf8574.c \ + ../LCD/lcd_headers.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \ + ../LCD/lcdpcf8574.h ../LCD/pcf8574.h ../LCD/i2cmaster.h + +../LCD/lcd_headers.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: + +../LCD/lcdpcf8574.h: + +../LCD/pcf8574.h: + +../LCD/i2cmaster.h: diff --git a/hdlc_screen/Debug/LCD/lcdpcf8574.o b/hdlc_screen/Debug/LCD/lcdpcf8574.o new file mode 100644 index 0000000..1a577c1 Binary files /dev/null and b/hdlc_screen/Debug/LCD/lcdpcf8574.o differ diff --git a/hdlc_screen/Debug/LCD/pcf8574.d b/hdlc_screen/Debug/LCD/pcf8574.d new file mode 100644 index 0000000..9737a21 --- /dev/null +++ b/hdlc_screen/Debug/LCD/pcf8574.d @@ -0,0 +1,79 @@ +LCD/pcf8574.d LCD/pcf8574.o: ../LCD/pcf8574.c ../LCD/lcd_headers.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \ + ../LCD/lcdpcf8574.h ../LCD/pcf8574.h ../LCD/i2cmaster.h + +../LCD/lcd_headers.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: + +../LCD/lcdpcf8574.h: + +../LCD/pcf8574.h: + +../LCD/i2cmaster.h: diff --git a/hdlc_screen/Debug/LCD/pcf8574.o b/hdlc_screen/Debug/LCD/pcf8574.o new file mode 100644 index 0000000..cd5ea5f Binary files /dev/null and b/hdlc_screen/Debug/LCD/pcf8574.o differ diff --git a/hdlc_screen/Debug/LCD/twimaster.d b/hdlc_screen/Debug/LCD/twimaster.d new file mode 100644 index 0000000..b441c06 --- /dev/null +++ b/hdlc_screen/Debug/LCD/twimaster.d @@ -0,0 +1,79 @@ +LCD/twimaster.d LCD/twimaster.o: ../LCD/twimaster.c ../LCD/lcd_headers.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \ + ../LCD/lcdpcf8574.h ../LCD/pcf8574.h ../LCD/i2cmaster.h + +../LCD/lcd_headers.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\compat\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\twi.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\pgmspace.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: + +../LCD/lcdpcf8574.h: + +../LCD/pcf8574.h: + +../LCD/i2cmaster.h: diff --git a/hdlc_screen/Debug/LCD/twimaster.o b/hdlc_screen/Debug/LCD/twimaster.o new file mode 100644 index 0000000..b8e0201 Binary files /dev/null and b/hdlc_screen/Debug/LCD/twimaster.o differ diff --git a/hdlc_screen/Debug/Makefile b/hdlc_screen/Debug/Makefile new file mode 100644 index 0000000..8fbb4dd --- /dev/null +++ b/hdlc_screen/Debug/Makefile @@ -0,0 +1,251 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +SHELL := cmd.exe +RM := rm -rf + +USER_OBJS := + +LIBS := +PROJ := + +O_SRCS := +C_SRCS := +S_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +ASM_SRCS := +PREPROCESSING_SRCS := +OBJS := +OBJS_AS_ARGS := +C_DEPS := +C_DEPS_AS_ARGS := +EXECUTABLES := +OUTPUT_FILE_PATH := +OUTPUT_FILE_PATH_AS_ARGS := +AVR_APP_PATH :=$$$AVR_APP_PATH$$$ +QUOTE := " +ADDITIONAL_DEPENDENCIES:= +OUTPUT_FILE_DEP:= +LIB_DEP:= +LINKER_SCRIPT_DEP:= + +# Every subdirectory with source files must be described here +SUBDIRS := \ +../hdlc \ +../LCD \ +../UART \ +../protocol + + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../hdlc/client.c \ +../hdlc/fcs.c \ +../hdlc/hdlc.c \ +../LCD/lcdpcf8574.c \ +../LCD/Lcd_print.c \ +../LCD/pcf8574.c \ +../LCD/twimaster.c \ +../main.c \ +../protocol/protocol.c \ +../UART/circular_buf.c \ +../UART/uart.c + + +PREPROCESSING_SRCS += + + +ASM_SRCS += + + +OBJS += \ +hdlc/client.o \ +hdlc/fcs.o \ +hdlc/hdlc.o \ +LCD/lcdpcf8574.o \ +LCD/Lcd_print.o \ +LCD/pcf8574.o \ +LCD/twimaster.o \ +main.o \ +protocol/protocol.o \ +UART/circular_buf.o \ +UART/uart.o + +OBJS_AS_ARGS += \ +hdlc/client.o \ +hdlc/fcs.o \ +hdlc/hdlc.o \ +LCD/lcdpcf8574.o \ +LCD/Lcd_print.o \ +LCD/pcf8574.o \ +LCD/twimaster.o \ +main.o \ +protocol/protocol.o \ +UART/circular_buf.o \ +UART/uart.o + +C_DEPS += \ +hdlc/client.d \ +hdlc/fcs.d \ +hdlc/hdlc.d \ +LCD/lcdpcf8574.d \ +LCD/Lcd_print.d \ +LCD/pcf8574.d \ +LCD/twimaster.d \ +main.d \ +protocol/protocol.d \ +UART/circular_buf.d \ +UART/uart.d + +C_DEPS_AS_ARGS += \ +hdlc/client.d \ +hdlc/fcs.d \ +hdlc/hdlc.d \ +LCD/lcdpcf8574.d \ +LCD/Lcd_print.d \ +LCD/pcf8574.d \ +LCD/twimaster.d \ +main.d \ +protocol/protocol.d \ +UART/circular_buf.d \ +UART/uart.d + +OUTPUT_FILE_PATH +=hdlc_screen.elf + +OUTPUT_FILE_PATH_AS_ARGS +=hdlc_screen.elf + +ADDITIONAL_DEPENDENCIES:= + +OUTPUT_FILE_DEP:= ./makedep.mk + +LIB_DEP+= + +LINKER_SCRIPT_DEP+= + + +# AVR32/GNU C Compiler +hdlc/client.o: ../hdlc/client.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +hdlc/fcs.o: ../hdlc/fcs.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +hdlc/hdlc.o: ../hdlc/hdlc.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +LCD/lcdpcf8574.o: ../LCD/lcdpcf8574.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +LCD/Lcd_print.o: ../LCD/Lcd_print.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +LCD/pcf8574.o: ../LCD/pcf8574.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +LCD/twimaster.o: ../LCD/twimaster.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +./main.o: .././main.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +protocol/protocol.o: ../protocol/protocol.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +UART/circular_buf.o: ../UART/circular_buf.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + +UART/uart.o: ../UART/uart.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + @echo Finished building: $< + + + + + +# AVR32/GNU Preprocessing Assembler + + + +# AVR32/GNU Assembler + + + + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES) + +$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP) + @echo Building target: $@ + @echo Invoking: AVR/GNU Linker : 5.4.0 + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="hdlc_screen.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" + @echo Finished building target: $@ + "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "hdlc_screen.elf" "hdlc_screen.hex" + "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "hdlc_screen.elf" "hdlc_screen.eep" || exit 0 + "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "hdlc_screen.elf" > "hdlc_screen.lss" + "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "hdlc_screen.elf" "hdlc_screen.srec" + "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "hdlc_screen.elf" + + + + + + + +# Other Targets +clean: + -$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES) + -$(RM) $(C_DEPS_AS_ARGS) + rm -rf "hdlc_screen.elf" "hdlc_screen.a" "hdlc_screen.hex" "hdlc_screen.lss" "hdlc_screen.eep" "hdlc_screen.map" "hdlc_screen.srec" "hdlc_screen.usersignatures" + \ No newline at end of file diff --git a/hdlc_screen/Debug/UART/circular_buf.d b/hdlc_screen/Debug/UART/circular_buf.d new file mode 100644 index 0000000..322208c --- /dev/null +++ b/hdlc_screen/Debug/UART/circular_buf.d @@ -0,0 +1,25 @@ +UART/circular_buf.d UART/circular_buf.o: ../UART/circular_buf.c \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + ../UART/circular_buf.h + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +../UART/circular_buf.h: diff --git a/hdlc_screen/Debug/UART/circular_buf.o b/hdlc_screen/Debug/UART/circular_buf.o new file mode 100644 index 0000000..60f1aaf Binary files /dev/null and b/hdlc_screen/Debug/UART/circular_buf.o differ diff --git a/hdlc_screen/Debug/UART/uart.d b/hdlc_screen/Debug/UART/uart.d new file mode 100644 index 0000000..921522d --- /dev/null +++ b/hdlc_screen/Debug/UART/uart.d @@ -0,0 +1,48 @@ +UART/uart.d UART/uart.o: ../UART/uart.c \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + ../UART/circular_buf.h ../UART/uart.h + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +../UART/circular_buf.h: + +../UART/uart.h: diff --git a/hdlc_screen/Debug/UART/uart.o b/hdlc_screen/Debug/UART/uart.o new file mode 100644 index 0000000..5b6409f Binary files /dev/null and b/hdlc_screen/Debug/UART/uart.o differ diff --git a/hdlc_screen/Debug/hdlc/client.d b/hdlc_screen/Debug/hdlc/client.d new file mode 100644 index 0000000..79e090e --- /dev/null +++ b/hdlc_screen/Debug/hdlc/client.d @@ -0,0 +1,32 @@ +hdlc/client.d hdlc/client.o: ../hdlc/client.c ../hdlc/client.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h \ + ../hdlc/hdlc.h ../hdlc/fcs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\errno.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h + +../hdlc/client.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h: + +../hdlc/hdlc.h: + +../hdlc/fcs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\errno.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: diff --git a/hdlc_screen/Debug/hdlc/client.o b/hdlc_screen/Debug/hdlc/client.o new file mode 100644 index 0000000..d2db73c Binary files /dev/null and b/hdlc_screen/Debug/hdlc/client.o differ diff --git a/hdlc_screen/Debug/hdlc/fcs.d b/hdlc_screen/Debug/hdlc/fcs.d new file mode 100644 index 0000000..3b73636 --- /dev/null +++ b/hdlc_screen/Debug/hdlc/fcs.d @@ -0,0 +1,3 @@ +hdlc/fcs.d hdlc/fcs.o: ../hdlc/fcs.c ../hdlc/fcs.h + +../hdlc/fcs.h: diff --git a/hdlc_screen/Debug/hdlc/fcs.o b/hdlc_screen/Debug/hdlc/fcs.o new file mode 100644 index 0000000..0ab82ea Binary files /dev/null and b/hdlc_screen/Debug/hdlc/fcs.o differ diff --git a/hdlc_screen/Debug/hdlc/hdlc.d b/hdlc_screen/Debug/hdlc/hdlc.d new file mode 100644 index 0000000..bbe987e --- /dev/null +++ b/hdlc_screen/Debug/hdlc/hdlc.d @@ -0,0 +1,17 @@ +hdlc/hdlc.d hdlc/hdlc.o: ../hdlc/hdlc.c ../hdlc/hdlc.h ../hdlc/fcs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\errno.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h + +../hdlc/hdlc.h: + +../hdlc/fcs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\errno.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: diff --git a/hdlc_screen/Debug/hdlc/hdlc.o b/hdlc_screen/Debug/hdlc/hdlc.o new file mode 100644 index 0000000..2149b24 Binary files /dev/null and b/hdlc_screen/Debug/hdlc/hdlc.o differ diff --git a/hdlc_screen/Debug/hdlc_screen.eep b/hdlc_screen/Debug/hdlc_screen.eep new file mode 100644 index 0000000..7c166a1 --- /dev/null +++ b/hdlc_screen/Debug/hdlc_screen.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/hdlc_screen/Debug/hdlc_screen.elf b/hdlc_screen/Debug/hdlc_screen.elf new file mode 100644 index 0000000..ae2623f Binary files /dev/null and b/hdlc_screen/Debug/hdlc_screen.elf differ diff --git a/hdlc_screen/Debug/hdlc_screen.hex b/hdlc_screen/Debug/hdlc_screen.hex new file mode 100644 index 0000000..bbba2b5 --- /dev/null +++ b/hdlc_screen/Debug/hdlc_screen.hex @@ -0,0 +1,508 @@ +:100000000C9434000C9451000C9451000C94510049 +:100010000C9451000C9451000C9451000C9451001C +:100020000C9451000C9451000C9451000C9451000C +:100030000C9451000C9451000C9451000C945100FC +:100040000C9451000C9451000C94100B0C94510022 +:100050000C94420B0C9451000C9451000C945100E0 +:100060000C9451000C94510011241FBECFEFD8E026 +:10007000DEBFCDBF13E0A0E0B1E0E2E5FDE102C0EC +:1000800005900D92A234B107D9F723E0A2E4B3E0C2 +:1000900001C01D92A639B207E1F70E9426070C9411 +:1000A000A70E0C940000FC0181E0808372836183C1 +:1000B000709344036093430384E1838314828FEF3E +:1000C0009FEF9683858390878783928781871486A5 +:1000D0001386168615860895FC0183E08083808947 +:1000E000887F808B81E0878713820895FC0180815F +:1000F000823089F485E080834134510578F4828927 +:10010000887F828B118A748B638B568B458B13820D +:1001100080E090E008958CEF9FEF08958FEF9FEFC0 +:100120000895CF92DF92EF92FF920F931F93CF9398 +:10013000DF9300D0CDB7DEB77C016B015A834983D2 +:10014000FC0180818530D1F44589568963897489A1 +:100150008E010F5F1F4F9601C70141960E94480311 +:10016000992364F49F938F9380E091E09F938F9302 +:100170000E94990B0F900F900F900F90F7018081C4 +:100180008330D1F48E010F5F1F4F960140E050E0A5 +:1001900060E070E0C7010F960E944803992364F461 +:1001A0009F938F9380E091E09F938F930E94990B90 +:1001B0000F900F900F900F90F70180818430D1F451 +:1001C0008E010F5F1F4F960140E050E060E070E04D +:1001D000C70147960E944803992364F49F938F9325 +:1001E00080E091E09F938F930E94990B0F900F9066 +:1001F0000F900F9080E090E00F900F90DF91CF91E3 +:100200001F910F91FF90EF90DF90CF9008952F9264 +:100210003F924F925F926F927F928F929F92AF9296 +:10022000BF92CF92DF92EF92FF920F931F93CF93E3 +:10023000DF9300D000D0CDB7DEB75C015C834B8389 +:10024000222E332E38018DB69EB6C42ED52E8DB7F4 +:100250009EB78C199D090FB6F8949EBF0FBE8DBF37 +:10026000EDB7FEB731962F01CE0103967C018F01C9 +:100270009601AB01BE016F5F7F4FC50104960E94DE +:10028000220299230CF448C08A81877090E0F5011E +:10029000238130E08217930751F084E08083808DC2 +:1002A000887F808F82E0878B8AEF9FEF35C08981BE +:1002B000813049F018F08230D9F025C0F2E0CF1A31 +:1002C000D10829F40EC082E0F50180831CC0F20140 +:1002D000A22DB32D4C0C5D1C81918D93E415F50579 +:1002E000D9F7F301D182C08286E0F50180830BC08B +:1002F00084E0F5018083808D887F808F82E0878B0A +:100300008AEF9FEF09C08091430390914403F50168 +:100310009283818380E090E00FB6F8949EBE0FBE7A +:100320008DBE0F900F900F900F90DF91CF911F9186 +:100330000F91FF90EF90DF90CF90BF90AF909F9084 +:100340008F907F906F905F904F903F902F90089587 +:10035000FC0121813281261B370B32832183121647 +:1003600013061CF480E090E008958BEF9FEF089552 +:10037000FC01E627FF27EE0FFF1FEA5EFE4F892FE5 +:10038000992720813181822793270895FA0193E8E4 +:10039000980F923070F420813181A9014F5F5F4F37 +:1003A00051834083DB01A20FB31F9DE79C9390E232 +:1003B000892720813181A9014F5F5F4F518340839D +:1003C000FB01E20FF31F80830895982F80FF0BC07D +:1003D00086958695837011F082E001C081E0929548 +:1003E0009695977003C09695977080E097700895E2 +:1003F000FC019081913049F018F0923061F011C009 +:1004000081818770880F8061089581818295880F2E +:10041000807E8160089581818295880F807E8960C9 +:10042000089580E00895FC018FEF9FEF9283818310 +:100430009683858394838383128611861086178220 +:10044000108208953F924F925F926F927F928F92A7 +:100450009F92AF92BF92CF92DF92EF92FF920F9353 +:100460001F93CF93DF9300D000D0CDB7DEB70097B6 +:1004700009F4EAC06115710509F4E9C04115510597 +:1004800009F4E8C00115110509F4E7C0E114F1040D +:1004900009F4E6C0380149017A8369839C838B8320 +:1004A0002115310509F499C08A01C12CD12C689419 +:1004B000442445F833243394590121E0A21AB108A9 +:1004C000AB81BC8113968D919C91149799239CF4D8 +:1004D000F80180818E3709F070C0CA14DB0420F463 +:1004E00081818E3709F470C0EB81FC818781908512 +:1004F0009483838362C0F80150802EE7521219C0A2 +:10050000CA14DB0420F421812E3709F45DC0AB81CD +:10051000BC8117962D913C911897AC014F5F5F4FAE +:100520004217530709F450C016963C932E93159723 +:100530005DC0BDE75B1204C0EB81FC8130823DC031 +:10054000AB81BC818C91882319F01C92508054247B +:10055000652DEB81FC81818192810E94B801AB8184 +:10056000BC8112969C938E93119717962D913C9176 +:10057000189713968D919C91149702962817390716 +:1005800041F4852D0E94E501E981FA819183808300 +:1005900014C0821793078CF4AB81BC8119968D919E +:1005A0009C911A979C012F5F3F4F1A963C932E9374 +:1005B0001997F301E80FF91F5082EB81FC818781C5 +:1005C0009085019690878783FFEFCF1ADF0A0F5F30 +:1005D0001F4F8C149D0409F073CFAB81BC8113961F +:1005E0008D919C91149799233CF06401EB81FC81DF +:1005F00025813681332334F4D7011D921C928EE07D +:1006000092ED30C00496281739073CF0EB81FC814D +:1006100081819281883B904F31F0D701CD92DC925D +:100620000EE012ED0AC0EB81FC8181859285029774 +:10063000D7018D939C930C2D1D2D8B819C810E9445 +:100640001302802F912F0EC08EE092ED0BC08EE032 +:1006500092ED08C08EE092ED05C08EE092ED02C0F2 +:100660008EE092ED0F900F900F900F90DF91CF9151 +:100670001F910F91FF90EF90DF90CF90BF90AF90C0 +:100680009F908F907F906F905F904F903F900895D4 +:100690005F926F927F928F929F92AF92BF92CF9212 +:1006A000DF92EF92FF920F931F93CF93DF9300D0CF +:1006B000CDB7DEB7009709F473C06115710521F459 +:1006C0004115510509F06FC02115310509F46EC0BF +:1006D0000115110509F46DC0380179015A014B016A +:1006E0008C0181E090E09A8389838EE7F901808311 +:1006F0006FEF8FEF9FEF0E94B8016C01AE014F5F6B +:100700005F4FB7018FEF0E94C601C8010E94F80138 +:10071000582E682FC6010E94B8016C01AE014F5FD0 +:100720005F4FB701852D0E94C601F80180818111BC +:1007300019C0A114B104B1F084018A0C9B1C5801AA +:10074000F80161918F01C6010E94B8016C01AE01F0 +:100750004F5F5F4FB701F50180810E94C60180168F +:10076000910669F7C094D094AE014F5F5F4FB70117 +:100770008C2D0E94C601AE014F5F5F4FB7018D2DDA +:100780000E94C60189819A81F701E80FF91F2EE7BF +:1007900020830196F3019183808380E090E00BC079 +:1007A0008EE092ED08C08EE092ED05C08EE092EDF5 +:1007B00002C08EE092ED0F900F90DF91CF911F91CC +:1007C0000F91FF90EF90DF90CF90BF90AF909F90F0 +:1007D0008F907F906F905F900895CF93882331F032 +:1007E0008091420381608093420305C0809142035F +:1007F0008E7F809342038091420382608093420304 +:100800006091420380E00E94950662E080E00E94D1 +:10081000D60600C064E080E00E948106C82F62E036 +:1008200080E00E94DA0600C062E080E00E94D60606 +:1008300000C064E080E00E948106C295C07F8F7096 +:10084000C82B62E080E00E94DA068C2FCF910895D9 +:1008500080E00E94ED038823DCF300C080E00E946A +:10086000ED03089562E080E00E94D60600C062E0D9 +:1008700080E00E94DA060895CF93C82F662331F0F6 +:100880008091420381608093420305C080914203BE +:100890008E7F80934203809142038D7F8093420339 +:1008A0006091420380E00E949506809142038F7719 +:1008B00080934203809142038F7B80934203809117 +:1008C00042038F7D80934203809142038F7E809309 +:1008D0004203CC232CF4809142038068809342032E +:1008E000C6FF05C080914203806480934203C5FF28 +:1008F00005C080914203806280934203C4FF05C01B +:10090000809142038061809342036091420380E0C2 +:100910000E9495060E943204809142038F77809353 +:100920004203809142038F7B809342038091420374 +:100930008F7D80934203809142038F7E8093420398 +:10094000C3FF05C080914203806880934203C2FFC9 +:1009500005C080914203806480934203C1FF05C0BB +:1009600080914203806280934203C0FF05C0809162 +:1009700042038061809342036091420380E00E94C1 +:1009800095060E9432048091420380618093420365 +:10099000809142038062809342038091420380648D +:1009A0008093420380914203806880934203609168 +:1009B000420380E00E949506CF910895CF93C82FFF +:1009C0000E94280460E08C2F0E943C04CF9108957F +:1009D000611104C080580E94DE04089580540E9472 +:1009E000DE04089581E00E94DE040895882331F03A +:1009F00080914203877F8093420305C08091420328 +:100A00008860809342036091420380E00E949506D3 +:100A1000089582E00E94DE040895CF93C82F0E94BB +:100A20002804CA3049F4803410F080E001C080E42A +:100A300080580E94DE0413C0803129F460E080EC0D +:100A40000E943C0406C0803521F460E080E80E94EA +:100A50003C040E94280461E08C2F0E943C04CF914A +:100A60000895CF93DF93EC012196FC0180818823C8 +:100A700029F00E940D0589918111FBCFDF91CF9163 +:100A800008951F93CF93DF93182F0E94780610923A +:100A900042036091420380E00E94950680EA9FE055 +:100AA0000197F1F780914203806280934203809125 +:100AB00042038061809342036091420380E00E9480 +:100AC00095060E94320480EE94E00197F1F70E94AF +:100AD0003204C0E1D0E0CE010197F1F70E94320468 +:100AE000CE010197F1F7809142038F7E80934203FC +:100AF0006091420380E00E9495060E943204219793 +:100B0000F1F788E20E94DE0488E00E94DE040E9481 +:100B1000F20486E00E94DE04812F0E94DE04DF9151 +:100B2000CF911F9108958DE00E9441050E94090513 +:100B300080E00E94F6040895CF92DF92EF92FF9238 +:100B40000F931F93CF93DF938C017B01C901F801B1 +:100B500001900020E9F73197BF01601B710B0E94E3 +:100B6000760B670120E1C20ED11CE7019C012E1912 +:100B70003F09F80101900020E9F73197BF01601BA0 +:100B8000710BC9018C0F9D1F0E94760BF801E80FB5 +:100B9000F91F80818993CC15DD0559F7F701108A7B +:100BA000DF91CF911F910F91FF90EF90DF90CF9049 +:100BB0000895AF92BF92CF92DF92EF92FF920F9380 +:100BC0001F931F930F93FF92EF925F934F933F9367 +:100BD0002F939F938F937F936F9386E193E09F93DF +:100BE0008F93BF92AF92DF92CF920E94AF0B8DB7DF +:100BF0009EB742960FB6F8949EBF0FBE8DBF1F9151 +:100C00000F91FF90EF90DF90CF90BF90AF9008953D +:100C10006F927F92AF92BF92CF92DF92EF92FF924C +:100C20000F931F93CF93DF93CDB7DEB7C254D10993 +:100C30000FB6F894DEBF0FBECDBF3C012091490333 +:100C400030914A0341E150E0BE016F5F7F4F0E9447 +:100C50009C05F301E85BFF4FE080F1800281138186 +:100C60003497208131814281538134976081718131 +:100C7000828193810F2EF1E1AF2EB12CF02DFE0178 +:100C800072966F010E94D90540E150E0BE016F5F8E +:100C90007F4FCE0183960E948A0B40E150E0B6015F +:100CA000CE01C3960E948A0B60E080E00E94E804B7 +:100CB000CE0183960E94310561E080E00E94E80445 +:100CC000CE01C3960E943105CE5BDF4F0FB6F8947C +:100CD000DEBF0FBECDBFDF91CF911F910F91FF906F +:100CE000EF90DF90CF90BF90AF907F906F9008957E +:100CF0000E94DE0683E08A95F1F7000010924B0314 +:100D0000089581110EC0683070F480914B03082E55 +:100D1000000C990B02C0959587956A95E2F7817052 +:100D200008958FEF08958FEF0895CF9381110DC02F +:100D3000C62F60934B038EE40E94E4068C2F0E9422 +:100D400014070E940B0780E001C08FEFCF91089538 +:100D5000CF93DF93811124C0683020F580914B033D +:100D6000442349F0C1E0D0E002C0CC0FDD1F6A95FA +:100D7000E2F7C82B09C0C1E0D0E002C0CC0FDD1FF4 +:100D80006A95E2F7C095C823C0934B038EE40E9496 +:100D9000E4068C2F0E9414070E940B0780E003C01A +:100DA0008FEF01C08FEFDF91CF91089541E00E9456 +:100DB000A806089540E00E94A80608951092B90080 +:100DC0008DEF8093B800089594EA9093BC00ECEB0B +:100DD000F0E090819923ECF79091B900987F9830DA +:100DE00011F09031A1F48093BB0084E88093BC00A3 +:100DF000ECEBF0E080818823ECF79091B900987FCC +:100E0000983139F081E0903429F480E0089581E050 +:100E1000089580E0089584E98093BC00ECEBF0E055 +:100E2000808184FDFDCF08958093BB0084E880938A +:100E3000BC00ECEBF0E080818823ECF79091B900E6 +:100E4000987F81E0983209F480E008954F925F9294 +:100E50006F927F928F929F92AF92BF92CF92DF92CA +:100E6000EF92FF920F931F93CF93DF93CDB7DEB72F +:100E7000C350D2400FB6F894DEBF0FBECDBF0E9464 +:100E800093050E949E0A68EC70E0CE0101960E94D4 +:100E90005300CE0101960E946C004AE050E0BE0172 +:100EA000665E7F4FCE0101960E9491006AE070E07D +:100EB000CE014A960E94AA0A64E170E0CE018051F8 +:100EC0009E4F0E94CE0A61E070E0CE0101960E9422 +:100ED000A801059681F44AE050E0BE01665E7F4FAE +:100EE000CE0101960E9491006AE070E0CE014A9620 +:100EF0000E94AA0AE1CF00E010E020E030E044E1E7 +:100F000050E0BE0160517E4FCE0101960E94070164 +:100F10008C019923ACF40A3F8FEF1807B1F444E138 +:100F200050E0BE01605A7E4FCE0101960E949100B2 +:100F300064E170E0CE01805A9E4F0E94AA0A05C06B +:100F40008981823009F0B8CF03C0802F912FFEC075 +:100F500084EA90E7ADE9BFE38CA39DA3AEA3BFA352 +:100F60008DEC9CECA0EBB1E488A799A7AAA7BBA73E +:100F700080E090E0A8ECB2E48CA79DA7AEA7BFA745 +:100F800083E090E099AB88AB85E293E09BAB8AABC2 +:100F900082E090E09DAB8CAB2E01E6E74E0E511C3B +:100FA0005F924F923E01F6E36F0E711C7F926F923B +:100FB0008CA09DA0AEA0BFA0C8A4D9A4EAA4FBA405 +:100FC0000CA51DA52EA53FA548A959A96AA97BA9CD +:100FD0008CA99DA90E945C09F20140815181B30155 +:100FE000CE0101960E94760048E450E0BE016858A8 +:100FF0007F4FCE0101960E94910068E470E0CE011F +:1010000088589F4F0E94AA0A0F900F900F900F9040 +:1010100060E970E0CE01805A9E4F0E94CE0A61E0E6 +:1010200070E0CE0101960E94A801059689F448E47B +:1010300050E0BE0168587F4FCE0101960E9491009A +:1010400068E470E0CE0188589F4F0E94AA0AE0CF62 +:101050008E0113959E0120543F4F40E950E0BE01A0 +:10106000605A7E4FCE0101960E9407018C019923A0 +:101070009CF40696B1F444E150E0BE0160517E4F0D +:10108000CE0101960E94910064E170E0CE01805192 +:101090009E4F0E94AA0A05C08981863009F0B8CF08 +:1010A00003C0802F912F52C0C050DF4F68817981DB +:1010B000C050D140AE014E5F5E4FCE0180549F4F75 +:1010C0000E94BE08CE5FDE4F88819981AA81BB81D4 +:1010D000C250D140CC5ADE4F88839983AA83BB8308 +:1010E000C455D140CA5FDE4F88819981AA81BB81F6 +:1010F000C650D140C85ADE4F88839983AA83BB83E8 +:10110000C855D140C65FDE4F88819981AA81BB81D5 +:10111000CA50D140C45ADE4F88839983AA83BB83C7 +:10112000CC55D140C05FDE4F68817981C051D1403C +:101130004FE350E0CE018C5E9E4F0E948A0BCE01A1 +:101140008C5E9E4F0E94080680E090E0CD5FDD4FF0 +:101150000FB6F894DEBF0FBECDBFDF91CF911F91C8 +:101160000F91FF90EF90DF90CF90BF90AF909F9046 +:101170008F907F906F905F904F9008958F929F9285 +:10118000AF92BF92CF92DF92EF92FF920F931F9395 +:10119000CF93DF93CDB7DEB7C054D1090FB6F89423 +:1011A000DEBF0FBECDBF4B01672B09F46CC020E042 +:1011B00030E060E070E0A12CB12C6E01E5E0CE0ED5 +:1011C000D11CFE0131967F01FC01E20FF31F20814B +:1011D000211127C0DB011196A80FB91FFE0131961E +:1011E0002D912193EC15FD05D9F76C5F7F4FF5012B +:1011F000EE0FFF1FEE0FFF1FE40FF51F09811A818D +:101200002B813C810083118322833383FA0124855F +:1012100035852F5F3F4F3587248795012F5F3F4FDF +:101220005901FC01E60FF71F2081213021F59B01B8 +:101230002F5F3F4FFC01E20FF31FE081EE2399F097 +:101240006E5F7F4FDC01A60FB71FF701B9016F5F1B +:101250007F4F2D91219330E08F010E191F09021746 +:101260001307ACF301C0B90129813A81FA0137872C +:101270002687118A108A6F5F7F4F9B016815790559 +:1012800008F4A2CF02C0A12CB12CFA01B586A48625 +:10129000C05CDF4F0FB6F894DEBF0FBECDBFDF914D +:1012A000CF911F910F91FF90EF90DF90CF90BF9063 +:1012B000AF909F908F9008954F925F926F927F9220 +:1012C0008F929F92AF92BF92CF92DF92EF92FF9256 +:1012D0000F931F93CF93DF93CDB7DEB7C255D109DC +:1012E0000FB6F894DEBF0FBECDBF22968FAE229709 +:1012F00023969FAE23972496AFAE24972596BFAE34 +:1013000025972696CFAE26972796DFAE2797289665 +:10131000EFAE28972996FFAE29972A960FAF2A9706 +:101320002B961FAF2B972C962FAF2C972D963FAF58 +:101330002D972E964FAF2E972F965FAF2F976096D3 +:101340006FAF609761967FAF619762968FAF62973C +:1013500063969FAF6397A7960EAD1FADA7972F9685 +:10136000CEACDFAC2F9763966EAD7FAD6397C114A3 +:10137000D10409F466C07801CE018F5B9F4F5601FE +:10138000AA0CBB1CAA0CBB1CA80EB91EAE014B5F5D +:101390005F4FF7011192DC014D905D906D907D9053 +:1013A000CD0149825A826B827C82DE0111963D9189 +:1013B0003193A417B507D9F7B5E0EB0EF11C8A15E8 +:1013C0009B0539F79601220F331F220F331F2C0D77 +:1013D0003D1D6115710509F1D801A20FB31F81E010 +:1013E0008C93D9011196A00FB11F2E5F3F4F6C93C4 +:1013F00061968EAD9FAD61979A838983DE011196C8 +:10140000F801E20FF31F80E090E02F5F3F4F4D9116 +:101410004193019686179707C0F3A996EEADFFADED +:10142000A9973183208313C081E0F8018083618311 +:1014300061968EAD9FAD61979A83898322E030E0FB +:10144000DDCF6115710581F720E030E0E6CFCE5A9F +:10145000DF4F0FB6F894DEBF0FBECDBFDF91CF9147 +:101460001F910F91FF90EF90DF90CF90BF90AF90C2 +:101470009F908F907F906F905F904F900895FC01A8 +:1014800081E090E030A121A1321711F080E090E0DE +:101490000895FC0121A130E02F5F3F4F2F7130787C +:1014A000332334F421503109206E3F6F2F5F3F4FBB +:1014B000FC0140A150E081E090E02417350711F0D5 +:1014C00080E090E008951F93CF93DF93EC01162FF7 +:1014D0000E94490A892B81F489A190E0FE01E80F5E +:1014E000F91F108301968F719078992324F4019746 +:1014F000806E9F6F019689A3DF91CF911F91089510 +:10150000FC0120A181A12817B1F030E0DF01A20F7A +:10151000B31F4C9150E02F5F3F4F2F713078332332 +:1015200034F421503109206E3F6F2F5F3F4F20A3CD +:10153000842F952F08958FEF9FEF089588EF809364 +:10154000C10086E08093C2001092C50087E68093B8 +:10155000C40008950F931F93CF93DF936115710516 +:1015600099F08C01EC01060F171F8EE693E00E94A4 +:10157000490A892B49F4699170E08EE693E00E9454 +:10158000630AC017D10789F7E1ECF0E0808180643D +:101590008083DF91CF911F910F9108958F929F9239 +:1015A000AF92BF92CF92DF92EF92FF920F931F9371 +:1015B000CF93DF938B01EC01C12CD12C76014B0131 +:1015C000A12CB12C0AC08CE493E00E94800A89937C +:1015D0008FEFC81AD80AE80AF80A8CE493E00E9450 +:1015E0003F0A892B29F4C814D904EA04FB0458F3F0 +:1015F00020E030E00C151D052E053F0510F0C6015A +:1016000002C08FEF9FEFDF91CF911F910F91FF905D +:10161000EF90DF90CF90BF90AF909F908F90089504 +:101620001F920F920FB60F9211242F933F934F9357 +:101630005F936F937F938F939F93AF93BF93CF935A +:10164000EF93FF93C091C6008CE493E00E94490A97 +:10165000892B31F46C2F70E08CE493E00E94630AD4 +:10166000FF91EF91CF91BF91AF919F918F917F911A +:101670006F915F914F913F912F910F900FBE0F90FF +:101680001F9018951F920F920FB60F9211242F934F +:101690003F934F935F936F937F938F939F93AF93FA +:1016A000BF93EF93FF938EE693E00E943F0A892B4E +:1016B00039F48EE693E00E94800A8093C60005C04C +:1016C000E1ECF0E080818F7B8083FF91EF91BF910F +:1016D000AF919F918F917F916F915F914F913F91CA +:1016E0002F910F900FBE0F901F901895AA1BBB1B38 +:1016F00051E107C0AA1FBB1FA617B70710F0A61B12 +:10170000B70B881F991F5A95A9F780959095BC0132 +:10171000CD010895FB01DC014150504048F001909B +:101720000D920020C9F701C01D9241505040E0F7D2 +:101730000895A0E0B0E0EFE9FBE00C94800EAE016C +:101740004B5F5F4FFA0161917191AF0180919203FC +:10175000909193030E94DF0BE2E00C949C0EAEE0AC +:10176000B0E0E5EBFBE00C947E0E0D891E898F89BD +:10177000988D26E02C831A83098397FF02C080E0AE +:1017800090E801979E838D83AE01455E5F4F698D22 +:101790007A8DCE0101960E94DF0B4D815E8157FD4F +:1017A0000AC02F813885421753070CF49A01F801BB +:1017B000E20FF31F10822E96E4E00C949A0EABE039 +:1017C000B0E0E5EEFBE00C94700E6C017B018A0149 +:1017D000FC0117821682838181FFCCC1CE01019664 +:1017E0003C01F6019381F70193FD859193FF81916F +:1017F0007F01882309F4BAC1853239F493FD8591BC +:1018000093FF81917F01853229F4B60190E00E9417 +:10181000D60DE7CF912C212C312CFFE1F315D8F018 +:101820008B3279F038F4803279F08332A1F4232DB1 +:1018300020611DC08D3261F0803369F4232D216059 +:1018400016C0832D8260382EE32DE4603E2E2AC020 +:10185000F32DF8601DC037FC2DC020ED280F2A3075 +:1018600040F08E32B9F436FC81C1232D2064322E33 +:1018700019C036FE06C08AE0989E200D1124922ED3 +:1018800011C0EAE02E9E200D1124222EF32DF062CD +:101890003F2E08C08C3621F4832D8068382E02C07C +:1018A000883641F4F70193FD859193FF81917F0183 +:1018B0008111B3CF982F9F7D9554933028F40C5FFE +:1018C0001F4F9FE399830DC0833631F0833771F04A +:1018D000833509F059C021C0F801808189830E5FEA +:1018E0001F4F88248394912C530113C02801F2E0E8 +:1018F0004F0E511CF801A080B18036FE03C0692D47 +:1019000070E002C06FEF7FEFC5010E94CB0D4C016C +:101910008201F32DFF773F2E16C0280122E0420EF0 +:10192000511CF801A080B18036FE03C0692D70E023 +:1019300002C06FEF7FEFC5010E94C00D4C01F32D77 +:10194000F0683F2E820133FC1BC0822D90E0881688 +:101950009906B0F4B60180E290E00E94D60D2A9478 +:10196000F4CFF50137FC859137FE81915F01B60117 +:1019700090E00E94D60D21102A9421E0821A91084D +:101980008114910471F7E8C0843611F0893641F56D +:10199000F80137FE07C060817181828193810C5FFD +:1019A0001F4F08C060817181072E000C880B990BB6 +:1019B0000E5F1F4FF32DFF763F2E97FF09C09095C6 +:1019C0008095709561957F4F8F4F9F4FF0683F2EA8 +:1019D0002AE030E0A3010E94120E882E861845C02E +:1019E000853731F4232D2F7EB22E2AE030E025C03A +:1019F000932D997FB92E8F36C1F018F4883579F080 +:101A0000B5C0803719F0883721F0B0C0E92FE06108 +:101A1000BE2EB4FE0DC0FB2DF460BF2E09C034FEF7 +:101A20000AC0292F2660B22E06C028E030E005C08B +:101A300020E130E002C020E132E0F801B7FE07C04B +:101A400060817181828193810C5F1F4F06C060812C +:101A5000718180E090E00E5F1F4FA3010E94120E83 +:101A6000882E8618FB2DFF773F2E36FE0DC0232DC6 +:101A70002E7FA22E891458F434FE0BC032FC09C00C +:101A8000832D8E7EA82E05C0B82CA32C03C0B82CA5 +:101A900001C0B92CA4FE0FC0FE01E80DF11D80812C +:101AA000803321F49A2D997EA92E09C0A2FE06C08A +:101AB000B394B39404C08A2D867809F0B394A3FC40 +:101AC00011C0A0FE06C0B21488F4280C922C9B18FA +:101AD0000EC0B21460F4B60180E290E00E94D60D10 +:101AE000B394F7CFB21418F42B1802C0982C212C01 +:101AF000A4FE10C0B60180E390E00E94D60DA2FEC5 +:101B000017C0A1FC03C088E790E002C088E590E020 +:101B1000B6010CC08A2D867859F0A1FE02C08BE276 +:101B200001C080E2A7FC8DE2B60190E00E94D60DD4 +:101B3000891438F4B60180E390E00E94D60D9A949F +:101B4000F7CF8A94F301E80DF11D8081B60190E092 +:101B50000E94D60D8110F5CF222009F442CEB601A5 +:101B600080E290E00E94D60D2A94F6CFF60186819D +:101B7000978102C08FEF9FEF2B96E2E10C948C0EC1 +:101B8000FC010590615070400110D8F78095909548 +:101B90008E0F9F1F0895FC0161507040019001104D +:101BA000D8F7809590958E0F9F1F08950F931F93E0 +:101BB000CF93DF93FB01238121FD03C08FEF9FEFC4 +:101BC0002CC022FF16C046815781248135814217DF +:101BD000530744F4A081B1819D012F5F3F4F3183B2 +:101BE00020838C93268137812F5F3F4F3783268355 +:101BF00014C08B01EC01FB010084F185E02D0995F7 +:101C0000892BE1F6D80116968D919C911797019634 +:101C100017969C938E931697CE01DF91CF911F91CB +:101C20000F910895FA01AA27283051F1203181F14E +:101C3000E8946F936E7F6E5F7F4F8F4F9F4FAF4FD4 +:101C4000B1E03ED0B4E03CD0670F781F891F9A1FE7 +:101C5000A11D680F791F8A1F911DA11D6A0F711D9B +:101C6000811D911DA11D20D009F468943F912AE0A7 +:101C7000269F11243019305D3193DEF6CF0108958F +:101C8000462F4770405D4193B3E00FD0C9F7F6CFC0 +:101C9000462F4F70405D4A3318F0495D31FD405288 +:101CA000419302D0A9F7EACFB4E0A695979587951E +:101CB00077956795BA95C9F70097610571050895FD +:101CC0009B01AC010A2E06945795479537952795A9 +:101CD000BA95C9F7620F731F841F951FA01D089541 +:101CE0002F923F924F925F926F927F928F929F922C +:101CF000AF92BF92CF92DF92EF92FF920F931F931A +:101D0000CF93DF93CDB7DEB7CA1BDB0B0FB6F894CA +:101D1000DEBF0FBECDBF09942A88398848885F840A +:101D20006E847D848C849B84AA84B984C884DF807B +:101D3000EE80FD800C811B81AA81B981CE0FD11D5F +:101D40000FB6F894DEBF0FBECDBFED010895F89435 +:021D5000FFCFC3 +:101D520065727220696E206765745F6672616D6577 +:101D62003A2025640A000000891112239B3224467E +:101D7200AD573665BF74488CC19D5AAFD3BE6CCA8D +:101D8200E5DB7EE9F7F88110080193331A22A556A4 +:101D92002C47B7753E64C99C408DDBBF52AEEDDA6D +:101DA20064CBFFF976E802218B3010029913266783 +:101DB200AF763444BD554AADC3BC588ED19F6EEB4D +:101DC200E7FA7CC8F5D983310A2091121803A77764 +:101DD2002E66B5543C45CBBD42ACD99E508FEFFB2D +:101DE20066EAFDD874C904428D5316619F702004BF +:101DF200A9153227BB364CCEC5DF5EEDD7FC68880D +:101E0200E1997AABF3BA85520C4397711E60A11423 +:101E12002805B3373A26CDDE44CFDFFD56ECE998EC +:101E22006089FBBB72AA06638F7214409D51222502 +:101E3200AB343006B9174EEFC7FE5CCCD5DD6AA9CC +:101E4200E3B8788AF19B87730E6295501C41A335E3 +:101E52002A24B1163807CFFF46EEDDDC54CDEBB9AC +:101E620062A8F99A708B088481951AA793B62CC23E +:101E7200A5D33EE1B7F04008C919522BDB3A644EB4 +:101E8200ED5F766DFF7C899400859BB712A6ADD27B +:101E920024C3BFF136E0C1184809D33B5A2AE55E94 +:101EA2006C4FF77D7E6C0AA583B4188691972EE35A +:101EB200A7F23CC0B5D14229CB38500AD91B666F74 +:101EC200EF7E744CFD5D8BB502A499961087AFF33B +:101ED20026E2BDD034C1C3394A28D11A580BE77F54 +:101EE2006E6EF55C7C4D0CC685D71EE597F4288096 +:101EF200A1913AA3B3B2444ACD5B5669DF78600C34 +:101F0200E91D722FFB3E8DD604C79FF516E4A990FA +:101F12002081BBB332A2C55A4C4BD7795E68E11C13 +:101F2200680DF33F7A2E0EE787F61CC495D52AA1D9 +:101F3200A3B03882B193466BCF7A5448DD59622DF3 +:101F4200EB3C700EF91F8FF706E69DD414C5ABB1BA +:101F520022A0B9923083C77B4E6AD5585C49E33DD3 +:101F62006A2CF11E780F252E32662E252E32662E11 +:101F7200252E326600776F72642077617220696E57 +:101F8200206E657720776F726C6420696F206578A8 +:021F920000004D +:00000001FF diff --git a/hdlc_screen/Debug/hdlc_screen.lss b/hdlc_screen/Debug/hdlc_screen.lss new file mode 100644 index 0000000..116c3eb --- /dev/null +++ b/hdlc_screen/Debug/hdlc_screen.lss @@ -0,0 +1,4530 @@ + +hdlc_screen.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .data 00000242 00800100 00001d52 00001de6 2**0 + CONTENTS, ALLOC, LOAD, DATA + 1 .text 00001d52 00000000 00000000 00000094 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .bss 00000054 00800342 00800342 00002028 2**0 + ALLOC + 3 .comment 0000008c 00000000 00000000 00002028 2**0 + CONTENTS, READONLY + 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 000020b4 2**2 + CONTENTS, READONLY + 5 .debug_aranges 00000320 00000000 00000000 000020f4 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_info 0000378f 00000000 00000000 00002414 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_abbrev 00001589 00000000 00000000 00005ba3 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_line 00001e37 00000000 00000000 0000712c 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_frame 000009a0 00000000 00000000 00008f64 2**2 + CONTENTS, READONLY, DEBUGGING + 10 .debug_str 00000cc5 00000000 00000000 00009904 2**0 + CONTENTS, READONLY, DEBUGGING + 11 .debug_loc 00002fe7 00000000 00000000 0000a5c9 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_ranges 000002e8 00000000 00000000 0000d5b0 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00000000 <__vectors>: + 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end> + 4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 1c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 28: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 2c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 30: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 34: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 38: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 3c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 40: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 44: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 48: 0c 94 10 0b jmp 0x1620 ; 0x1620 <__vector_18> + 4c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 50: 0c 94 42 0b jmp 0x1684 ; 0x1684 <__vector_20> + 54: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 58: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 5c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 60: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + 64: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt> + +00000068 <__ctors_end>: + 68: 11 24 eor r1, r1 + 6a: 1f be out 0x3f, r1 ; 63 + 6c: cf ef ldi r28, 0xFF ; 255 + 6e: d8 e0 ldi r29, 0x08 ; 8 + 70: de bf out 0x3e, r29 ; 62 + 72: cd bf out 0x3d, r28 ; 61 + +00000074 <__do_copy_data>: + 74: 13 e0 ldi r17, 0x03 ; 3 + 76: a0 e0 ldi r26, 0x00 ; 0 + 78: b1 e0 ldi r27, 0x01 ; 1 + 7a: e2 e5 ldi r30, 0x52 ; 82 + 7c: fd e1 ldi r31, 0x1D ; 29 + 7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10> + 80: 05 90 lpm r0, Z+ + 82: 0d 92 st X+, r0 + 84: a2 34 cpi r26, 0x42 ; 66 + 86: b1 07 cpc r27, r17 + 88: d9 f7 brne .-10 ; 0x80 <__do_copy_data+0xc> + +0000008a <__do_clear_bss>: + 8a: 23 e0 ldi r18, 0x03 ; 3 + 8c: a2 e4 ldi r26, 0x42 ; 66 + 8e: b3 e0 ldi r27, 0x03 ; 3 + 90: 01 c0 rjmp .+2 ; 0x94 <.do_clear_bss_start> + +00000092 <.do_clear_bss_loop>: + 92: 1d 92 st X+, r1 + +00000094 <.do_clear_bss_start>: + 94: a6 39 cpi r26, 0x96 ; 150 + 96: b2 07 cpc r27, r18 + 98: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop> + 9a: 0e 94 26 07 call 0xe4c ; 0xe4c <main> + 9e: 0c 94 a7 0e jmp 0x1d4e ; 0x1d4e <_exit> + +000000a2 <__bad_interrupt>: + a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + +000000a6 <init_hdlc_client>: + +#define SIZE_DATA_BUFFERS 64 + +int connecting_frame_timeout_bf; + +void init_hdlc_client(struct Client* client, int connecting_frame_timeout){ + a6: fc 01 movw r30, r24 + client->state = IDLE_STATE; + a8: 81 e0 ldi r24, 0x01 ; 1 + aa: 80 83 st Z, r24 + client->connecting_frame_timeout = connecting_frame_timeout; + ac: 72 83 std Z+2, r23 ; 0x02 + ae: 61 83 std Z+1, r22 ; 0x01 + connecting_frame_timeout_bf = connecting_frame_timeout; + b0: 70 93 44 03 sts 0x0344, r23 ; 0x800344 <connecting_frame_timeout_bf+0x1> + b4: 60 93 43 03 sts 0x0343, r22 ; 0x800343 <connecting_frame_timeout_bf> + client->current_index_frame = 20; + b8: 84 e1 ldi r24, 0x14 ; 20 + ba: 83 83 std Z+3, r24 ; 0x03 + + client->current_state_hdlc.control_escape = 0; + bc: 14 82 std Z+4, r1 ; 0x04 + client->current_state_hdlc.fcs = FCS_INIT_VALUE; + be: 8f ef ldi r24, 0xFF ; 255 + c0: 9f ef ldi r25, 0xFF ; 255 + c2: 96 83 std Z+6, r25 ; 0x06 + c4: 85 83 std Z+5, r24 ; 0x05 + client->current_state_hdlc.start_index = -1; + c6: 90 87 std Z+8, r25 ; 0x08 + c8: 87 83 std Z+7, r24 ; 0x07 + client->current_state_hdlc.end_index = -1; + ca: 92 87 std Z+10, r25 ; 0x0a + cc: 81 87 std Z+9, r24 ; 0x09 + client->current_state_hdlc.src_index = 0; + ce: 14 86 std Z+12, r1 ; 0x0c + d0: 13 86 std Z+11, r1 ; 0x0b + client->current_state_hdlc.dest_index = 0; + d2: 16 86 std Z+14, r1 ; 0x0e + d4: 15 86 std Z+13, r1 ; 0x0d + d6: 08 95 ret + +000000d8 <hdlc_connect>: +} + +void hdlc_connect(struct Client* client){ + d8: fc 01 movw r30, r24 + client->state = CONNECTING; + da: 83 e0 ldi r24, 0x03 ; 3 + dc: 80 83 st Z, r24 + + client->frameS.seq_no = 0; + de: 80 89 ldd r24, Z+16 ; 0x10 + e0: 88 7f andi r24, 0xF8 ; 248 + e2: 80 8b std Z+16, r24 ; 0x10 + client->frameS.frame = S_FRAME; + e4: 81 e0 ldi r24, 0x01 ; 1 + e6: 87 87 std Z+15, r24 ; 0x0f + client->current_index_frame = client->frameS.seq_no; + e8: 13 82 std Z+3, r1 ; 0x03 + ea: 08 95 ret + +000000ec <hdlc_send_data>: +} + +int hdlc_send_data(struct Client* client, uint8_t data[], size_t data_len){ + ec: fc 01 movw r30, r24 + if (client->state != READY_STATE){ + ee: 80 81 ld r24, Z + f0: 82 30 cpi r24, 0x02 ; 2 + f2: 89 f4 brne .+34 ; 0x116 <hdlc_send_data+0x2a> + return ERR_INVALID_STATE; + } + + client->state = RECIVING; + f4: 85 e0 ldi r24, 0x05 ; 5 + f6: 80 83 st Z, r24 + + if (SIZE_DATA_BUFFERS < data_len){ + f8: 41 34 cpi r20, 0x41 ; 65 + fa: 51 05 cpc r21, r1 + fc: 78 f4 brcc .+30 ; 0x11c <hdlc_send_data+0x30> + return ERR_INVALID_DATA_SIZE; + } + + client->frameI.seq_no = 0; + fe: 82 89 ldd r24, Z+18 ; 0x12 + 100: 88 7f andi r24, 0xF8 ; 248 + 102: 82 8b std Z+18, r24 ; 0x12 + client->frameI.frame = I_FRAME; + 104: 11 8a std Z+17, r1 ; 0x11 + client->data_i_frame = data; + 106: 74 8b std Z+20, r23 ; 0x14 + 108: 63 8b std Z+19, r22 ; 0x13 + client->len_data_i_frame = data_len; + 10a: 56 8b std Z+22, r21 ; 0x16 + 10c: 45 8b std Z+21, r20 ; 0x15 + client->current_index_frame = client->frameI.seq_no; + 10e: 13 82 std Z+3, r1 ; 0x03 + + client->state = RECIVING; + return 0; + 110: 80 e0 ldi r24, 0x00 ; 0 + 112: 90 e0 ldi r25, 0x00 ; 0 + 114: 08 95 ret + client->current_index_frame = client->frameS.seq_no; +} + +int hdlc_send_data(struct Client* client, uint8_t data[], size_t data_len){ + if (client->state != READY_STATE){ + return ERR_INVALID_STATE; + 116: 8c ef ldi r24, 0xFC ; 252 + 118: 9f ef ldi r25, 0xFF ; 255 + 11a: 08 95 ret + } + + client->state = RECIVING; + + if (SIZE_DATA_BUFFERS < data_len){ + return ERR_INVALID_DATA_SIZE; + 11c: 8f ef ldi r24, 0xFF ; 255 + 11e: 9f ef ldi r25, 0xFF ; 255 + client->len_data_i_frame = data_len; + client->current_index_frame = client->frameI.seq_no; + + client->state = RECIVING; + return 0; +} + 120: 08 95 ret + +00000122 <hdlc_get_raw_frame>: + +int hdlc_get_raw_frame(struct Client *client, uint8_t* buffer, size_t lenBuffer) { + 122: cf 92 push r12 + 124: df 92 push r13 + 126: ef 92 push r14 + 128: ff 92 push r15 + 12a: 0f 93 push r16 + 12c: 1f 93 push r17 + 12e: cf 93 push r28 + 130: df 93 push r29 + 132: 00 d0 rcall .+0 ; 0x134 <hdlc_get_raw_frame+0x12> + 134: cd b7 in r28, 0x3d ; 61 + 136: de b7 in r29, 0x3e ; 62 + 138: 7c 01 movw r14, r24 + 13a: 6b 01 movw r12, r22 + 13c: 5a 83 std Y+2, r21 ; 0x02 + 13e: 49 83 std Y+1, r20 ; 0x01 + if(client->state == RECIVING){ + 140: fc 01 movw r30, r24 + 142: 80 81 ld r24, Z + 144: 85 30 cpi r24, 0x05 ; 5 + 146: d1 f4 brne .+52 ; 0x17c <hdlc_get_raw_frame+0x5a> + int ret = hdlc_frame_data(&client->frameI, client->data_i_frame, + 148: 45 89 ldd r20, Z+21 ; 0x15 + 14a: 56 89 ldd r21, Z+22 ; 0x16 + 14c: 63 89 ldd r22, Z+19 ; 0x13 + 14e: 74 89 ldd r23, Z+20 ; 0x14 + 150: 8e 01 movw r16, r28 + 152: 0f 5f subi r16, 0xFF ; 255 + 154: 1f 4f sbci r17, 0xFF ; 255 + 156: 96 01 movw r18, r12 + 158: c7 01 movw r24, r14 + 15a: 41 96 adiw r24, 0x11 ; 17 + 15c: 0e 94 48 03 call 0x690 ; 0x690 <hdlc_frame_data> + client->len_data_i_frame, buffer, &lenBuffer); + if (ret < 0){ + 160: 99 23 and r25, r25 + 162: 64 f4 brge .+24 ; 0x17c <hdlc_get_raw_frame+0x5a> + printf("err in get_frame: %d\n", ret); + 164: 9f 93 push r25 + 166: 8f 93 push r24 + 168: 80 e0 ldi r24, 0x00 ; 0 + 16a: 91 e0 ldi r25, 0x01 ; 1 + 16c: 9f 93 push r25 + 16e: 8f 93 push r24 + 170: 0e 94 99 0b call 0x1732 ; 0x1732 <printf> + 174: 0f 90 pop r0 + 176: 0f 90 pop r0 + 178: 0f 90 pop r0 + 17a: 0f 90 pop r0 + } + } + + if (client->state == CONNECTING){ + 17c: f7 01 movw r30, r14 + 17e: 80 81 ld r24, Z + 180: 83 30 cpi r24, 0x03 ; 3 + 182: d1 f4 brne .+52 ; 0x1b8 <hdlc_get_raw_frame+0x96> + int ret = hdlc_frame_data(&client->frameS, NULL, 0, buffer, &lenBuffer); + 184: 8e 01 movw r16, r28 + 186: 0f 5f subi r16, 0xFF ; 255 + 188: 1f 4f sbci r17, 0xFF ; 255 + 18a: 96 01 movw r18, r12 + 18c: 40 e0 ldi r20, 0x00 ; 0 + 18e: 50 e0 ldi r21, 0x00 ; 0 + 190: 60 e0 ldi r22, 0x00 ; 0 + 192: 70 e0 ldi r23, 0x00 ; 0 + 194: c7 01 movw r24, r14 + 196: 0f 96 adiw r24, 0x0f ; 15 + 198: 0e 94 48 03 call 0x690 ; 0x690 <hdlc_frame_data> + + if (ret < 0){ + 19c: 99 23 and r25, r25 + 19e: 64 f4 brge .+24 ; 0x1b8 <hdlc_get_raw_frame+0x96> + printf("err in get_frame: %d\n", ret); + 1a0: 9f 93 push r25 + 1a2: 8f 93 push r24 + 1a4: 80 e0 ldi r24, 0x00 ; 0 + 1a6: 91 e0 ldi r25, 0x01 ; 1 + 1a8: 9f 93 push r25 + 1aa: 8f 93 push r24 + 1ac: 0e 94 99 0b call 0x1732 ; 0x1732 <printf> + 1b0: 0f 90 pop r0 + 1b2: 0f 90 pop r0 + 1b4: 0f 90 pop r0 + 1b6: 0f 90 pop r0 + } + } + + if (client->state == DISCONNECTING){ + 1b8: f7 01 movw r30, r14 + 1ba: 80 81 ld r24, Z + 1bc: 84 30 cpi r24, 0x04 ; 4 + 1be: d1 f4 brne .+52 ; 0x1f4 <hdlc_get_raw_frame+0xd2> + int ret = hdlc_frame_data(&client->frame_rej, NULL, 0, buffer, &lenBuffer); + 1c0: 8e 01 movw r16, r28 + 1c2: 0f 5f subi r16, 0xFF ; 255 + 1c4: 1f 4f sbci r17, 0xFF ; 255 + 1c6: 96 01 movw r18, r12 + 1c8: 40 e0 ldi r20, 0x00 ; 0 + 1ca: 50 e0 ldi r21, 0x00 ; 0 + 1cc: 60 e0 ldi r22, 0x00 ; 0 + 1ce: 70 e0 ldi r23, 0x00 ; 0 + 1d0: c7 01 movw r24, r14 + 1d2: 47 96 adiw r24, 0x17 ; 23 + 1d4: 0e 94 48 03 call 0x690 ; 0x690 <hdlc_frame_data> + + if (ret < 0){ + 1d8: 99 23 and r25, r25 + 1da: 64 f4 brge .+24 ; 0x1f4 <hdlc_get_raw_frame+0xd2> + printf("err in get_frame: %d\n", ret); + 1dc: 9f 93 push r25 + 1de: 8f 93 push r24 + 1e0: 80 e0 ldi r24, 0x00 ; 0 + 1e2: 91 e0 ldi r25, 0x01 ; 1 + 1e4: 9f 93 push r25 + 1e6: 8f 93 push r24 + 1e8: 0e 94 99 0b call 0x1732 ; 0x1732 <printf> + 1ec: 0f 90 pop r0 + 1ee: 0f 90 pop r0 + 1f0: 0f 90 pop r0 + 1f2: 0f 90 pop r0 + } + } + + return 0; +} + 1f4: 80 e0 ldi r24, 0x00 ; 0 + 1f6: 90 e0 ldi r25, 0x00 ; 0 + 1f8: 0f 90 pop r0 + 1fa: 0f 90 pop r0 + 1fc: df 91 pop r29 + 1fe: cf 91 pop r28 + 200: 1f 91 pop r17 + 202: 0f 91 pop r16 + 204: ff 90 pop r15 + 206: ef 90 pop r14 + 208: df 90 pop r13 + 20a: cf 90 pop r12 + 20c: 08 95 ret + +0000020e <hdlc_decode_recived_raw_data>: + +int hdlc_decode_recived_raw_data(struct Client* client, uint8_t* buffer, size_t len_buffer, uint8_t* recived_data, size_t* len_recived_data){ + 20e: 2f 92 push r2 + 210: 3f 92 push r3 + 212: 4f 92 push r4 + 214: 5f 92 push r5 + 216: 6f 92 push r6 + 218: 7f 92 push r7 + 21a: 8f 92 push r8 + 21c: 9f 92 push r9 + 21e: af 92 push r10 + 220: bf 92 push r11 + 222: cf 92 push r12 + 224: df 92 push r13 + 226: ef 92 push r14 + 228: ff 92 push r15 + 22a: 0f 93 push r16 + 22c: 1f 93 push r17 + 22e: cf 93 push r28 + 230: df 93 push r29 + 232: 00 d0 rcall .+0 ; 0x234 <hdlc_decode_recived_raw_data+0x26> + 234: 00 d0 rcall .+0 ; 0x236 <hdlc_decode_recived_raw_data+0x28> + 236: cd b7 in r28, 0x3d ; 61 + 238: de b7 in r29, 0x3e ; 62 + 23a: 5c 01 movw r10, r24 + 23c: 5c 83 std Y+4, r21 ; 0x04 + 23e: 4b 83 std Y+3, r20 ; 0x03 + 240: 22 2e mov r2, r18 + 242: 33 2e mov r3, r19 + 244: 38 01 movw r6, r16 + return ERR_INVALID_SEQ_NUMBER_FRAME; + } + + client->connecting_frame_timeout = connecting_frame_timeout_bf; + return 0; +} + 246: 8d b6 in r8, 0x3d ; 61 + 248: 9e b6 in r9, 0x3e ; 62 + return 0; +} + +int hdlc_decode_recived_raw_data(struct Client* client, uint8_t* buffer, size_t len_buffer, uint8_t* recived_data, size_t* len_recived_data){ + hdlc_control_t recv_control; + uint8_t recive[len_buffer]; + 24a: c4 2e mov r12, r20 + 24c: d5 2e mov r13, r21 + 24e: 8d b7 in r24, 0x3d ; 61 + 250: 9e b7 in r25, 0x3e ; 62 + 252: 8c 19 sub r24, r12 + 254: 9d 09 sbc r25, r13 + 256: 0f b6 in r0, 0x3f ; 63 + 258: f8 94 cli + 25a: 9e bf out 0x3e, r25 ; 62 + 25c: 0f be out 0x3f, r0 ; 63 + 25e: 8d bf out 0x3d, r24 ; 61 + 260: ed b7 in r30, 0x3d ; 61 + 262: fe b7 in r31, 0x3e ; 62 + 264: 31 96 adiw r30, 0x01 ; 1 + 266: 2f 01 movw r4, r30 + + int ret = hdlc_get_data_with_state(&client->current_state_hdlc,&recv_control, buffer, len_buffer, recive, + 268: ce 01 movw r24, r28 + 26a: 03 96 adiw r24, 0x03 ; 3 + 26c: 7c 01 movw r14, r24 + 26e: 8f 01 movw r16, r30 + 270: 96 01 movw r18, r12 + 272: ab 01 movw r20, r22 + 274: be 01 movw r22, r28 + 276: 6f 5f subi r22, 0xFF ; 255 + 278: 7f 4f sbci r23, 0xFF ; 255 + 27a: c5 01 movw r24, r10 + 27c: 04 96 adiw r24, 0x04 ; 4 + 27e: 0e 94 22 02 call 0x444 ; 0x444 <hdlc_get_data_with_state> + &len_buffer); + + if (ret < 0) { + 282: 99 23 and r25, r25 + 284: 0c f4 brge .+2 ; 0x288 <hdlc_decode_recived_raw_data+0x7a> + 286: 48 c0 rjmp .+144 ; 0x318 <hdlc_decode_recived_raw_data+0x10a> + return ret; + } + + if (recv_control.seq_no != client->current_index_frame){ + 288: 8a 81 ldd r24, Y+2 ; 0x02 + 28a: 87 70 andi r24, 0x07 ; 7 + 28c: 90 e0 ldi r25, 0x00 ; 0 + 28e: f5 01 movw r30, r10 + 290: 23 81 ldd r18, Z+3 ; 0x03 + 292: 30 e0 ldi r19, 0x00 ; 0 + 294: 82 17 cp r24, r18 + 296: 93 07 cpc r25, r19 + 298: 51 f0 breq .+20 ; 0x2ae <hdlc_decode_recived_raw_data+0xa0> + client->state = DISCONNECTING; + 29a: 84 e0 ldi r24, 0x04 ; 4 + 29c: 80 83 st Z, r24 + client->frame_rej.seq_no = 0; + 29e: 80 8d ldd r24, Z+24 ; 0x18 + 2a0: 88 7f andi r24, 0xF8 ; 248 + 2a2: 80 8f std Z+24, r24 ; 0x18 + client->frame_rej.frame = S_FRAME_NACK; + 2a4: 82 e0 ldi r24, 0x02 ; 2 + 2a6: 87 8b std Z+23, r24 ; 0x17 + return ERR_INVALID_SEQ_NUMBER_FRAME; + 2a8: 8a ef ldi r24, 0xFA ; 250 + 2aa: 9f ef ldi r25, 0xFF ; 255 + 2ac: 35 c0 rjmp .+106 ; 0x318 <hdlc_decode_recived_raw_data+0x10a> + } + + switch (recv_control.frame) { + 2ae: 89 81 ldd r24, Y+1 ; 0x01 + 2b0: 81 30 cpi r24, 0x01 ; 1 + 2b2: 49 f0 breq .+18 ; 0x2c6 <hdlc_decode_recived_raw_data+0xb8> + 2b4: 18 f0 brcs .+6 ; 0x2bc <hdlc_decode_recived_raw_data+0xae> + 2b6: 82 30 cpi r24, 0x02 ; 2 + 2b8: d9 f0 breq .+54 ; 0x2f0 <hdlc_decode_recived_raw_data+0xe2> + 2ba: 25 c0 rjmp .+74 ; 0x306 <hdlc_decode_recived_raw_data+0xf8> + case S_FRAME: + client->state = READY_STATE; + break; + case I_FRAME: + for (int i = 0; i < sizeof(recive)-2; i++){ + 2bc: f2 e0 ldi r31, 0x02 ; 2 + 2be: cf 1a sub r12, r31 + 2c0: d1 08 sbc r13, r1 + 2c2: 29 f4 brne .+10 ; 0x2ce <hdlc_decode_recived_raw_data+0xc0> + 2c4: 0e c0 rjmp .+28 ; 0x2e2 <hdlc_decode_recived_raw_data+0xd4> + return ERR_INVALID_SEQ_NUMBER_FRAME; + } + + switch (recv_control.frame) { + case S_FRAME: + client->state = READY_STATE; + 2c6: 82 e0 ldi r24, 0x02 ; 2 + 2c8: f5 01 movw r30, r10 + 2ca: 80 83 st Z, r24 + break; + 2cc: 1c c0 rjmp .+56 ; 0x306 <hdlc_decode_recived_raw_data+0xf8> + 2ce: f2 01 movw r30, r4 + 2d0: a2 2d mov r26, r2 + 2d2: b3 2d mov r27, r3 + 2d4: 4c 0c add r4, r12 + 2d6: 5d 1c adc r5, r13 + case I_FRAME: + for (int i = 0; i < sizeof(recive)-2; i++){ + recived_data[i] = recive[i]; + 2d8: 81 91 ld r24, Z+ + 2da: 8d 93 st X+, r24 + switch (recv_control.frame) { + case S_FRAME: + client->state = READY_STATE; + break; + case I_FRAME: + for (int i = 0; i < sizeof(recive)-2; i++){ + 2dc: e4 15 cp r30, r4 + 2de: f5 05 cpc r31, r5 + 2e0: d9 f7 brne .-10 ; 0x2d8 <hdlc_decode_recived_raw_data+0xca> + recived_data[i] = recive[i]; + } + + *len_recived_data = sizeof(recive)-2; + 2e2: f3 01 movw r30, r6 + 2e4: d1 82 std Z+1, r13 ; 0x01 + 2e6: c0 82 st Z, r12 + + client->state = SEND; + 2e8: 86 e0 ldi r24, 0x06 ; 6 + 2ea: f5 01 movw r30, r10 + 2ec: 80 83 st Z, r24 + break; + 2ee: 0b c0 rjmp .+22 ; 0x306 <hdlc_decode_recived_raw_data+0xf8> + case S_FRAME_NACK: + client->state = DISCONNECTING; + 2f0: 84 e0 ldi r24, 0x04 ; 4 + 2f2: f5 01 movw r30, r10 + 2f4: 80 83 st Z, r24 + client->frame_rej.seq_no = 0; + 2f6: 80 8d ldd r24, Z+24 ; 0x18 + 2f8: 88 7f andi r24, 0xF8 ; 248 + 2fa: 80 8f std Z+24, r24 ; 0x18 + client->frame_rej.frame = S_FRAME_NACK; + 2fc: 82 e0 ldi r24, 0x02 ; 2 + 2fe: 87 8b std Z+23, r24 ; 0x17 + return ERR_INVALID_SEQ_NUMBER_FRAME; + 300: 8a ef ldi r24, 0xFA ; 250 + 302: 9f ef ldi r25, 0xFF ; 255 + 304: 09 c0 rjmp .+18 ; 0x318 <hdlc_decode_recived_raw_data+0x10a> + } + + client->connecting_frame_timeout = connecting_frame_timeout_bf; + 306: 80 91 43 03 lds r24, 0x0343 ; 0x800343 <connecting_frame_timeout_bf> + 30a: 90 91 44 03 lds r25, 0x0344 ; 0x800344 <connecting_frame_timeout_bf+0x1> + 30e: f5 01 movw r30, r10 + 310: 92 83 std Z+2, r25 ; 0x02 + 312: 81 83 std Z+1, r24 ; 0x01 + return 0; + 314: 80 e0 ldi r24, 0x00 ; 0 + 316: 90 e0 ldi r25, 0x00 ; 0 +} + 318: 0f b6 in r0, 0x3f ; 63 + 31a: f8 94 cli + 31c: 9e be out 0x3e, r9 ; 62 + 31e: 0f be out 0x3f, r0 ; 63 + 320: 8d be out 0x3d, r8 ; 61 + 322: 0f 90 pop r0 + 324: 0f 90 pop r0 + 326: 0f 90 pop r0 + 328: 0f 90 pop r0 + 32a: df 91 pop r29 + 32c: cf 91 pop r28 + 32e: 1f 91 pop r17 + 330: 0f 91 pop r16 + 332: ff 90 pop r15 + 334: ef 90 pop r14 + 336: df 90 pop r13 + 338: cf 90 pop r12 + 33a: bf 90 pop r11 + 33c: af 90 pop r10 + 33e: 9f 90 pop r9 + 340: 8f 90 pop r8 + 342: 7f 90 pop r7 + 344: 6f 90 pop r6 + 346: 5f 90 pop r5 + 348: 4f 90 pop r4 + 34a: 3f 90 pop r3 + 34c: 2f 90 pop r2 + 34e: 08 95 ret + +00000350 <hdlc_timeout_handler>: + +int hdlc_timeout_handler(struct Client* client, int delta_time){ + client->connecting_frame_timeout -= delta_time; + 350: fc 01 movw r30, r24 + 352: 21 81 ldd r18, Z+1 ; 0x01 + 354: 32 81 ldd r19, Z+2 ; 0x02 + 356: 26 1b sub r18, r22 + 358: 37 0b sbc r19, r23 + 35a: 32 83 std Z+2, r19 ; 0x02 + 35c: 21 83 std Z+1, r18 ; 0x01 + + if (client->connecting_frame_timeout <= 0){ + 35e: 12 16 cp r1, r18 + 360: 13 06 cpc r1, r19 + 362: 1c f4 brge .+6 ; 0x36a <hdlc_timeout_handler+0x1a> + return ERR_FRAME_TIME_OUT; + } + return 0; + 364: 80 e0 ldi r24, 0x00 ; 0 + 366: 90 e0 ldi r25, 0x00 ; 0 + 368: 08 95 ret + +int hdlc_timeout_handler(struct Client* client, int delta_time){ + client->connecting_frame_timeout -= delta_time; + + if (client->connecting_frame_timeout <= 0){ + return ERR_FRAME_TIME_OUT; + 36a: 8b ef ldi r24, 0xFB ; 251 + 36c: 9f ef ldi r25, 0xFF ; 255 + } + return 0; + 36e: 08 95 ret + +00000370 <calc_fcs>: + 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, + 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, + 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; + +FCS_SIZE calc_fcs(FCS_SIZE fcs, unsigned char value) { + return (fcs >> 8) ^ fcstab[(fcs ^ value) & 0xff]; + 370: fc 01 movw r30, r24 + 372: e6 27 eor r30, r22 + 374: ff 27 eor r31, r31 + 376: ee 0f add r30, r30 + 378: ff 1f adc r31, r31 + 37a: ea 5e subi r30, 0xEA ; 234 + 37c: fe 4f sbci r31, 0xFE ; 254 + 37e: 89 2f mov r24, r25 + 380: 99 27 eor r25, r25 + 382: 20 81 ld r18, Z + 384: 31 81 ldd r19, Z+1 ; 0x01 + 386: 82 27 eor r24, r18 + 388: 93 27 eor r25, r19 + 38a: 08 95 ret + +0000038c <hdlc_escape_value>: +//int hdlc_get_data(hdlc_control_t *control, const char *src, +// unsigned int src_len, char *dest, unsigned int *dest_len) +int hdlc_get_data(hdlc_control_t *control, uint8_t *src, + size_t src_len, uint8_t *dest, size_t *dest_len){ + return hdlc_get_data_with_state(&hdlc_state, control, src, src_len, dest, dest_len); +} + 38c: fa 01 movw r30, r20 + 38e: 93 e8 ldi r25, 0x83 ; 131 + 390: 98 0f add r25, r24 + 392: 92 30 cpi r25, 0x02 ; 2 + 394: 70 f4 brcc .+28 ; 0x3b2 <hdlc_escape_value+0x26> + 396: 20 81 ld r18, Z + 398: 31 81 ldd r19, Z+1 ; 0x01 + 39a: a9 01 movw r20, r18 + 39c: 4f 5f subi r20, 0xFF ; 255 + 39e: 5f 4f sbci r21, 0xFF ; 255 + 3a0: 51 83 std Z+1, r21 ; 0x01 + 3a2: 40 83 st Z, r20 + 3a4: db 01 movw r26, r22 + 3a6: a2 0f add r26, r18 + 3a8: b3 1f adc r27, r19 + 3aa: 9d e7 ldi r25, 0x7D ; 125 + 3ac: 9c 93 st X, r25 + 3ae: 90 e2 ldi r25, 0x20 ; 32 + 3b0: 89 27 eor r24, r25 + 3b2: 20 81 ld r18, Z + 3b4: 31 81 ldd r19, Z+1 ; 0x01 + 3b6: a9 01 movw r20, r18 + 3b8: 4f 5f subi r20, 0xFF ; 255 + 3ba: 5f 4f sbci r21, 0xFF ; 255 + 3bc: 51 83 std Z+1, r21 ; 0x01 + 3be: 40 83 st Z, r20 + 3c0: fb 01 movw r30, r22 + 3c2: e2 0f add r30, r18 + 3c4: f3 1f adc r31, r19 + 3c6: 80 83 st Z, r24 + 3c8: 08 95 ret + +000003ca <hdlc_get_control_type>: + 3ca: 98 2f mov r25, r24 + 3cc: 80 ff sbrs r24, 0 + 3ce: 0b c0 rjmp .+22 ; 0x3e6 <hdlc_get_control_type+0x1c> + 3d0: 86 95 lsr r24 + 3d2: 86 95 lsr r24 + 3d4: 83 70 andi r24, 0x03 ; 3 + 3d6: 11 f0 breq .+4 ; 0x3dc <hdlc_get_control_type+0x12> + 3d8: 82 e0 ldi r24, 0x02 ; 2 + 3da: 01 c0 rjmp .+2 ; 0x3de <hdlc_get_control_type+0x14> + 3dc: 81 e0 ldi r24, 0x01 ; 1 + 3de: 92 95 swap r25 + 3e0: 96 95 lsr r25 + 3e2: 97 70 andi r25, 0x07 ; 7 + 3e4: 03 c0 rjmp .+6 ; 0x3ec <hdlc_get_control_type+0x22> + 3e6: 96 95 lsr r25 + 3e8: 97 70 andi r25, 0x07 ; 7 + 3ea: 80 e0 ldi r24, 0x00 ; 0 + 3ec: 97 70 andi r25, 0x07 ; 7 + 3ee: 08 95 ret + +000003f0 <hdlc_frame_control_type>: + 3f0: fc 01 movw r30, r24 + 3f2: 90 81 ld r25, Z + 3f4: 91 30 cpi r25, 0x01 ; 1 + 3f6: 49 f0 breq .+18 ; 0x40a <__LOCK_REGION_LENGTH__+0xa> + 3f8: 18 f0 brcs .+6 ; 0x400 <__LOCK_REGION_LENGTH__> + 3fa: 92 30 cpi r25, 0x02 ; 2 + 3fc: 61 f0 breq .+24 ; 0x416 <__LOCK_REGION_LENGTH__+0x16> + 3fe: 11 c0 rjmp .+34 ; 0x422 <__LOCK_REGION_LENGTH__+0x22> + 400: 81 81 ldd r24, Z+1 ; 0x01 + 402: 87 70 andi r24, 0x07 ; 7 + 404: 88 0f add r24, r24 + 406: 80 61 ori r24, 0x10 ; 16 + 408: 08 95 ret + 40a: 81 81 ldd r24, Z+1 ; 0x01 + 40c: 82 95 swap r24 + 40e: 88 0f add r24, r24 + 410: 80 7e andi r24, 0xE0 ; 224 + 412: 81 60 ori r24, 0x01 ; 1 + 414: 08 95 ret + 416: 81 81 ldd r24, Z+1 ; 0x01 + 418: 82 95 swap r24 + 41a: 88 0f add r24, r24 + 41c: 80 7e andi r24, 0xE0 ; 224 + 41e: 89 60 ori r24, 0x09 ; 9 + 420: 08 95 ret + 422: 80 e0 ldi r24, 0x00 ; 0 + 424: 08 95 ret + +00000426 <hdlc_get_data_reset_with_state>: + 426: fc 01 movw r30, r24 + 428: 8f ef ldi r24, 0xFF ; 255 + 42a: 9f ef ldi r25, 0xFF ; 255 + 42c: 92 83 std Z+2, r25 ; 0x02 + 42e: 81 83 std Z+1, r24 ; 0x01 + 430: 96 83 std Z+6, r25 ; 0x06 + 432: 85 83 std Z+5, r24 ; 0x05 + 434: 94 83 std Z+4, r25 ; 0x04 + 436: 83 83 std Z+3, r24 ; 0x03 + 438: 12 86 std Z+10, r1 ; 0x0a + 43a: 11 86 std Z+9, r1 ; 0x09 + 43c: 10 86 std Z+8, r1 ; 0x08 + 43e: 17 82 std Z+7, r1 ; 0x07 + 440: 10 82 st Z, r1 + 442: 08 95 ret + +00000444 <hdlc_get_data_with_state>: + 444: 3f 92 push r3 + 446: 4f 92 push r4 + 448: 5f 92 push r5 + 44a: 6f 92 push r6 + 44c: 7f 92 push r7 + 44e: 8f 92 push r8 + 450: 9f 92 push r9 + 452: af 92 push r10 + 454: bf 92 push r11 + 456: cf 92 push r12 + 458: df 92 push r13 + 45a: ef 92 push r14 + 45c: ff 92 push r15 + 45e: 0f 93 push r16 + 460: 1f 93 push r17 + 462: cf 93 push r28 + 464: df 93 push r29 + 466: 00 d0 rcall .+0 ; 0x468 <hdlc_get_data_with_state+0x24> + 468: 00 d0 rcall .+0 ; 0x46a <hdlc_get_data_with_state+0x26> + 46a: cd b7 in r28, 0x3d ; 61 + 46c: de b7 in r29, 0x3e ; 62 + 46e: 00 97 sbiw r24, 0x00 ; 0 + 470: 09 f4 brne .+2 ; 0x474 <hdlc_get_data_with_state+0x30> + 472: ea c0 rjmp .+468 ; 0x648 <hdlc_get_data_with_state+0x204> + 474: 61 15 cp r22, r1 + 476: 71 05 cpc r23, r1 + 478: 09 f4 brne .+2 ; 0x47c <hdlc_get_data_with_state+0x38> + 47a: e9 c0 rjmp .+466 ; 0x64e <hdlc_get_data_with_state+0x20a> + 47c: 41 15 cp r20, r1 + 47e: 51 05 cpc r21, r1 + 480: 09 f4 brne .+2 ; 0x484 <hdlc_get_data_with_state+0x40> + 482: e8 c0 rjmp .+464 ; 0x654 <hdlc_get_data_with_state+0x210> + 484: 01 15 cp r16, r1 + 486: 11 05 cpc r17, r1 + 488: 09 f4 brne .+2 ; 0x48c <hdlc_get_data_with_state+0x48> + 48a: e7 c0 rjmp .+462 ; 0x65a <hdlc_get_data_with_state+0x216> + 48c: e1 14 cp r14, r1 + 48e: f1 04 cpc r15, r1 + 490: 09 f4 brne .+2 ; 0x494 <hdlc_get_data_with_state+0x50> + 492: e6 c0 rjmp .+460 ; 0x660 <hdlc_get_data_with_state+0x21c> + 494: 38 01 movw r6, r16 + 496: 49 01 movw r8, r18 + 498: 7a 83 std Y+2, r23 ; 0x02 + 49a: 69 83 std Y+1, r22 ; 0x01 + 49c: 9c 83 std Y+4, r25 ; 0x04 + 49e: 8b 83 std Y+3, r24 ; 0x03 + 4a0: 21 15 cp r18, r1 + 4a2: 31 05 cpc r19, r1 + 4a4: 09 f4 brne .+2 ; 0x4a8 <hdlc_get_data_with_state+0x64> + 4a6: 99 c0 rjmp .+306 ; 0x5da <hdlc_get_data_with_state+0x196> + 4a8: 8a 01 movw r16, r20 + 4aa: c1 2c mov r12, r1 + 4ac: d1 2c mov r13, r1 + 4ae: 68 94 set + 4b0: 44 24 eor r4, r4 + 4b2: 45 f8 bld r4, 5 + 4b4: 33 24 eor r3, r3 + 4b6: 33 94 inc r3 + 4b8: 59 01 movw r10, r18 + 4ba: 21 e0 ldi r18, 0x01 ; 1 + 4bc: a2 1a sub r10, r18 + 4be: b1 08 sbc r11, r1 + 4c0: ab 81 ldd r26, Y+3 ; 0x03 + 4c2: bc 81 ldd r27, Y+4 ; 0x04 + 4c4: 13 96 adiw r26, 0x03 ; 3 + 4c6: 8d 91 ld r24, X+ + 4c8: 9c 91 ld r25, X + 4ca: 14 97 sbiw r26, 0x04 ; 4 + 4cc: 99 23 and r25, r25 + 4ce: 9c f4 brge .+38 ; 0x4f6 <hdlc_get_data_with_state+0xb2> + 4d0: f8 01 movw r30, r16 + 4d2: 80 81 ld r24, Z + 4d4: 8e 37 cpi r24, 0x7E ; 126 + 4d6: 09 f0 breq .+2 ; 0x4da <hdlc_get_data_with_state+0x96> + 4d8: 70 c0 rjmp .+224 ; 0x5ba <hdlc_get_data_with_state+0x176> + 4da: ca 14 cp r12, r10 + 4dc: db 04 cpc r13, r11 + 4de: 20 f4 brcc .+8 ; 0x4e8 <hdlc_get_data_with_state+0xa4> + 4e0: 81 81 ldd r24, Z+1 ; 0x01 + 4e2: 8e 37 cpi r24, 0x7E ; 126 + 4e4: 09 f4 brne .+2 ; 0x4e8 <hdlc_get_data_with_state+0xa4> + 4e6: 70 c0 rjmp .+224 ; 0x5c8 <hdlc_get_data_with_state+0x184> + 4e8: eb 81 ldd r30, Y+3 ; 0x03 + 4ea: fc 81 ldd r31, Y+4 ; 0x04 + 4ec: 87 81 ldd r24, Z+7 ; 0x07 + 4ee: 90 85 ldd r25, Z+8 ; 0x08 + 4f0: 94 83 std Z+4, r25 ; 0x04 + 4f2: 83 83 std Z+3, r24 ; 0x03 + 4f4: 62 c0 rjmp .+196 ; 0x5ba <hdlc_get_data_with_state+0x176> + 4f6: f8 01 movw r30, r16 + 4f8: 50 80 ld r5, Z + 4fa: 2e e7 ldi r18, 0x7E ; 126 + 4fc: 52 12 cpse r5, r18 + 4fe: 19 c0 rjmp .+50 ; 0x532 <hdlc_get_data_with_state+0xee> + 500: ca 14 cp r12, r10 + 502: db 04 cpc r13, r11 + 504: 20 f4 brcc .+8 ; 0x50e <hdlc_get_data_with_state+0xca> + 506: 21 81 ldd r18, Z+1 ; 0x01 + 508: 2e 37 cpi r18, 0x7E ; 126 + 50a: 09 f4 brne .+2 ; 0x50e <hdlc_get_data_with_state+0xca> + 50c: 5d c0 rjmp .+186 ; 0x5c8 <hdlc_get_data_with_state+0x184> + 50e: ab 81 ldd r26, Y+3 ; 0x03 + 510: bc 81 ldd r27, Y+4 ; 0x04 + 512: 17 96 adiw r26, 0x07 ; 7 + 514: 2d 91 ld r18, X+ + 516: 3c 91 ld r19, X + 518: 18 97 sbiw r26, 0x08 ; 8 + 51a: ac 01 movw r20, r24 + 51c: 4f 5f subi r20, 0xFF ; 255 + 51e: 5f 4f sbci r21, 0xFF ; 255 + 520: 42 17 cp r20, r18 + 522: 53 07 cpc r21, r19 + 524: 09 f4 brne .+2 ; 0x528 <hdlc_get_data_with_state+0xe4> + 526: 50 c0 rjmp .+160 ; 0x5c8 <hdlc_get_data_with_state+0x184> + 528: 16 96 adiw r26, 0x06 ; 6 + 52a: 3c 93 st X, r19 + 52c: 2e 93 st -X, r18 + 52e: 15 97 sbiw r26, 0x05 ; 5 + 530: 5d c0 rjmp .+186 ; 0x5ec <hdlc_get_data_with_state+0x1a8> + 532: bd e7 ldi r27, 0x7D ; 125 + 534: 5b 12 cpse r5, r27 + 536: 04 c0 rjmp .+8 ; 0x540 <hdlc_get_data_with_state+0xfc> + 538: eb 81 ldd r30, Y+3 ; 0x03 + 53a: fc 81 ldd r31, Y+4 ; 0x04 + 53c: 30 82 st Z, r3 + 53e: 3d c0 rjmp .+122 ; 0x5ba <hdlc_get_data_with_state+0x176> + 540: ab 81 ldd r26, Y+3 ; 0x03 + 542: bc 81 ldd r27, Y+4 ; 0x04 + 544: 8c 91 ld r24, X + 546: 88 23 and r24, r24 + 548: 19 f0 breq .+6 ; 0x550 <hdlc_get_data_with_state+0x10c> + 54a: 1c 92 st X, r1 + 54c: 50 80 ld r5, Z + 54e: 54 24 eor r5, r4 + 550: 65 2d mov r22, r5 + 552: eb 81 ldd r30, Y+3 ; 0x03 + 554: fc 81 ldd r31, Y+4 ; 0x04 + 556: 81 81 ldd r24, Z+1 ; 0x01 + 558: 92 81 ldd r25, Z+2 ; 0x02 + 55a: 0e 94 b8 01 call 0x370 ; 0x370 <calc_fcs> + 55e: ab 81 ldd r26, Y+3 ; 0x03 + 560: bc 81 ldd r27, Y+4 ; 0x04 + 562: 12 96 adiw r26, 0x02 ; 2 + 564: 9c 93 st X, r25 + 566: 8e 93 st -X, r24 + 568: 11 97 sbiw r26, 0x01 ; 1 + 56a: 17 96 adiw r26, 0x07 ; 7 + 56c: 2d 91 ld r18, X+ + 56e: 3c 91 ld r19, X + 570: 18 97 sbiw r26, 0x08 ; 8 + 572: 13 96 adiw r26, 0x03 ; 3 + 574: 8d 91 ld r24, X+ + 576: 9c 91 ld r25, X + 578: 14 97 sbiw r26, 0x04 ; 4 + 57a: 02 96 adiw r24, 0x02 ; 2 + 57c: 28 17 cp r18, r24 + 57e: 39 07 cpc r19, r25 + 580: 41 f4 brne .+16 ; 0x592 <hdlc_get_data_with_state+0x14e> + 582: 85 2d mov r24, r5 + 584: 0e 94 e5 01 call 0x3ca ; 0x3ca <hdlc_get_control_type> + 588: e9 81 ldd r30, Y+1 ; 0x01 + 58a: fa 81 ldd r31, Y+2 ; 0x02 + 58c: 91 83 std Z+1, r25 ; 0x01 + 58e: 80 83 st Z, r24 + 590: 14 c0 rjmp .+40 ; 0x5ba <hdlc_get_data_with_state+0x176> + 592: 82 17 cp r24, r18 + 594: 93 07 cpc r25, r19 + 596: 8c f4 brge .+34 ; 0x5ba <hdlc_get_data_with_state+0x176> + 598: ab 81 ldd r26, Y+3 ; 0x03 + 59a: bc 81 ldd r27, Y+4 ; 0x04 + 59c: 19 96 adiw r26, 0x09 ; 9 + 59e: 8d 91 ld r24, X+ + 5a0: 9c 91 ld r25, X + 5a2: 1a 97 sbiw r26, 0x0a ; 10 + 5a4: 9c 01 movw r18, r24 + 5a6: 2f 5f subi r18, 0xFF ; 255 + 5a8: 3f 4f sbci r19, 0xFF ; 255 + 5aa: 1a 96 adiw r26, 0x0a ; 10 + 5ac: 3c 93 st X, r19 + 5ae: 2e 93 st -X, r18 + 5b0: 19 97 sbiw r26, 0x09 ; 9 + 5b2: f3 01 movw r30, r6 + 5b4: e8 0f add r30, r24 + 5b6: f9 1f adc r31, r25 + 5b8: 50 82 st Z, r5 + 5ba: eb 81 ldd r30, Y+3 ; 0x03 + 5bc: fc 81 ldd r31, Y+4 ; 0x04 + 5be: 87 81 ldd r24, Z+7 ; 0x07 + 5c0: 90 85 ldd r25, Z+8 ; 0x08 + 5c2: 01 96 adiw r24, 0x01 ; 1 + 5c4: 90 87 std Z+8, r25 ; 0x08 + 5c6: 87 83 std Z+7, r24 ; 0x07 + 5c8: ff ef ldi r31, 0xFF ; 255 + 5ca: cf 1a sub r12, r31 + 5cc: df 0a sbc r13, r31 + 5ce: 0f 5f subi r16, 0xFF ; 255 + 5d0: 1f 4f sbci r17, 0xFF ; 255 + 5d2: 8c 14 cp r8, r12 + 5d4: 9d 04 cpc r9, r13 + 5d6: 09 f0 breq .+2 ; 0x5da <hdlc_get_data_with_state+0x196> + 5d8: 73 cf rjmp .-282 ; 0x4c0 <hdlc_get_data_with_state+0x7c> + 5da: ab 81 ldd r26, Y+3 ; 0x03 + 5dc: bc 81 ldd r27, Y+4 ; 0x04 + 5de: 13 96 adiw r26, 0x03 ; 3 + 5e0: 8d 91 ld r24, X+ + 5e2: 9c 91 ld r25, X + 5e4: 14 97 sbiw r26, 0x04 ; 4 + 5e6: 99 23 and r25, r25 + 5e8: 3c f0 brlt .+14 ; 0x5f8 <hdlc_get_data_with_state+0x1b4> + 5ea: 64 01 movw r12, r8 + 5ec: eb 81 ldd r30, Y+3 ; 0x03 + 5ee: fc 81 ldd r31, Y+4 ; 0x04 + 5f0: 25 81 ldd r18, Z+5 ; 0x05 + 5f2: 36 81 ldd r19, Z+6 ; 0x06 + 5f4: 33 23 and r19, r19 + 5f6: 34 f4 brge .+12 ; 0x604 <hdlc_get_data_with_state+0x1c0> + 5f8: d7 01 movw r26, r14 + 5fa: 1d 92 st X+, r1 + 5fc: 1c 92 st X, r1 + 5fe: 8e e0 ldi r24, 0x0E ; 14 + 600: 92 ed ldi r25, 0xD2 ; 210 + 602: 30 c0 rjmp .+96 ; 0x664 <hdlc_get_data_with_state+0x220> + 604: 04 96 adiw r24, 0x04 ; 4 + 606: 28 17 cp r18, r24 + 608: 39 07 cpc r19, r25 + 60a: 3c f0 brlt .+14 ; 0x61a <hdlc_get_data_with_state+0x1d6> + 60c: eb 81 ldd r30, Y+3 ; 0x03 + 60e: fc 81 ldd r31, Y+4 ; 0x04 + 610: 81 81 ldd r24, Z+1 ; 0x01 + 612: 92 81 ldd r25, Z+2 ; 0x02 + 614: 88 3b cpi r24, 0xB8 ; 184 + 616: 90 4f sbci r25, 0xF0 ; 240 + 618: 31 f0 breq .+12 ; 0x626 <hdlc_get_data_with_state+0x1e2> + 61a: d7 01 movw r26, r14 + 61c: cd 92 st X+, r12 + 61e: dc 92 st X, r13 + 620: 0e e0 ldi r16, 0x0E ; 14 + 622: 12 ed ldi r17, 0xD2 ; 210 + 624: 0a c0 rjmp .+20 ; 0x63a <hdlc_get_data_with_state+0x1f6> + 626: eb 81 ldd r30, Y+3 ; 0x03 + 628: fc 81 ldd r31, Y+4 ; 0x04 + 62a: 81 85 ldd r24, Z+9 ; 0x09 + 62c: 92 85 ldd r25, Z+10 ; 0x0a + 62e: 02 97 sbiw r24, 0x02 ; 2 + 630: d7 01 movw r26, r14 + 632: 8d 93 st X+, r24 + 634: 9c 93 st X, r25 + 636: 0c 2d mov r16, r12 + 638: 1d 2d mov r17, r13 + 63a: 8b 81 ldd r24, Y+3 ; 0x03 + 63c: 9c 81 ldd r25, Y+4 ; 0x04 + 63e: 0e 94 13 02 call 0x426 ; 0x426 <hdlc_get_data_reset_with_state> + 642: 80 2f mov r24, r16 + 644: 91 2f mov r25, r17 + 646: 0e c0 rjmp .+28 ; 0x664 <hdlc_get_data_with_state+0x220> + 648: 8e e0 ldi r24, 0x0E ; 14 + 64a: 92 ed ldi r25, 0xD2 ; 210 + 64c: 0b c0 rjmp .+22 ; 0x664 <hdlc_get_data_with_state+0x220> + 64e: 8e e0 ldi r24, 0x0E ; 14 + 650: 92 ed ldi r25, 0xD2 ; 210 + 652: 08 c0 rjmp .+16 ; 0x664 <hdlc_get_data_with_state+0x220> + 654: 8e e0 ldi r24, 0x0E ; 14 + 656: 92 ed ldi r25, 0xD2 ; 210 + 658: 05 c0 rjmp .+10 ; 0x664 <hdlc_get_data_with_state+0x220> + 65a: 8e e0 ldi r24, 0x0E ; 14 + 65c: 92 ed ldi r25, 0xD2 ; 210 + 65e: 02 c0 rjmp .+4 ; 0x664 <hdlc_get_data_with_state+0x220> + 660: 8e e0 ldi r24, 0x0E ; 14 + 662: 92 ed ldi r25, 0xD2 ; 210 + 664: 0f 90 pop r0 + 666: 0f 90 pop r0 + 668: 0f 90 pop r0 + 66a: 0f 90 pop r0 + 66c: df 91 pop r29 + 66e: cf 91 pop r28 + 670: 1f 91 pop r17 + 672: 0f 91 pop r16 + 674: ff 90 pop r15 + 676: ef 90 pop r14 + 678: df 90 pop r13 + 67a: cf 90 pop r12 + 67c: bf 90 pop r11 + 67e: af 90 pop r10 + 680: 9f 90 pop r9 + 682: 8f 90 pop r8 + 684: 7f 90 pop r7 + 686: 6f 90 pop r6 + 688: 5f 90 pop r5 + 68a: 4f 90 pop r4 + 68c: 3f 90 pop r3 + 68e: 08 95 ret + +00000690 <hdlc_frame_data>: +} + +//int hdlc_frame_data(hdlc_control_t *control, const char *src, +// unsigned int src_len, char *dest, unsigned int *dest_len) +int hdlc_frame_data(hdlc_control_t *control, uint8_t *src, + size_t src_len, uint8_t *dest, size_t *dest_len){ + 690: 5f 92 push r5 + 692: 6f 92 push r6 + 694: 7f 92 push r7 + 696: 8f 92 push r8 + 698: 9f 92 push r9 + 69a: af 92 push r10 + 69c: bf 92 push r11 + 69e: cf 92 push r12 + 6a0: df 92 push r13 + 6a2: ef 92 push r14 + 6a4: ff 92 push r15 + 6a6: 0f 93 push r16 + 6a8: 1f 93 push r17 + 6aa: cf 93 push r28 + 6ac: df 93 push r29 + 6ae: 00 d0 rcall .+0 ; 0x6b0 <hdlc_frame_data+0x20> + 6b0: cd b7 in r28, 0x3d ; 61 + 6b2: de b7 in r29, 0x3e ; 62 + int dest_index = 0; + unsigned char value = 0; + FCS_SIZE fcs = FCS_INIT_VALUE; + + // Make sure that all parameters are valid + if (!control || (!src && (src_len > 0)) || !dest || !dest_len) { + 6b4: 00 97 sbiw r24, 0x00 ; 0 + 6b6: 09 f4 brne .+2 ; 0x6ba <hdlc_frame_data+0x2a> + 6b8: 73 c0 rjmp .+230 ; 0x7a0 <hdlc_frame_data+0x110> + 6ba: 61 15 cp r22, r1 + 6bc: 71 05 cpc r23, r1 + 6be: 21 f4 brne .+8 ; 0x6c8 <hdlc_frame_data+0x38> + 6c0: 41 15 cp r20, r1 + 6c2: 51 05 cpc r21, r1 + 6c4: 09 f0 breq .+2 ; 0x6c8 <hdlc_frame_data+0x38> + 6c6: 6f c0 rjmp .+222 ; 0x7a6 <hdlc_frame_data+0x116> + 6c8: 21 15 cp r18, r1 + 6ca: 31 05 cpc r19, r1 + 6cc: 09 f4 brne .+2 ; 0x6d0 <hdlc_frame_data+0x40> + 6ce: 6e c0 rjmp .+220 ; 0x7ac <hdlc_frame_data+0x11c> + 6d0: 01 15 cp r16, r1 + 6d2: 11 05 cpc r17, r1 + 6d4: 09 f4 brne .+2 ; 0x6d8 <hdlc_frame_data+0x48> + 6d6: 6d c0 rjmp .+218 ; 0x7b2 <hdlc_frame_data+0x122> + 6d8: 38 01 movw r6, r16 + 6da: 79 01 movw r14, r18 + 6dc: 5a 01 movw r10, r20 + 6de: 4b 01 movw r8, r22 + 6e0: 8c 01 movw r16, r24 + return -EINVAL; + } + + // Start by adding the start flag sequence + dest[dest_index++] = HDLC_FLAG_SEQUENCE; + 6e2: 81 e0 ldi r24, 0x01 ; 1 + 6e4: 90 e0 ldi r25, 0x00 ; 0 + 6e6: 9a 83 std Y+2, r25 ; 0x02 + 6e8: 89 83 std Y+1, r24 ; 0x01 + 6ea: 8e e7 ldi r24, 0x7E ; 126 + 6ec: f9 01 movw r30, r18 + 6ee: 80 83 st Z, r24 + + // Add the all-station address from HDLC (broadcast) + fcs = calc_fcs(fcs, HDLC_ALL_STATION_ADDR); + 6f0: 6f ef ldi r22, 0xFF ; 255 + 6f2: 8f ef ldi r24, 0xFF ; 255 + 6f4: 9f ef ldi r25, 0xFF ; 255 + 6f6: 0e 94 b8 01 call 0x370 ; 0x370 <calc_fcs> + 6fa: 6c 01 movw r12, r24 + hdlc_escape_value(HDLC_ALL_STATION_ADDR, dest, &dest_index); + 6fc: ae 01 movw r20, r28 + 6fe: 4f 5f subi r20, 0xFF ; 255 + 700: 5f 4f sbci r21, 0xFF ; 255 + 702: b7 01 movw r22, r14 + 704: 8f ef ldi r24, 0xFF ; 255 + 706: 0e 94 c6 01 call 0x38c ; 0x38c <hdlc_escape_value> + + // Add the framed control field value + value = hdlc_frame_control_type(control); + 70a: c8 01 movw r24, r16 + 70c: 0e 94 f8 01 call 0x3f0 ; 0x3f0 <hdlc_frame_control_type> + 710: 58 2e mov r5, r24 + fcs = calc_fcs(fcs, value); + 712: 68 2f mov r22, r24 + 714: c6 01 movw r24, r12 + 716: 0e 94 b8 01 call 0x370 ; 0x370 <calc_fcs> + 71a: 6c 01 movw r12, r24 + hdlc_escape_value(value, dest, &dest_index); + 71c: ae 01 movw r20, r28 + 71e: 4f 5f subi r20, 0xFF ; 255 + 720: 5f 4f sbci r21, 0xFF ; 255 + 722: b7 01 movw r22, r14 + 724: 85 2d mov r24, r5 + 726: 0e 94 c6 01 call 0x38c ; 0x38c <hdlc_escape_value> + + // Only DATA frames should contain data + if (control->frame == I_FRAME) { + 72a: f8 01 movw r30, r16 + 72c: 80 81 ld r24, Z + 72e: 81 11 cpse r24, r1 + 730: 19 c0 rjmp .+50 ; 0x764 <hdlc_frame_data+0xd4> + // Calculate FCS and escape data + for (i = 0; i < src_len; i++) { + 732: a1 14 cp r10, r1 + 734: b1 04 cpc r11, r1 + 736: b1 f0 breq .+44 ; 0x764 <hdlc_frame_data+0xd4> + 738: 84 01 movw r16, r8 + 73a: 8a 0c add r8, r10 + 73c: 9b 1c adc r9, r11 + 73e: 58 01 movw r10, r16 + fcs = calc_fcs(fcs, src[i]); + 740: f8 01 movw r30, r16 + 742: 61 91 ld r22, Z+ + 744: 8f 01 movw r16, r30 + 746: c6 01 movw r24, r12 + 748: 0e 94 b8 01 call 0x370 ; 0x370 <calc_fcs> + 74c: 6c 01 movw r12, r24 + hdlc_escape_value(src[i], dest, &dest_index); + 74e: ae 01 movw r20, r28 + 750: 4f 5f subi r20, 0xFF ; 255 + 752: 5f 4f sbci r21, 0xFF ; 255 + 754: b7 01 movw r22, r14 + 756: f5 01 movw r30, r10 + 758: 80 81 ld r24, Z + 75a: 0e 94 c6 01 call 0x38c ; 0x38c <hdlc_escape_value> + hdlc_escape_value(value, dest, &dest_index); + + // Only DATA frames should contain data + if (control->frame == I_FRAME) { + // Calculate FCS and escape data + for (i = 0; i < src_len; i++) { + 75e: 80 16 cp r8, r16 + 760: 91 06 cpc r9, r17 + 762: 69 f7 brne .-38 ; 0x73e <hdlc_frame_data+0xae> + hdlc_escape_value(src[i], dest, &dest_index); + } + } + + // Invert the FCS value accordingly to the specification + fcs ^= FCS_INVERT_MASK; + 764: c0 94 com r12 + 766: d0 94 com r13 + + // Run through the FCS bytes and escape the values + for (i = 0; i < sizeof(fcs); i++) { + value = ((fcs >> (8 * i)) & 0xFF); + hdlc_escape_value(value, dest, &dest_index); + 768: ae 01 movw r20, r28 + 76a: 4f 5f subi r20, 0xFF ; 255 + 76c: 5f 4f sbci r21, 0xFF ; 255 + 76e: b7 01 movw r22, r14 + 770: 8c 2d mov r24, r12 + 772: 0e 94 c6 01 call 0x38c ; 0x38c <hdlc_escape_value> + 776: ae 01 movw r20, r28 + 778: 4f 5f subi r20, 0xFF ; 255 + 77a: 5f 4f sbci r21, 0xFF ; 255 + 77c: b7 01 movw r22, r14 + 77e: 8d 2d mov r24, r13 + 780: 0e 94 c6 01 call 0x38c ; 0x38c <hdlc_escape_value> + } + + // Add end flag sequence and update length of frame + dest[dest_index++] = HDLC_FLAG_SEQUENCE; + 784: 89 81 ldd r24, Y+1 ; 0x01 + 786: 9a 81 ldd r25, Y+2 ; 0x02 + 788: f7 01 movw r30, r14 + 78a: e8 0f add r30, r24 + 78c: f9 1f adc r31, r25 + 78e: 2e e7 ldi r18, 0x7E ; 126 + 790: 20 83 st Z, r18 + *dest_len = dest_index; + 792: 01 96 adiw r24, 0x01 ; 1 + 794: f3 01 movw r30, r6 + 796: 91 83 std Z+1, r25 ; 0x01 + 798: 80 83 st Z, r24 + + return 0; + 79a: 80 e0 ldi r24, 0x00 ; 0 + 79c: 90 e0 ldi r25, 0x00 ; 0 + 79e: 0b c0 rjmp .+22 ; 0x7b6 <hdlc_frame_data+0x126> + unsigned char value = 0; + FCS_SIZE fcs = FCS_INIT_VALUE; + + // Make sure that all parameters are valid + if (!control || (!src && (src_len > 0)) || !dest || !dest_len) { + return -EINVAL; + 7a0: 8e e0 ldi r24, 0x0E ; 14 + 7a2: 92 ed ldi r25, 0xD2 ; 210 + 7a4: 08 c0 rjmp .+16 ; 0x7b6 <hdlc_frame_data+0x126> + 7a6: 8e e0 ldi r24, 0x0E ; 14 + 7a8: 92 ed ldi r25, 0xD2 ; 210 + 7aa: 05 c0 rjmp .+10 ; 0x7b6 <hdlc_frame_data+0x126> + 7ac: 8e e0 ldi r24, 0x0E ; 14 + 7ae: 92 ed ldi r25, 0xD2 ; 210 + 7b0: 02 c0 rjmp .+4 ; 0x7b6 <hdlc_frame_data+0x126> + 7b2: 8e e0 ldi r24, 0x0E ; 14 + 7b4: 92 ed ldi r25, 0xD2 ; 210 + // Add end flag sequence and update length of frame + dest[dest_index++] = HDLC_FLAG_SEQUENCE; + *dest_len = dest_index; + + return 0; + 7b6: 0f 90 pop r0 + 7b8: 0f 90 pop r0 + 7ba: df 91 pop r29 + 7bc: cf 91 pop r28 + 7be: 1f 91 pop r17 + 7c0: 0f 91 pop r16 + 7c2: ff 90 pop r15 + 7c4: ef 90 pop r14 + 7c6: df 90 pop r13 + 7c8: cf 90 pop r12 + 7ca: bf 90 pop r11 + 7cc: af 90 pop r10 + 7ce: 9f 90 pop r9 + 7d0: 8f 90 pop r8 + 7d2: 7f 90 pop r7 + 7d4: 6f 90 pop r6 + 7d6: 5f 90 pop r5 + 7d8: 08 95 ret + +000007da <lcd_read>: + register char c; + + while ( (c = pgm_read_byte(progmem_s++)) ) { + lcd_putc(c); + } +} + 7da: cf 93 push r28 + 7dc: 88 23 and r24, r24 + 7de: 31 f0 breq .+12 ; 0x7ec <lcd_read+0x12> + 7e0: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 7e4: 81 60 ori r24, 0x01 ; 1 + 7e6: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 7ea: 05 c0 rjmp .+10 ; 0x7f6 <lcd_read+0x1c> + 7ec: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 7f0: 8e 7f andi r24, 0xFE ; 254 + 7f2: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 7f6: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 7fa: 82 60 ori r24, 0x02 ; 2 + 7fc: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 800: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + 804: 80 e0 ldi r24, 0x00 ; 0 + 806: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + 80a: 62 e0 ldi r22, 0x02 ; 2 + 80c: 80 e0 ldi r24, 0x00 ; 0 + 80e: 0e 94 d6 06 call 0xdac ; 0xdac <pcf8574_setoutputpinhigh> + 812: 00 c0 rjmp .+0 ; 0x814 <lcd_read+0x3a> + 814: 64 e0 ldi r22, 0x04 ; 4 + 816: 80 e0 ldi r24, 0x00 ; 0 + 818: 0e 94 81 06 call 0xd02 ; 0xd02 <pcf8574_getoutputpin> + 81c: c8 2f mov r28, r24 + 81e: 62 e0 ldi r22, 0x02 ; 2 + 820: 80 e0 ldi r24, 0x00 ; 0 + 822: 0e 94 da 06 call 0xdb4 ; 0xdb4 <pcf8574_setoutputpinlow> + 826: 00 c0 rjmp .+0 ; 0x828 <lcd_read+0x4e> + 828: 62 e0 ldi r22, 0x02 ; 2 + 82a: 80 e0 ldi r24, 0x00 ; 0 + 82c: 0e 94 d6 06 call 0xdac ; 0xdac <pcf8574_setoutputpinhigh> + 830: 00 c0 rjmp .+0 ; 0x832 <lcd_read+0x58> + 832: 64 e0 ldi r22, 0x04 ; 4 + 834: 80 e0 ldi r24, 0x00 ; 0 + 836: 0e 94 81 06 call 0xd02 ; 0xd02 <pcf8574_getoutputpin> + 83a: c2 95 swap r28 + 83c: c0 7f andi r28, 0xF0 ; 240 + 83e: 8f 70 andi r24, 0x0F ; 15 + 840: c8 2b or r28, r24 + 842: 62 e0 ldi r22, 0x02 ; 2 + 844: 80 e0 ldi r24, 0x00 ; 0 + 846: 0e 94 da 06 call 0xdb4 ; 0xdb4 <pcf8574_setoutputpinlow> + 84a: 8c 2f mov r24, r28 + 84c: cf 91 pop r28 + 84e: 08 95 ret + +00000850 <lcd_waitbusy>: + 850: 80 e0 ldi r24, 0x00 ; 0 + 852: 0e 94 ed 03 call 0x7da ; 0x7da <lcd_read> + 856: 88 23 and r24, r24 + 858: dc f3 brlt .-10 ; 0x850 <lcd_waitbusy> + 85a: 00 c0 rjmp .+0 ; 0x85c <lcd_waitbusy+0xc> + 85c: 80 e0 ldi r24, 0x00 ; 0 + 85e: 0e 94 ed 03 call 0x7da ; 0x7da <lcd_read> + 862: 08 95 ret + +00000864 <toggle_e>: + 864: 62 e0 ldi r22, 0x02 ; 2 + 866: 80 e0 ldi r24, 0x00 ; 0 + 868: 0e 94 d6 06 call 0xdac ; 0xdac <pcf8574_setoutputpinhigh> + 86c: 00 c0 rjmp .+0 ; 0x86e <toggle_e+0xa> + 86e: 62 e0 ldi r22, 0x02 ; 2 + 870: 80 e0 ldi r24, 0x00 ; 0 + 872: 0e 94 da 06 call 0xdb4 ; 0xdb4 <pcf8574_setoutputpinlow> + 876: 08 95 ret + +00000878 <lcd_write>: + 878: cf 93 push r28 + 87a: c8 2f mov r28, r24 + 87c: 66 23 and r22, r22 + 87e: 31 f0 breq .+12 ; 0x88c <lcd_write+0x14> + 880: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 884: 81 60 ori r24, 0x01 ; 1 + 886: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 88a: 05 c0 rjmp .+10 ; 0x896 <lcd_write+0x1e> + 88c: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 890: 8e 7f andi r24, 0xFE ; 254 + 892: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 896: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 89a: 8d 7f andi r24, 0xFD ; 253 + 89c: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8a0: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + 8a4: 80 e0 ldi r24, 0x00 ; 0 + 8a6: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + 8aa: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 8ae: 8f 77 andi r24, 0x7F ; 127 + 8b0: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8b4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 8b8: 8f 7b andi r24, 0xBF ; 191 + 8ba: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8be: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 8c2: 8f 7d andi r24, 0xDF ; 223 + 8c4: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8c8: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 8cc: 8f 7e andi r24, 0xEF ; 239 + 8ce: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8d2: cc 23 and r28, r28 + 8d4: 2c f4 brge .+10 ; 0x8e0 <lcd_write+0x68> + 8d6: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 8da: 80 68 ori r24, 0x80 ; 128 + 8dc: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8e0: c6 ff sbrs r28, 6 + 8e2: 05 c0 rjmp .+10 ; 0x8ee <lcd_write+0x76> + 8e4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 8e8: 80 64 ori r24, 0x40 ; 64 + 8ea: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8ee: c5 ff sbrs r28, 5 + 8f0: 05 c0 rjmp .+10 ; 0x8fc <lcd_write+0x84> + 8f2: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 8f6: 80 62 ori r24, 0x20 ; 32 + 8f8: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 8fc: c4 ff sbrs r28, 4 + 8fe: 05 c0 rjmp .+10 ; 0x90a <__stack+0xb> + 900: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 904: 80 61 ori r24, 0x10 ; 16 + 906: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 90a: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + 90e: 80 e0 ldi r24, 0x00 ; 0 + 910: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + 914: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e> + 918: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 91c: 8f 77 andi r24, 0x7F ; 127 + 91e: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 922: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 926: 8f 7b andi r24, 0xBF ; 191 + 928: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 92c: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 930: 8f 7d andi r24, 0xDF ; 223 + 932: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 936: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 93a: 8f 7e andi r24, 0xEF ; 239 + 93c: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 940: c3 ff sbrs r28, 3 + 942: 05 c0 rjmp .+10 ; 0x94e <__stack+0x4f> + 944: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 948: 80 68 ori r24, 0x80 ; 128 + 94a: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 94e: c2 ff sbrs r28, 2 + 950: 05 c0 rjmp .+10 ; 0x95c <__stack+0x5d> + 952: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 956: 80 64 ori r24, 0x40 ; 64 + 958: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 95c: c1 ff sbrs r28, 1 + 95e: 05 c0 rjmp .+10 ; 0x96a <__stack+0x6b> + 960: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 964: 80 62 ori r24, 0x20 ; 32 + 966: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 96a: c0 ff sbrs r28, 0 + 96c: 05 c0 rjmp .+10 ; 0x978 <__stack+0x79> + 96e: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 972: 80 61 ori r24, 0x10 ; 16 + 974: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 978: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + 97c: 80 e0 ldi r24, 0x00 ; 0 + 97e: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + 982: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e> + 986: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 98a: 80 61 ori r24, 0x10 ; 16 + 98c: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 990: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 994: 80 62 ori r24, 0x20 ; 32 + 996: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 99a: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 99e: 80 64 ori r24, 0x40 ; 64 + 9a0: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 9a4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 9a8: 80 68 ori r24, 0x80 ; 128 + 9aa: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 9ae: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + 9b2: 80 e0 ldi r24, 0x00 ; 0 + 9b4: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + 9b8: cf 91 pop r28 + 9ba: 08 95 ret + +000009bc <lcd_command>: + 9bc: cf 93 push r28 + 9be: c8 2f mov r28, r24 + 9c0: 0e 94 28 04 call 0x850 ; 0x850 <lcd_waitbusy> + 9c4: 60 e0 ldi r22, 0x00 ; 0 + 9c6: 8c 2f mov r24, r28 + 9c8: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write> + 9cc: cf 91 pop r28 + 9ce: 08 95 ret + +000009d0 <lcd_gotoxy>: + 9d0: 61 11 cpse r22, r1 + 9d2: 04 c0 rjmp .+8 ; 0x9dc <lcd_gotoxy+0xc> + 9d4: 80 58 subi r24, 0x80 ; 128 + 9d6: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + 9da: 08 95 ret + 9dc: 80 54 subi r24, 0x40 ; 64 + 9de: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + 9e2: 08 95 ret + +000009e4 <lcd_clrscr>: + 9e4: 81 e0 ldi r24, 0x01 ; 1 + 9e6: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + 9ea: 08 95 ret + +000009ec <lcd_led>: + 9ec: 88 23 and r24, r24 + 9ee: 31 f0 breq .+12 ; 0x9fc <lcd_led+0x10> + 9f0: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + 9f4: 87 7f andi r24, 0xF7 ; 247 + 9f6: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + 9fa: 05 c0 rjmp .+10 ; 0xa06 <lcd_led+0x1a> + 9fc: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + a00: 88 60 ori r24, 0x08 ; 8 + a02: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + a06: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + a0a: 80 e0 ldi r24, 0x00 ; 0 + a0c: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + a10: 08 95 ret + +00000a12 <lcd_home>: + a12: 82 e0 ldi r24, 0x02 ; 2 + a14: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + a18: 08 95 ret + +00000a1a <lcd_putc>: + a1a: cf 93 push r28 + a1c: c8 2f mov r28, r24 + a1e: 0e 94 28 04 call 0x850 ; 0x850 <lcd_waitbusy> + a22: ca 30 cpi r28, 0x0A ; 10 + a24: 49 f4 brne .+18 ; 0xa38 <lcd_putc+0x1e> + a26: 80 34 cpi r24, 0x40 ; 64 + a28: 10 f0 brcs .+4 ; 0xa2e <lcd_putc+0x14> + a2a: 80 e0 ldi r24, 0x00 ; 0 + a2c: 01 c0 rjmp .+2 ; 0xa30 <lcd_putc+0x16> + a2e: 80 e4 ldi r24, 0x40 ; 64 + a30: 80 58 subi r24, 0x80 ; 128 + a32: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + a36: 13 c0 rjmp .+38 ; 0xa5e <lcd_putc+0x44> + a38: 80 31 cpi r24, 0x10 ; 16 + a3a: 29 f4 brne .+10 ; 0xa46 <lcd_putc+0x2c> + a3c: 60 e0 ldi r22, 0x00 ; 0 + a3e: 80 ec ldi r24, 0xC0 ; 192 + a40: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write> + a44: 06 c0 rjmp .+12 ; 0xa52 <lcd_putc+0x38> + a46: 80 35 cpi r24, 0x50 ; 80 + a48: 21 f4 brne .+8 ; 0xa52 <lcd_putc+0x38> + a4a: 60 e0 ldi r22, 0x00 ; 0 + a4c: 80 e8 ldi r24, 0x80 ; 128 + a4e: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write> + a52: 0e 94 28 04 call 0x850 ; 0x850 <lcd_waitbusy> + a56: 61 e0 ldi r22, 0x01 ; 1 + a58: 8c 2f mov r24, r28 + a5a: 0e 94 3c 04 call 0x878 ; 0x878 <lcd_write> + a5e: cf 91 pop r28 + a60: 08 95 ret + +00000a62 <lcd_puts>: + a62: cf 93 push r28 + a64: df 93 push r29 + a66: ec 01 movw r28, r24 + a68: 21 96 adiw r28, 0x01 ; 1 + a6a: fc 01 movw r30, r24 + a6c: 80 81 ld r24, Z + a6e: 88 23 and r24, r24 + a70: 29 f0 breq .+10 ; 0xa7c <lcd_puts+0x1a> + a72: 0e 94 0d 05 call 0xa1a ; 0xa1a <lcd_putc> + a76: 89 91 ld r24, Y+ + a78: 81 11 cpse r24, r1 + a7a: fb cf rjmp .-10 ; 0xa72 <lcd_puts+0x10> + a7c: df 91 pop r29 + a7e: cf 91 pop r28 + a80: 08 95 ret + +00000a82 <lcd_init>: + +// инициализация дисплея +void lcd_init(uint8_t dispAttr) +{ + a82: 1f 93 push r17 + a84: cf 93 push r28 + a86: df 93 push r29 + a88: 18 2f mov r17, r24 + #if LCD_PCF8574_INIT == 1 + //инициализация pcf + pcf8574_init(); + a8a: 0e 94 78 06 call 0xcf0 ; 0xcf0 <pcf8574_init> + #endif + + dataport = 0; + a8e: 10 92 42 03 sts 0x0342, r1 ; 0x800342 <__data_end> + pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); + a92: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + a96: 80 e0 ldi r24, 0x00 ; 0 + a98: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> +static inline void _delayFourCycles(unsigned int __count) +{ + if ( __count == 0 ) + __asm__ __volatile__( "rjmp 1f\n 1:" ); + else + __asm__ __volatile__ ( + a9c: 80 ea ldi r24, 0xA0 ; 160 + a9e: 9f e0 ldi r25, 0x0F ; 15 + aa0: 01 97 sbiw r24, 0x01 ; 1 + aa2: f1 f7 brne .-4 ; 0xaa0 <lcd_init+0x1e> + pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); + + delay(16000); + + // первоначальная запись на ЖК-дисплей — 8 бит + dataport |= _BV(LCD_DATA1_PIN); // _BV(LCD_FUNCTION)>>4; + aa4: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + aa8: 80 62 ori r24, 0x20 ; 32 + aaa: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + dataport |= _BV(LCD_DATA0_PIN); // _BV(LCD_FUNCTION_8BIT)>>4; + aae: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + ab2: 80 61 ori r24, 0x10 ; 16 + ab4: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); + ab8: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + abc: 80 e0 ldi r24, 0x00 ; 0 + abe: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + + // дрючим дисплей чтобы он начал работать + lcd_e_toggle(); + ac2: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e> +static inline void _delayFourCycles(unsigned int __count) +{ + if ( __count == 0 ) + __asm__ __volatile__( "rjmp 1f\n 1:" ); + else + __asm__ __volatile__ ( + ac6: 80 ee ldi r24, 0xE0 ; 224 + ac8: 94 e0 ldi r25, 0x04 ; 4 + aca: 01 97 sbiw r24, 0x01 ; 1 + acc: f1 f7 brne .-4 ; 0xaca <lcd_init+0x48> + pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); + + // дрючим дисплей чтобы он начал работать + lcd_e_toggle(); + delay(4992); + lcd_e_toggle(); + ace: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e> +static inline void _delayFourCycles(unsigned int __count) +{ + if ( __count == 0 ) + __asm__ __volatile__( "rjmp 1f\n 1:" ); + else + __asm__ __volatile__ ( + ad2: c0 e1 ldi r28, 0x10 ; 16 + ad4: d0 e0 ldi r29, 0x00 ; 0 + ad6: ce 01 movw r24, r28 + ad8: 01 97 sbiw r24, 0x01 ; 1 + ada: f1 f7 brne .-4 ; 0xad8 <lcd_init+0x56> + // дрючим дисплей чтобы он начал работать + lcd_e_toggle(); + delay(4992); + lcd_e_toggle(); + delay(64); + lcd_e_toggle(); + adc: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e> +static inline void _delayFourCycles(unsigned int __count) +{ + if ( __count == 0 ) + __asm__ __volatile__( "rjmp 1f\n 1:" ); + else + __asm__ __volatile__ ( + ae0: ce 01 movw r24, r28 + ae2: 01 97 sbiw r24, 0x01 ; 1 + ae4: f1 f7 brne .-4 ; 0xae2 <lcd_init+0x60> + delay(64); + lcd_e_toggle(); + delay(64); + + // переходим в 4 битный режим + dataport &= ~_BV(LCD_DATA0_PIN); + ae6: 80 91 42 03 lds r24, 0x0342 ; 0x800342 <__data_end> + aea: 8f 7e andi r24, 0xEF ; 239 + aec: 80 93 42 03 sts 0x0342, r24 ; 0x800342 <__data_end> + pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); + af0: 60 91 42 03 lds r22, 0x0342 ; 0x800342 <__data_end> + af4: 80 e0 ldi r24, 0x00 ; 0 + af6: 0e 94 95 06 call 0xd2a ; 0xd2a <pcf8574_setoutput> + lcd_e_toggle(); + afa: 0e 94 32 04 call 0x864 ; 0x864 <toggle_e> +static inline void _delayFourCycles(unsigned int __count) +{ + if ( __count == 0 ) + __asm__ __volatile__( "rjmp 1f\n 1:" ); + else + __asm__ __volatile__ ( + afe: 21 97 sbiw r28, 0x01 ; 1 + b00: f1 f7 brne .-4 ; 0xafe <lcd_init+0x7c> + pcf8574_setoutput(LCD_PCF8574_DEVICEID, dataport); + lcd_e_toggle(); + delay(64); + + + lcd_command(LCD_FUNCTION_DEFAULT); // настраиваем кол-во строк + b02: 88 e2 ldi r24, 0x28 ; 40 + b04: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + lcd_command(LCD_DISP_OFF); // вырубаем дисплей + b08: 88 e0 ldi r24, 0x08 ; 8 + b0a: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + lcd_clrscr(); // чистим экран + b0e: 0e 94 f2 04 call 0x9e4 ; 0x9e4 <lcd_clrscr> + lcd_command(LCD_MODE_DEFAULT); // запускаемся в стандартном режиме + b12: 86 e0 ldi r24, 0x06 ; 6 + b14: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> + lcd_command(dispAttr); // отправляем настройки + b18: 81 2f mov r24, r17 + b1a: 0e 94 de 04 call 0x9bc ; 0x9bc <lcd_command> +} + b1e: df 91 pop r29 + b20: cf 91 pop r28 + b22: 1f 91 pop r17 + b24: 08 95 ret + +00000b26 <Lcd_inciliation>: +struct TextCounter textCounter; + +//struct TextCounter textCounter; + +void Lcd_inciliation() { + lcd_init(LCD_DISP_ON_BLINK); // инициализация дисплея + b26: 8d e0 ldi r24, 0x0D ; 13 + b28: 0e 94 41 05 call 0xa82 ; 0xa82 <lcd_init> + lcd_home(); // домой курсор + b2c: 0e 94 09 05 call 0xa12 ; 0xa12 <lcd_home> + lcd_led(0); // вкл подсветки + b30: 80 e0 ldi r24, 0x00 ; 0 + b32: 0e 94 f6 04 call 0x9ec ; 0x9ec <lcd_led> + b36: 08 95 ret + +00000b38 <fillBuffer1>: + //textCounter.startTime = millis(); // Запоминаем время запуска программы + //Из за строчки выше все ломается +} + +void fillBuffer1(const char* source, char* buffer, size_t bufferSize, int incrementValue) { + b38: cf 92 push r12 + b3a: df 92 push r13 + b3c: ef 92 push r14 + b3e: ff 92 push r15 + b40: 0f 93 push r16 + b42: 1f 93 push r17 + b44: cf 93 push r28 + b46: df 93 push r29 + b48: 8c 01 movw r16, r24 + b4a: 7b 01 movw r14, r22 + b4c: c9 01 movw r24, r18 + int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue + b4e: f8 01 movw r30, r16 + b50: 01 90 ld r0, Z+ + b52: 00 20 and r0, r0 + b54: e9 f7 brne .-6 ; 0xb50 <fillBuffer1+0x18> + b56: 31 97 sbiw r30, 0x01 ; 1 + b58: bf 01 movw r22, r30 + b5a: 60 1b sub r22, r16 + b5c: 71 0b sbc r23, r17 + b5e: 0e 94 76 0b call 0x16ec ; 0x16ec <__udivmodhi4> + b62: 67 01 movw r12, r14 + b64: 20 e1 ldi r18, 0x10 ; 16 + b66: c2 0e add r12, r18 + b68: d1 1c adc r13, r1 + b6a: e7 01 movw r28, r14 + int endIndex = startIndex + 16; + + for (int i = 0; i < 16; ++i) { + buffer[i] = source[(startIndex + i) % strlen(source)]; + b6c: 9c 01 movw r18, r24 + b6e: 2e 19 sub r18, r14 + b70: 3f 09 sbc r19, r15 + b72: f8 01 movw r30, r16 + b74: 01 90 ld r0, Z+ + b76: 00 20 and r0, r0 + b78: e9 f7 brne .-6 ; 0xb74 <fillBuffer1+0x3c> + b7a: 31 97 sbiw r30, 0x01 ; 1 + b7c: bf 01 movw r22, r30 + b7e: 60 1b sub r22, r16 + b80: 71 0b sbc r23, r17 + b82: c9 01 movw r24, r18 + b84: 8c 0f add r24, r28 + b86: 9d 1f adc r25, r29 + b88: 0e 94 76 0b call 0x16ec ; 0x16ec <__udivmodhi4> + b8c: f8 01 movw r30, r16 + b8e: e8 0f add r30, r24 + b90: f9 1f adc r31, r25 + b92: 80 81 ld r24, Z + b94: 89 93 st Y+, r24 + +void fillBuffer1(const char* source, char* buffer, size_t bufferSize, int incrementValue) { + int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue + int endIndex = startIndex + 16; + + for (int i = 0; i < 16; ++i) { + b96: cc 15 cp r28, r12 + b98: dd 05 cpc r29, r13 + b9a: 59 f7 brne .-42 ; 0xb72 <fillBuffer1+0x3a> + buffer[i] = source[(startIndex + i) % strlen(source)]; + } + buffer[16] = '\0'; // Установка нулевого символа в конце буфера + b9c: f7 01 movw r30, r14 + b9e: 10 8a std Z+16, r1 ; 0x10 +} + ba0: df 91 pop r29 + ba2: cf 91 pop r28 + ba4: 1f 91 pop r17 + ba6: 0f 91 pop r16 + ba8: ff 90 pop r15 + baa: ef 90 pop r14 + bac: df 90 pop r13 + bae: cf 90 pop r12 + bb0: 08 95 ret + +00000bb2 <fillBuffer2>: + +void fillBuffer2(float value1, float value2, float value3, char* buffer, size_t bufferSize) { + bb2: af 92 push r10 + bb4: bf 92 push r11 + bb6: cf 92 push r12 + bb8: df 92 push r13 + bba: ef 92 push r14 + bbc: ff 92 push r15 + bbe: 0f 93 push r16 + bc0: 1f 93 push r17 + snprintf(buffer, bufferSize, "%.2f.%.2f.%.2f", value1, value2, value3); + bc2: 1f 93 push r17 + bc4: 0f 93 push r16 + bc6: ff 92 push r15 + bc8: ef 92 push r14 + bca: 5f 93 push r21 + bcc: 4f 93 push r20 + bce: 3f 93 push r19 + bd0: 2f 93 push r18 + bd2: 9f 93 push r25 + bd4: 8f 93 push r24 + bd6: 7f 93 push r23 + bd8: 6f 93 push r22 + bda: 86 e1 ldi r24, 0x16 ; 22 + bdc: 93 e0 ldi r25, 0x03 ; 3 + bde: 9f 93 push r25 + be0: 8f 93 push r24 + be2: bf 92 push r11 + be4: af 92 push r10 + be6: df 92 push r13 + be8: cf 92 push r12 + bea: 0e 94 af 0b call 0x175e ; 0x175e <snprintf> +} + bee: 8d b7 in r24, 0x3d ; 61 + bf0: 9e b7 in r25, 0x3e ; 62 + bf2: 42 96 adiw r24, 0x12 ; 18 + bf4: 0f b6 in r0, 0x3f ; 63 + bf6: f8 94 cli + bf8: 9e bf out 0x3e, r25 ; 62 + bfa: 0f be out 0x3f, r0 ; 63 + bfc: 8d bf out 0x3d, r24 ; 61 + bfe: 1f 91 pop r17 + c00: 0f 91 pop r16 + c02: ff 90 pop r15 + c04: ef 90 pop r14 + c06: df 90 pop r13 + c08: cf 90 pop r12 + c0a: bf 90 pop r11 + c0c: af 90 pop r10 + c0e: 08 95 ret + +00000c10 <printLcd>: + +void printLcd(struct DisplayData* displayData) { + c10: 6f 92 push r6 + c12: 7f 92 push r7 + c14: af 92 push r10 + c16: bf 92 push r11 + c18: cf 92 push r12 + c1a: df 92 push r13 + c1c: ef 92 push r14 + c1e: ff 92 push r15 + c20: 0f 93 push r16 + c22: 1f 93 push r17 + c24: cf 93 push r28 + c26: df 93 push r29 + c28: cd b7 in r28, 0x3d ; 61 + c2a: de b7 in r29, 0x3e ; 62 + c2c: c2 54 subi r28, 0x42 ; 66 + c2e: d1 09 sbc r29, r1 + c30: 0f b6 in r0, 0x3f ; 63 + c32: f8 94 cli + c34: de bf out 0x3e, r29 ; 62 + c36: 0f be out 0x3f, r0 ; 63 + c38: cd bf out 0x3d, r28 ; 61 + c3a: 3c 01 movw r6, r24 + // Буферы для заполнения данных + char buffer1[17]; + char buffer2[17]; + + // Заполнение буфера 1 + fillBuffer1(displayData->topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); + c3c: 20 91 49 03 lds r18, 0x0349 ; 0x800349 <textCounter+0x4> + c40: 30 91 4a 03 lds r19, 0x034A ; 0x80034a <textCounter+0x5> + c44: 41 e1 ldi r20, 0x11 ; 17 + c46: 50 e0 ldi r21, 0x00 ; 0 + c48: be 01 movw r22, r28 + c4a: 6f 5f subi r22, 0xFF ; 255 + c4c: 7f 4f sbci r23, 0xFF ; 255 + c4e: 0e 94 9c 05 call 0xb38 ; 0xb38 <fillBuffer1> + + // Заполнение буфера 2 + fillBuffer2(displayData->value1, displayData->value2, displayData->value3, buffer2, sizeof(buffer2)); + c52: f3 01 movw r30, r6 + c54: e8 5b subi r30, 0xB8 ; 184 + c56: ff 4f sbci r31, 0xFF ; 255 + c58: e0 80 ld r14, Z + c5a: f1 80 ldd r15, Z+1 ; 0x01 + c5c: 02 81 ldd r16, Z+2 ; 0x02 + c5e: 13 81 ldd r17, Z+3 ; 0x03 + c60: 34 97 sbiw r30, 0x04 ; 4 + c62: 20 81 ld r18, Z + c64: 31 81 ldd r19, Z+1 ; 0x01 + c66: 42 81 ldd r20, Z+2 ; 0x02 + c68: 53 81 ldd r21, Z+3 ; 0x03 + c6a: 34 97 sbiw r30, 0x04 ; 4 + c6c: 60 81 ld r22, Z + c6e: 71 81 ldd r23, Z+1 ; 0x01 + c70: 82 81 ldd r24, Z+2 ; 0x02 + c72: 93 81 ldd r25, Z+3 ; 0x03 + c74: 0f 2e mov r0, r31 + c76: f1 e1 ldi r31, 0x11 ; 17 + c78: af 2e mov r10, r31 + c7a: b1 2c mov r11, r1 + c7c: f0 2d mov r31, r0 + c7e: fe 01 movw r30, r28 + c80: 72 96 adiw r30, 0x12 ; 18 + c82: 6f 01 movw r12, r30 + c84: 0e 94 d9 05 call 0xbb2 ; 0xbb2 <fillBuffer2> + + // Создание массива для вывода на дисплей + char displayArray[32]; + strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray + c88: 40 e1 ldi r20, 0x10 ; 16 + c8a: 50 e0 ldi r21, 0x00 ; 0 + c8c: be 01 movw r22, r28 + c8e: 6f 5f subi r22, 0xFF ; 255 + c90: 7f 4f sbci r23, 0xFF ; 255 + c92: ce 01 movw r24, r28 + c94: 83 96 adiw r24, 0x23 ; 35 + c96: 0e 94 8a 0b call 0x1714 ; 0x1714 <strncpy> + strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16 + c9a: 40 e1 ldi r20, 0x10 ; 16 + c9c: 50 e0 ldi r21, 0x00 ; 0 + c9e: b6 01 movw r22, r12 + ca0: ce 01 movw r24, r28 + ca2: c3 96 adiw r24, 0x33 ; 51 + ca4: 0e 94 8a 0b call 0x1714 ; 0x1714 <strncpy> + + // Вывод данных на экран + lcd_gotoxy(0, 0); + ca8: 60 e0 ldi r22, 0x00 ; 0 + caa: 80 e0 ldi r24, 0x00 ; 0 + cac: 0e 94 e8 04 call 0x9d0 ; 0x9d0 <lcd_gotoxy> + lcd_puts(displayArray); + cb0: ce 01 movw r24, r28 + cb2: 83 96 adiw r24, 0x23 ; 35 + cb4: 0e 94 31 05 call 0xa62 ; 0xa62 <lcd_puts> + + lcd_gotoxy(0, 1); + cb8: 61 e0 ldi r22, 0x01 ; 1 + cba: 80 e0 ldi r24, 0x00 ; 0 + cbc: 0e 94 e8 04 call 0x9d0 ; 0x9d0 <lcd_gotoxy> + lcd_puts(displayArray + 16); // Вывод второй половины displayArray + cc0: ce 01 movw r24, r28 + cc2: c3 96 adiw r24, 0x33 ; 51 + cc4: 0e 94 31 05 call 0xa62 ; 0xa62 <lcd_puts> +} + cc8: ce 5b subi r28, 0xBE ; 190 + cca: df 4f sbci r29, 0xFF ; 255 + ccc: 0f b6 in r0, 0x3f ; 63 + cce: f8 94 cli + cd0: de bf out 0x3e, r29 ; 62 + cd2: 0f be out 0x3f, r0 ; 63 + cd4: cd bf out 0x3d, r28 ; 61 + cd6: df 91 pop r29 + cd8: cf 91 pop r28 + cda: 1f 91 pop r17 + cdc: 0f 91 pop r16 + cde: ff 90 pop r15 + ce0: ef 90 pop r14 + ce2: df 90 pop r13 + ce4: cf 90 pop r12 + ce6: bf 90 pop r11 + ce8: af 90 pop r10 + cea: 7f 90 pop r7 + cec: 6f 90 pop r6 + cee: 08 95 ret + +00000cf0 <pcf8574_init>: + i2c_write(b); + i2c_stop(); + return 0; + } + return -1; +} + cf0: 0e 94 de 06 call 0xdbc ; 0xdbc <i2c_init> + cf4: 83 e0 ldi r24, 0x03 ; 3 + cf6: 8a 95 dec r24 + cf8: f1 f7 brne .-4 ; 0xcf6 <pcf8574_init+0x6> + cfa: 00 00 nop + cfc: 10 92 4b 03 sts 0x034B, r1 ; 0x80034b <pcf8574_pinstatus> + d00: 08 95 ret + +00000d02 <pcf8574_getoutputpin>: + d02: 81 11 cpse r24, r1 + d04: 0e c0 rjmp .+28 ; 0xd22 <pcf8574_getoutputpin+0x20> + d06: 68 30 cpi r22, 0x08 ; 8 + d08: 70 f4 brcc .+28 ; 0xd26 <pcf8574_getoutputpin+0x24> + d0a: 80 91 4b 03 lds r24, 0x034B ; 0x80034b <pcf8574_pinstatus> + d0e: 08 2e mov r0, r24 + d10: 00 0c add r0, r0 + d12: 99 0b sbc r25, r25 + d14: 02 c0 rjmp .+4 ; 0xd1a <pcf8574_getoutputpin+0x18> + d16: 95 95 asr r25 + d18: 87 95 ror r24 + d1a: 6a 95 dec r22 + d1c: e2 f7 brpl .-8 ; 0xd16 <pcf8574_getoutputpin+0x14> + d1e: 81 70 andi r24, 0x01 ; 1 + d20: 08 95 ret + d22: 8f ef ldi r24, 0xFF ; 255 + d24: 08 95 ret + d26: 8f ef ldi r24, 0xFF ; 255 + d28: 08 95 ret + +00000d2a <pcf8574_setoutput>: + d2a: cf 93 push r28 + d2c: 81 11 cpse r24, r1 + d2e: 0d c0 rjmp .+26 ; 0xd4a <pcf8574_setoutput+0x20> + d30: c6 2f mov r28, r22 + d32: 60 93 4b 03 sts 0x034B, r22 ; 0x80034b <pcf8574_pinstatus> + d36: 8e e4 ldi r24, 0x4E ; 78 + d38: 0e 94 e4 06 call 0xdc8 ; 0xdc8 <i2c_start> + d3c: 8c 2f mov r24, r28 + d3e: 0e 94 14 07 call 0xe28 ; 0xe28 <i2c_write> + d42: 0e 94 0b 07 call 0xe16 ; 0xe16 <i2c_stop> + d46: 80 e0 ldi r24, 0x00 ; 0 + d48: 01 c0 rjmp .+2 ; 0xd4c <pcf8574_setoutput+0x22> + d4a: 8f ef ldi r24, 0xFF ; 255 + d4c: cf 91 pop r28 + d4e: 08 95 ret + +00000d50 <pcf8574_setoutputpin>: + +// настройка пинов вывода +int8_t pcf8574_setoutputpin(uint8_t deviceid, uint8_t pin, uint8_t data) { + d50: cf 93 push r28 + d52: df 93 push r29 + if((deviceid >= 0 && deviceid < PCF8574_MAXDEVICES) && (pin >= 0 && pin < PCF8574_MAXPINS)) { + d54: 81 11 cpse r24, r1 + d56: 24 c0 rjmp .+72 ; 0xda0 <pcf8574_setoutputpin+0x50> + d58: 68 30 cpi r22, 0x08 ; 8 + d5a: 20 f5 brcc .+72 ; 0xda4 <pcf8574_setoutputpin+0x54> + uint8_t b = 0; + b = pcf8574_pinstatus[deviceid]; + d5c: 80 91 4b 03 lds r24, 0x034B ; 0x80034b <pcf8574_pinstatus> + b = (data != 0) ? (b | (1 << pin)) : (b & ~(1 << pin)); + d60: 44 23 and r20, r20 + d62: 49 f0 breq .+18 ; 0xd76 <pcf8574_setoutputpin+0x26> + d64: c1 e0 ldi r28, 0x01 ; 1 + d66: d0 e0 ldi r29, 0x00 ; 0 + d68: 02 c0 rjmp .+4 ; 0xd6e <pcf8574_setoutputpin+0x1e> + d6a: cc 0f add r28, r28 + d6c: dd 1f adc r29, r29 + d6e: 6a 95 dec r22 + d70: e2 f7 brpl .-8 ; 0xd6a <pcf8574_setoutputpin+0x1a> + d72: c8 2b or r28, r24 + d74: 09 c0 rjmp .+18 ; 0xd88 <pcf8574_setoutputpin+0x38> + d76: c1 e0 ldi r28, 0x01 ; 1 + d78: d0 e0 ldi r29, 0x00 ; 0 + d7a: 02 c0 rjmp .+4 ; 0xd80 <pcf8574_setoutputpin+0x30> + d7c: cc 0f add r28, r28 + d7e: dd 1f adc r29, r29 + d80: 6a 95 dec r22 + d82: e2 f7 brpl .-8 ; 0xd7c <pcf8574_setoutputpin+0x2c> + d84: c0 95 com r28 + d86: c8 23 and r28, r24 + pcf8574_pinstatus[deviceid] = b; + d88: c0 93 4b 03 sts 0x034B, r28 ; 0x80034b <pcf8574_pinstatus> + //рестартим + i2c_start(((PCF8574_ADDRBASE+deviceid)<<1) | I2C_WRITE); + d8c: 8e e4 ldi r24, 0x4E ; 78 + d8e: 0e 94 e4 06 call 0xdc8 ; 0xdc8 <i2c_start> + i2c_write(b); + d92: 8c 2f mov r24, r28 + d94: 0e 94 14 07 call 0xe28 ; 0xe28 <i2c_write> + i2c_stop(); + d98: 0e 94 0b 07 call 0xe16 ; 0xe16 <i2c_stop> + return 0; + d9c: 80 e0 ldi r24, 0x00 ; 0 + d9e: 03 c0 rjmp .+6 ; 0xda6 <pcf8574_setoutputpin+0x56> + } + return -1; + da0: 8f ef ldi r24, 0xFF ; 255 + da2: 01 c0 rjmp .+2 ; 0xda6 <pcf8574_setoutputpin+0x56> + da4: 8f ef ldi r24, 0xFF ; 255 +} + da6: df 91 pop r29 + da8: cf 91 pop r28 + daa: 08 95 ret + +00000dac <pcf8574_setoutputpinhigh>: + +// установка высокого уровня на выходных пинах +int8_t pcf8574_setoutputpinhigh(uint8_t deviceid, uint8_t pin) { + return pcf8574_setoutputpin(deviceid, pin, 1); + dac: 41 e0 ldi r20, 0x01 ; 1 + dae: 0e 94 a8 06 call 0xd50 ; 0xd50 <pcf8574_setoutputpin> +} + db2: 08 95 ret + +00000db4 <pcf8574_setoutputpinlow>: + +// установка низкого уровня на выходных пинах +int8_t pcf8574_setoutputpinlow(uint8_t deviceid, uint8_t pin) { + return pcf8574_setoutputpin(deviceid, pin, 0); + db4: 40 e0 ldi r20, 0x00 ; 0 + db6: 0e 94 a8 06 call 0xd50 ; 0xd50 <pcf8574_setoutputpin> +} + dba: 08 95 ret + +00000dbc <i2c_init>: + +// тупа повторяем условие СТАРТ +unsigned char i2c_rep_start(unsigned char address) +{ + return i2c_start(address); +} + dbc: 10 92 b9 00 sts 0x00B9, r1 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> + dc0: 8d ef ldi r24, 0xFD ; 253 + dc2: 80 93 b8 00 sts 0x00B8, r24 ; 0x8000b8 <__DATA_REGION_ORIGIN__+0x58> + dc6: 08 95 ret + +00000dc8 <i2c_start>: + dc8: 94 ea ldi r25, 0xA4 ; 164 + dca: 90 93 bc 00 sts 0x00BC, r25 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c> + dce: ec eb ldi r30, 0xBC ; 188 + dd0: f0 e0 ldi r31, 0x00 ; 0 + dd2: 90 81 ld r25, Z + dd4: 99 23 and r25, r25 + dd6: ec f7 brge .-6 ; 0xdd2 <i2c_start+0xa> + dd8: 90 91 b9 00 lds r25, 0x00B9 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> + ddc: 98 7f andi r25, 0xF8 ; 248 + dde: 98 30 cpi r25, 0x08 ; 8 + de0: 11 f0 breq .+4 ; 0xde6 <i2c_start+0x1e> + de2: 90 31 cpi r25, 0x10 ; 16 + de4: a1 f4 brne .+40 ; 0xe0e <i2c_start+0x46> + de6: 80 93 bb 00 sts 0x00BB, r24 ; 0x8000bb <__DATA_REGION_ORIGIN__+0x5b> + dea: 84 e8 ldi r24, 0x84 ; 132 + dec: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c> + df0: ec eb ldi r30, 0xBC ; 188 + df2: f0 e0 ldi r31, 0x00 ; 0 + df4: 80 81 ld r24, Z + df6: 88 23 and r24, r24 + df8: ec f7 brge .-6 ; 0xdf4 <i2c_start+0x2c> + dfa: 90 91 b9 00 lds r25, 0x00B9 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> + dfe: 98 7f andi r25, 0xF8 ; 248 + e00: 98 31 cpi r25, 0x18 ; 24 + e02: 39 f0 breq .+14 ; 0xe12 <i2c_start+0x4a> + e04: 81 e0 ldi r24, 0x01 ; 1 + e06: 90 34 cpi r25, 0x40 ; 64 + e08: 29 f4 brne .+10 ; 0xe14 <i2c_start+0x4c> + e0a: 80 e0 ldi r24, 0x00 ; 0 + e0c: 08 95 ret + e0e: 81 e0 ldi r24, 0x01 ; 1 + e10: 08 95 ret + e12: 80 e0 ldi r24, 0x00 ; 0 + e14: 08 95 ret + +00000e16 <i2c_stop>: + +// передача условия СТОП на шину +void i2c_stop(void) +{ + // отправка условия СТОП + TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); + e16: 84 e9 ldi r24, 0x94 ; 148 + e18: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c> + // ждем выполнения условия остановки + while(TWCR & (1<<TWSTO)); + e1c: ec eb ldi r30, 0xBC ; 188 + e1e: f0 e0 ldi r31, 0x00 ; 0 + e20: 80 81 ld r24, Z + e22: 84 fd sbrc r24, 4 + e24: fd cf rjmp .-6 ; 0xe20 <i2c_stop+0xa> +} + e26: 08 95 ret + +00000e28 <i2c_write>: +unsigned char i2c_write( unsigned char data ) +{ + uint8_t twst; + + // отправляем данные на уст-во + TWDR = data; + e28: 80 93 bb 00 sts 0x00BB, r24 ; 0x8000bb <__DATA_REGION_ORIGIN__+0x5b> + TWCR = (1<<TWINT) | (1<<TWEN); + e2c: 84 e8 ldi r24, 0x84 ; 132 + e2e: 80 93 bc 00 sts 0x00BC, r24 ; 0x8000bc <__DATA_REGION_ORIGIN__+0x5c> + // ждем завершения передачи + while(!(TWCR & (1<<TWINT))); + e32: ec eb ldi r30, 0xBC ; 188 + e34: f0 e0 ldi r31, 0x00 ; 0 + e36: 80 81 ld r24, Z + e38: 88 23 and r24, r24 + e3a: ec f7 brge .-6 ; 0xe36 <i2c_write+0xe> + // записываем ответ от ведомого уст-ва + twst = TW_STATUS & 0xF8; + e3c: 90 91 b9 00 lds r25, 0x00B9 ; 0x8000b9 <__DATA_REGION_ORIGIN__+0x59> + e40: 98 7f andi r25, 0xF8 ; 248 + e42: 81 e0 ldi r24, 0x01 ; 1 + e44: 98 32 cpi r25, 0x28 ; 40 + e46: 09 f4 brne .+2 ; 0xe4a <i2c_write+0x22> + e48: 80 e0 ldi r24, 0x00 ; 0 + if( twst != TW_MT_DATA_ACK) return 1; + return 0; +} + e4a: 08 95 ret + +00000e4c <main>: +#include "UART/uart.h" +#include "stdbool.h" +#include "LCD/lcd.h" +#include "Protocol/protocol.h" + +int main(void) { + e4c: 4f 92 push r4 + e4e: 5f 92 push r5 + e50: 6f 92 push r6 + e52: 7f 92 push r7 + e54: 8f 92 push r8 + e56: 9f 92 push r9 + e58: af 92 push r10 + e5a: bf 92 push r11 + e5c: cf 92 push r12 + e5e: df 92 push r13 + e60: ef 92 push r14 + e62: ff 92 push r15 + e64: 0f 93 push r16 + e66: 1f 93 push r17 + e68: cf 93 push r28 + e6a: df 93 push r29 + e6c: cd b7 in r28, 0x3d ; 61 + e6e: de b7 in r29, 0x3e ; 62 + e70: c3 50 subi r28, 0x03 ; 3 + e72: d2 40 sbci r29, 0x02 ; 2 + e74: 0f b6 in r0, 0x3f ; 63 + e76: f8 94 cli + e78: de bf out 0x3e, r29 ; 62 + e7a: 0f be out 0x3f, r0 ; 63 + e7c: cd bf out 0x3d, r28 ; 61 + struct Client hdlc; + bool flag_connection = false; + + Lcd_inciliation(); + e7e: 0e 94 93 05 call 0xb26 ; 0xb26 <Lcd_inciliation> + UART_init(); + e82: 0e 94 9e 0a call 0x153c ; 0x153c <UART_init> + init_hdlc_client(&hdlc, 200); + e86: 68 ec ldi r22, 0xC8 ; 200 + e88: 70 e0 ldi r23, 0x00 ; 0 + e8a: ce 01 movw r24, r28 + e8c: 01 96 adiw r24, 0x01 ; 1 + e8e: 0e 94 53 00 call 0xa6 ; 0xa6 <init_hdlc_client> +// while(true){ +// if (!flag_connection){ +// } +// } + + hdlc_connect(&hdlc); + e92: ce 01 movw r24, r28 + e94: 01 96 adiw r24, 0x01 ; 1 + e96: 0e 94 6c 00 call 0xd8 ; 0xd8 <hdlc_connect> + uint8_t buffer[10]; + + hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); + e9a: 4a e0 ldi r20, 0x0A ; 10 + e9c: 50 e0 ldi r21, 0x00 ; 0 + e9e: be 01 movw r22, r28 + ea0: 66 5e subi r22, 0xE6 ; 230 + ea2: 7f 4f sbci r23, 0xFF ; 255 + ea4: ce 01 movw r24, r28 + ea6: 01 96 adiw r24, 0x01 ; 1 + ea8: 0e 94 91 00 call 0x122 ; 0x122 <hdlc_get_raw_frame> + + UART_send(buffer, sizeof buffer); + eac: 6a e0 ldi r22, 0x0A ; 10 + eae: 70 e0 ldi r23, 0x00 ; 0 + eb0: ce 01 movw r24, r28 + eb2: 4a 96 adiw r24, 0x1a ; 26 + eb4: 0e 94 aa 0a call 0x1554 ; 0x1554 <UART_send> + + while(!flag_connection){ + uint8_t* buffer_recive[10]; + UART_receive(buffer_recive, sizeof buffer_recive); + eb8: 64 e1 ldi r22, 0x14 ; 20 + eba: 70 e0 ldi r23, 0x00 ; 0 + ebc: ce 01 movw r24, r28 + ebe: 80 51 subi r24, 0x10 ; 16 + ec0: 9e 4f sbci r25, 0xFE ; 254 + ec2: 0e 94 ce 0a call 0x159c ; 0x159c <UART_receive> + + int err = hdlc_timeout_handler(&hdlc, 1); + ec6: 61 e0 ldi r22, 0x01 ; 1 + ec8: 70 e0 ldi r23, 0x00 ; 0 + eca: ce 01 movw r24, r28 + ecc: 01 96 adiw r24, 0x01 ; 1 + ece: 0e 94 a8 01 call 0x350 ; 0x350 <hdlc_timeout_handler> + if (err == ERR_FRAME_TIME_OUT){ + ed2: 05 96 adiw r24, 0x05 ; 5 + ed4: 81 f4 brne .+32 ; 0xef6 <main+0xaa> + hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); + ed6: 4a e0 ldi r20, 0x0A ; 10 + ed8: 50 e0 ldi r21, 0x00 ; 0 + eda: be 01 movw r22, r28 + edc: 66 5e subi r22, 0xE6 ; 230 + ede: 7f 4f sbci r23, 0xFF ; 255 + ee0: ce 01 movw r24, r28 + ee2: 01 96 adiw r24, 0x01 ; 1 + ee4: 0e 94 91 00 call 0x122 ; 0x122 <hdlc_get_raw_frame> + UART_send(buffer, sizeof buffer); + ee8: 6a e0 ldi r22, 0x0A ; 10 + eea: 70 e0 ldi r23, 0x00 ; 0 + eec: ce 01 movw r24, r28 + eee: 4a 96 adiw r24, 0x1a ; 26 + ef0: 0e 94 aa 0a call 0x1554 ; 0x1554 <UART_send> + ef4: e1 cf rjmp .-62 ; 0xeb8 <main+0x6c> + continue; + } + + err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive, sizeof buffer_recive, 0, 0); + ef6: 00 e0 ldi r16, 0x00 ; 0 + ef8: 10 e0 ldi r17, 0x00 ; 0 + efa: 20 e0 ldi r18, 0x00 ; 0 + efc: 30 e0 ldi r19, 0x00 ; 0 + efe: 44 e1 ldi r20, 0x14 ; 20 + f00: 50 e0 ldi r21, 0x00 ; 0 + f02: be 01 movw r22, r28 + f04: 60 51 subi r22, 0x10 ; 16 + f06: 7e 4f sbci r23, 0xFE ; 254 + f08: ce 01 movw r24, r28 + f0a: 01 96 adiw r24, 0x01 ; 1 + f0c: 0e 94 07 01 call 0x20e ; 0x20e <hdlc_decode_recived_raw_data> + f10: 8c 01 movw r16, r24 + if (err < 0){ + f12: 99 23 and r25, r25 + f14: ac f4 brge .+42 ; 0xf40 <main+0xf4> + if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ + f16: 0a 3f cpi r16, 0xFA ; 250 + f18: 8f ef ldi r24, 0xFF ; 255 + f1a: 18 07 cpc r17, r24 + f1c: b1 f4 brne .+44 ; 0xf4a <main+0xfe> + uint8_t* buffer_rej[10]; + hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); + f1e: 44 e1 ldi r20, 0x14 ; 20 + f20: 50 e0 ldi r21, 0x00 ; 0 + f22: be 01 movw r22, r28 + f24: 60 5a subi r22, 0xA0 ; 160 + f26: 7e 4f sbci r23, 0xFE ; 254 + f28: ce 01 movw r24, r28 + f2a: 01 96 adiw r24, 0x01 ; 1 + f2c: 0e 94 91 00 call 0x122 ; 0x122 <hdlc_get_raw_frame> + UART_send(buffer_rej, sizeof buffer_rej); + f30: 64 e1 ldi r22, 0x14 ; 20 + f32: 70 e0 ldi r23, 0x00 ; 0 + f34: ce 01 movw r24, r28 + f36: 80 5a subi r24, 0xA0 ; 160 + f38: 9e 4f sbci r25, 0xFE ; 254 + f3a: 0e 94 aa 0a call 0x1554 ; 0x1554 <UART_send> + f3e: 05 c0 rjmp .+10 ; 0xf4a <main+0xfe> + return err; + } + return err; + } + + if (hdlc.state == READY_STATE){ + f40: 89 81 ldd r24, Y+1 ; 0x01 + + hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); + + UART_send(buffer, sizeof buffer); + + while(!flag_connection){ + f42: 82 30 cpi r24, 0x02 ; 2 + f44: 09 f0 breq .+2 ; 0xf48 <main+0xfc> + f46: b8 cf rjmp .-144 ; 0xeb8 <main+0x6c> + f48: 03 c0 rjmp .+6 ; 0xf50 <main+0x104> + hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); + UART_send(buffer, sizeof buffer); + continue; + } + + err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive, sizeof buffer_recive, 0, 0); + f4a: 80 2f mov r24, r16 + f4c: 91 2f mov r25, r17 + f4e: fe c0 rjmp .+508 ; 0x114c <main+0x300> + flag_connection = true; + } + } + + struct message mess; + mess.numbers[0] = 1.23; + f50: 84 ea ldi r24, 0xA4 ; 164 + f52: 90 e7 ldi r25, 0x70 ; 112 + f54: ad e9 ldi r26, 0x9D ; 157 + f56: bf e3 ldi r27, 0x3F ; 63 + f58: 8c a3 std Y+36, r24 ; 0x24 + f5a: 9d a3 std Y+37, r25 ; 0x25 + f5c: ae a3 std Y+38, r26 ; 0x26 + f5e: bf a3 std Y+39, r27 ; 0x27 + mess.numbers[1] = 22.1; + f60: 8d ec ldi r24, 0xCD ; 205 + f62: 9c ec ldi r25, 0xCC ; 204 + f64: a0 eb ldi r26, 0xB0 ; 176 + f66: b1 e4 ldi r27, 0x41 ; 65 + f68: 88 a7 std Y+40, r24 ; 0x28 + f6a: 99 a7 std Y+41, r25 ; 0x29 + f6c: aa a7 std Y+42, r26 ; 0x2a + f6e: bb a7 std Y+43, r27 ; 0x2b + mess.numbers[2] = 100; + f70: 80 e0 ldi r24, 0x00 ; 0 + f72: 90 e0 ldi r25, 0x00 ; 0 + f74: a8 ec ldi r26, 0xC8 ; 200 + f76: b2 e4 ldi r27, 0x42 ; 66 + f78: 8c a7 std Y+44, r24 ; 0x2c + f7a: 9d a7 std Y+45, r25 ; 0x2d + f7c: ae a7 std Y+46, r26 ; 0x2e + f7e: bf a7 std Y+47, r27 ; 0x2f + mess.len_numbers = 3; + f80: 83 e0 ldi r24, 0x03 ; 3 + f82: 90 e0 ldi r25, 0x00 ; 0 + f84: 99 ab std Y+49, r25 ; 0x31 + f86: 88 ab std Y+48, r24 ; 0x30 + mess.str = "word war in new world io ex"; + f88: 85 e2 ldi r24, 0x25 ; 37 + f8a: 93 e0 ldi r25, 0x03 ; 3 + f8c: 9b ab std Y+51, r25 ; 0x33 + f8e: 8a ab std Y+50, r24 ; 0x32 + mess.len_str = sizeof mess.str; + f90: 82 e0 ldi r24, 0x02 ; 2 + f92: 90 e0 ldi r25, 0x00 ; 0 + f94: 9d ab std Y+53, r25 ; 0x35 + f96: 8c ab std Y+52, r24 ; 0x34 + + uint8_t data[64]; + size_t len_data; + protocol_encode(mess, data, &len_data); + f98: 2e 01 movw r4, r28 + f9a: e6 e7 ldi r30, 0x76 ; 118 + f9c: 4e 0e add r4, r30 + f9e: 51 1c adc r5, r1 + fa0: 5f 92 push r5 + fa2: 4f 92 push r4 + fa4: 3e 01 movw r6, r28 + fa6: f6 e3 ldi r31, 0x36 ; 54 + fa8: 6f 0e add r6, r31 + faa: 71 1c adc r7, r1 + fac: 7f 92 push r7 + fae: 6f 92 push r6 + fb0: 8c a0 ldd r8, Y+36 ; 0x24 + fb2: 9d a0 ldd r9, Y+37 ; 0x25 + fb4: ae a0 ldd r10, Y+38 ; 0x26 + fb6: bf a0 ldd r11, Y+39 ; 0x27 + fb8: c8 a4 ldd r12, Y+40 ; 0x28 + fba: d9 a4 ldd r13, Y+41 ; 0x29 + fbc: ea a4 ldd r14, Y+42 ; 0x2a + fbe: fb a4 ldd r15, Y+43 ; 0x2b + fc0: 0c a5 ldd r16, Y+44 ; 0x2c + fc2: 1d a5 ldd r17, Y+45 ; 0x2d + fc4: 2e a5 ldd r18, Y+46 ; 0x2e + fc6: 3f a5 ldd r19, Y+47 ; 0x2f + fc8: 48 a9 ldd r20, Y+48 ; 0x30 + fca: 59 a9 ldd r21, Y+49 ; 0x31 + fcc: 6a a9 ldd r22, Y+50 ; 0x32 + fce: 7b a9 ldd r23, Y+51 ; 0x33 + fd0: 8c a9 ldd r24, Y+52 ; 0x34 + fd2: 9d a9 ldd r25, Y+53 ; 0x35 + fd4: 0e 94 5c 09 call 0x12b8 ; 0x12b8 <protocol_encode> + + hdlc_send_data(&hdlc, data, len_data); + fd8: f2 01 movw r30, r4 + fda: 40 81 ld r20, Z + fdc: 51 81 ldd r21, Z+1 ; 0x01 + fde: b3 01 movw r22, r6 + fe0: ce 01 movw r24, r28 + fe2: 01 96 adiw r24, 0x01 ; 1 + fe4: 0e 94 76 00 call 0xec ; 0xec <hdlc_send_data> + uint8_t buffer_data[72]; + hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); + fe8: 48 e4 ldi r20, 0x48 ; 72 + fea: 50 e0 ldi r21, 0x00 ; 0 + fec: be 01 movw r22, r28 + fee: 68 58 subi r22, 0x88 ; 136 + ff0: 7f 4f sbci r23, 0xFF ; 255 + ff2: ce 01 movw r24, r28 + ff4: 01 96 adiw r24, 0x01 ; 1 + ff6: 0e 94 91 00 call 0x122 ; 0x122 <hdlc_get_raw_frame> + + UART_send(buffer_data, sizeof buffer_data); + ffa: 68 e4 ldi r22, 0x48 ; 72 + ffc: 70 e0 ldi r23, 0x00 ; 0 + ffe: ce 01 movw r24, r28 + 1000: 88 58 subi r24, 0x88 ; 136 + 1002: 9f 4f sbci r25, 0xFF ; 255 + 1004: 0e 94 aa 0a call 0x1554 ; 0x1554 <UART_send> + 1008: 0f 90 pop r0 + 100a: 0f 90 pop r0 + 100c: 0f 90 pop r0 + 100e: 0f 90 pop r0 + bool flag_recive = false; + uint8_t data_recive[64]; + size_t len_data_recive; + while (!flag_recive){ + uint8_t* buffer_recive_data[72]; + UART_receive(buffer_recive_data, sizeof buffer_recive_data); + 1010: 60 e9 ldi r22, 0x90 ; 144 + 1012: 70 e0 ldi r23, 0x00 ; 0 + 1014: ce 01 movw r24, r28 + 1016: 80 5a subi r24, 0xA0 ; 160 + 1018: 9e 4f sbci r25, 0xFE ; 254 + 101a: 0e 94 ce 0a call 0x159c ; 0x159c <UART_receive> + + int err = hdlc_timeout_handler(&hdlc, 1); + 101e: 61 e0 ldi r22, 0x01 ; 1 + 1020: 70 e0 ldi r23, 0x00 ; 0 + 1022: ce 01 movw r24, r28 + 1024: 01 96 adiw r24, 0x01 ; 1 + 1026: 0e 94 a8 01 call 0x350 ; 0x350 <hdlc_timeout_handler> + if (err == ERR_FRAME_TIME_OUT){ + 102a: 05 96 adiw r24, 0x05 ; 5 + 102c: 89 f4 brne .+34 ; 0x1050 <main+0x204> + hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); + 102e: 48 e4 ldi r20, 0x48 ; 72 + 1030: 50 e0 ldi r21, 0x00 ; 0 + 1032: be 01 movw r22, r28 + 1034: 68 58 subi r22, 0x88 ; 136 + 1036: 7f 4f sbci r23, 0xFF ; 255 + 1038: ce 01 movw r24, r28 + 103a: 01 96 adiw r24, 0x01 ; 1 + 103c: 0e 94 91 00 call 0x122 ; 0x122 <hdlc_get_raw_frame> + UART_send(buffer_data, sizeof buffer_data); + 1040: 68 e4 ldi r22, 0x48 ; 72 + 1042: 70 e0 ldi r23, 0x00 ; 0 + 1044: ce 01 movw r24, r28 + 1046: 88 58 subi r24, 0x88 ; 136 + 1048: 9f 4f sbci r25, 0xFF ; 255 + 104a: 0e 94 aa 0a call 0x1554 ; 0x1554 <UART_send> + 104e: e0 cf rjmp .-64 ; 0x1010 <main+0x1c4> + continue; + } + + err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive_data, sizeof buffer_recive_data, data_recive, &len_data_recive); + 1050: 8e 01 movw r16, r28 + 1052: 13 95 inc r17 + 1054: 9e 01 movw r18, r28 + 1056: 20 54 subi r18, 0x40 ; 64 + 1058: 3f 4f sbci r19, 0xFF ; 255 + 105a: 40 e9 ldi r20, 0x90 ; 144 + 105c: 50 e0 ldi r21, 0x00 ; 0 + 105e: be 01 movw r22, r28 + 1060: 60 5a subi r22, 0xA0 ; 160 + 1062: 7e 4f sbci r23, 0xFE ; 254 + 1064: ce 01 movw r24, r28 + 1066: 01 96 adiw r24, 0x01 ; 1 + 1068: 0e 94 07 01 call 0x20e ; 0x20e <hdlc_decode_recived_raw_data> + 106c: 8c 01 movw r16, r24 + if (err < 0){ + 106e: 99 23 and r25, r25 + 1070: 9c f4 brge .+38 ; 0x1098 <main+0x24c> + if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ + 1072: 06 96 adiw r24, 0x06 ; 6 + 1074: b1 f4 brne .+44 ; 0x10a2 <main+0x256> + uint8_t* buffer_rej[10]; + hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); + 1076: 44 e1 ldi r20, 0x14 ; 20 + 1078: 50 e0 ldi r21, 0x00 ; 0 + 107a: be 01 movw r22, r28 + 107c: 60 51 subi r22, 0x10 ; 16 + 107e: 7e 4f sbci r23, 0xFE ; 254 + 1080: ce 01 movw r24, r28 + 1082: 01 96 adiw r24, 0x01 ; 1 + 1084: 0e 94 91 00 call 0x122 ; 0x122 <hdlc_get_raw_frame> + UART_send(buffer_rej, sizeof buffer_rej); + 1088: 64 e1 ldi r22, 0x14 ; 20 + 108a: 70 e0 ldi r23, 0x00 ; 0 + 108c: ce 01 movw r24, r28 + 108e: 80 51 subi r24, 0x10 ; 16 + 1090: 9e 4f sbci r25, 0xFE ; 254 + 1092: 0e 94 aa 0a call 0x1554 ; 0x1554 <UART_send> + 1096: 05 c0 rjmp .+10 ; 0x10a2 <main+0x256> + return err; + } + return err; + } + + if (hdlc.state == SEND){ + 1098: 89 81 ldd r24, Y+1 ; 0x01 + UART_send(buffer_data, sizeof buffer_data); + + bool flag_recive = false; + uint8_t data_recive[64]; + size_t len_data_recive; + while (!flag_recive){ + 109a: 86 30 cpi r24, 0x06 ; 6 + 109c: 09 f0 breq .+2 ; 0x10a0 <main+0x254> + 109e: b8 cf rjmp .-144 ; 0x1010 <main+0x1c4> + 10a0: 03 c0 rjmp .+6 ; 0x10a8 <main+0x25c> + hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); + UART_send(buffer_data, sizeof buffer_data); + continue; + } + + err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive_data, sizeof buffer_recive_data, data_recive, &len_data_recive); + 10a2: 80 2f mov r24, r16 + 10a4: 91 2f mov r25, r17 + 10a6: 52 c0 rjmp .+164 ; 0x114c <main+0x300> + flag_recive = true; + } + } + + struct message resp; + protocol_decode(data_recive, len_data_recive, &resp); + 10a8: c0 50 subi r28, 0x00 ; 0 + 10aa: df 4f sbci r29, 0xFF ; 255 + 10ac: 68 81 ld r22, Y + 10ae: 79 81 ldd r23, Y+1 ; 0x01 + 10b0: c0 50 subi r28, 0x00 ; 0 + 10b2: d1 40 sbci r29, 0x01 ; 1 + 10b4: ae 01 movw r20, r28 + 10b6: 4e 5f subi r20, 0xFE ; 254 + 10b8: 5e 4f sbci r21, 0xFE ; 254 + 10ba: ce 01 movw r24, r28 + 10bc: 80 54 subi r24, 0x40 ; 64 + 10be: 9f 4f sbci r25, 0xFF ; 255 + 10c0: 0e 94 be 08 call 0x117c ; 0x117c <protocol_decode> + + struct DisplayData disp; + disp.value1 = resp.numbers[0]; + 10c4: ce 5f subi r28, 0xFE ; 254 + 10c6: de 4f sbci r29, 0xFE ; 254 + 10c8: 88 81 ld r24, Y + 10ca: 99 81 ldd r25, Y+1 ; 0x01 + 10cc: aa 81 ldd r26, Y+2 ; 0x02 + 10ce: bb 81 ldd r27, Y+3 ; 0x03 + 10d0: c2 50 subi r28, 0x02 ; 2 + 10d2: d1 40 sbci r29, 0x01 ; 1 + 10d4: cc 5a subi r28, 0xAC ; 172 + 10d6: de 4f sbci r29, 0xFE ; 254 + 10d8: 88 83 st Y, r24 + 10da: 99 83 std Y+1, r25 ; 0x01 + 10dc: aa 83 std Y+2, r26 ; 0x02 + 10de: bb 83 std Y+3, r27 ; 0x03 + 10e0: c4 55 subi r28, 0x54 ; 84 + 10e2: d1 40 sbci r29, 0x01 ; 1 + disp.value2 = resp.numbers[1]; + 10e4: ca 5f subi r28, 0xFA ; 250 + 10e6: de 4f sbci r29, 0xFE ; 254 + 10e8: 88 81 ld r24, Y + 10ea: 99 81 ldd r25, Y+1 ; 0x01 + 10ec: aa 81 ldd r26, Y+2 ; 0x02 + 10ee: bb 81 ldd r27, Y+3 ; 0x03 + 10f0: c6 50 subi r28, 0x06 ; 6 + 10f2: d1 40 sbci r29, 0x01 ; 1 + 10f4: c8 5a subi r28, 0xA8 ; 168 + 10f6: de 4f sbci r29, 0xFE ; 254 + 10f8: 88 83 st Y, r24 + 10fa: 99 83 std Y+1, r25 ; 0x01 + 10fc: aa 83 std Y+2, r26 ; 0x02 + 10fe: bb 83 std Y+3, r27 ; 0x03 + 1100: c8 55 subi r28, 0x58 ; 88 + 1102: d1 40 sbci r29, 0x01 ; 1 + disp.value3 = resp.numbers[2]; + 1104: c6 5f subi r28, 0xF6 ; 246 + 1106: de 4f sbci r29, 0xFE ; 254 + 1108: 88 81 ld r24, Y + 110a: 99 81 ldd r25, Y+1 ; 0x01 + 110c: aa 81 ldd r26, Y+2 ; 0x02 + 110e: bb 81 ldd r27, Y+3 ; 0x03 + 1110: ca 50 subi r28, 0x0A ; 10 + 1112: d1 40 sbci r29, 0x01 ; 1 + 1114: c4 5a subi r28, 0xA4 ; 164 + 1116: de 4f sbci r29, 0xFE ; 254 + 1118: 88 83 st Y, r24 + 111a: 99 83 std Y+1, r25 ; 0x01 + 111c: aa 83 std Y+2, r26 ; 0x02 + 111e: bb 83 std Y+3, r27 ; 0x03 + 1120: cc 55 subi r28, 0x5C ; 92 + 1122: d1 40 sbci r29, 0x01 ; 1 + //disp.topLine = *resp.str; + strncpy(disp.topLine, resp.str, sizeof(disp.topLine) - 1); + 1124: c0 5f subi r28, 0xF0 ; 240 + 1126: de 4f sbci r29, 0xFE ; 254 + 1128: 68 81 ld r22, Y + 112a: 79 81 ldd r23, Y+1 ; 0x01 + 112c: c0 51 subi r28, 0x10 ; 16 + 112e: d1 40 sbci r29, 0x01 ; 1 + 1130: 4f e3 ldi r20, 0x3F ; 63 + 1132: 50 e0 ldi r21, 0x00 ; 0 + 1134: ce 01 movw r24, r28 + 1136: 8c 5e subi r24, 0xEC ; 236 + 1138: 9e 4f sbci r25, 0xFE ; 254 + 113a: 0e 94 8a 0b call 0x1714 ; 0x1714 <strncpy> + + printLcd(&disp); + 113e: ce 01 movw r24, r28 + 1140: 8c 5e subi r24, 0xEC ; 236 + 1142: 9e 4f sbci r25, 0xFE ; 254 + 1144: 0e 94 08 06 call 0xc10 ; 0xc10 <printLcd> + + return 0; + 1148: 80 e0 ldi r24, 0x00 ; 0 + 114a: 90 e0 ldi r25, 0x00 ; 0 + 114c: cd 5f subi r28, 0xFD ; 253 + 114e: dd 4f sbci r29, 0xFD ; 253 + 1150: 0f b6 in r0, 0x3f ; 63 + 1152: f8 94 cli + 1154: de bf out 0x3e, r29 ; 62 + 1156: 0f be out 0x3f, r0 ; 63 + 1158: cd bf out 0x3d, r28 ; 61 + 115a: df 91 pop r29 + 115c: cf 91 pop r28 + 115e: 1f 91 pop r17 + 1160: 0f 91 pop r16 + 1162: ff 90 pop r15 + 1164: ef 90 pop r14 + 1166: df 90 pop r13 + 1168: cf 90 pop r12 + 116a: bf 90 pop r11 + 116c: af 90 pop r10 + 116e: 9f 90 pop r9 + 1170: 8f 90 pop r8 + 1172: 7f 90 pop r7 + 1174: 6f 90 pop r6 + 1176: 5f 90 pop r5 + 1178: 4f 90 pop r4 + 117a: 08 95 ret + +0000117c <protocol_decode>: +#include "protocol.h" + +void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ + 117c: 8f 92 push r8 + 117e: 9f 92 push r9 + 1180: af 92 push r10 + 1182: bf 92 push r11 + 1184: cf 92 push r12 + 1186: df 92 push r13 + 1188: ef 92 push r14 + 118a: ff 92 push r15 + 118c: 0f 93 push r16 + 118e: 1f 93 push r17 + 1190: cf 93 push r28 + 1192: df 93 push r29 + 1194: cd b7 in r28, 0x3d ; 61 + 1196: de b7 in r29, 0x3e ; 62 + 1198: c0 54 subi r28, 0x40 ; 64 + 119a: d1 09 sbc r29, r1 + 119c: 0f b6 in r0, 0x3f ; 63 + 119e: f8 94 cli + 11a0: de bf out 0x3e, r29 ; 62 + 11a2: 0f be out 0x3f, r0 ; 63 + 11a4: cd bf out 0x3d, r28 ; 61 + 11a6: 4b 01 movw r8, r22 + int count_number = 0; + for(int i = 0; i < len_encode_message; i++){ + 11a8: 67 2b or r22, r23 + 11aa: 09 f4 brne .+2 ; 0x11ae <protocol_decode+0x32> + 11ac: 6c c0 rjmp .+216 ; 0x1286 <protocol_decode+0x10a> + 11ae: 20 e0 ldi r18, 0x00 ; 0 + 11b0: 30 e0 ldi r19, 0x00 ; 0 + 11b2: 60 e0 ldi r22, 0x00 ; 0 + 11b4: 70 e0 ldi r23, 0x00 ; 0 + 11b6: a1 2c mov r10, r1 + 11b8: b1 2c mov r11, r1 + 11ba: 6e 01 movw r12, r28 + 11bc: e5 e0 ldi r30, 0x05 ; 5 + 11be: ce 0e add r12, r30 + 11c0: d1 1c adc r13, r1 + 11c2: fe 01 movw r30, r28 + 11c4: 31 96 adiw r30, 0x01 ; 1 + 11c6: 7f 01 movw r14, r30 + if (encode_message[i] == FLAG_NUMBER){ + 11c8: fc 01 movw r30, r24 + 11ca: e2 0f add r30, r18 + 11cc: f3 1f adc r31, r19 + 11ce: 20 81 ld r18, Z + 11d0: 21 11 cpse r18, r1 + 11d2: 27 c0 rjmp .+78 ; 0x1222 <protocol_decode+0xa6> + 11d4: db 01 movw r26, r22 + 11d6: 11 96 adiw r26, 0x01 ; 1 + 11d8: a8 0f add r26, r24 + 11da: b9 1f adc r27, r25 + 11dc: fe 01 movw r30, r28 + 11de: 31 96 adiw r30, 0x01 ; 1 + union convert_float sample; + for (int z = 0; z < sizeof sample.buf; z++){ + i++; + sample.buf[z] = encode_message[i]; + 11e0: 2d 91 ld r18, X+ + 11e2: 21 93 st Z+, r18 +void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ + int count_number = 0; + for(int i = 0; i < len_encode_message; i++){ + if (encode_message[i] == FLAG_NUMBER){ + union convert_float sample; + for (int z = 0; z < sizeof sample.buf; z++){ + 11e4: ec 15 cp r30, r12 + 11e6: fd 05 cpc r31, r13 + 11e8: d9 f7 brne .-10 ; 0x11e0 <protocol_decode+0x64> + 11ea: 6c 5f subi r22, 0xFC ; 252 + 11ec: 7f 4f sbci r23, 0xFF ; 255 + i++; + sample.buf[z] = encode_message[i]; + } + decode_message->numbers[count_number++] = sample.fVal; + 11ee: f5 01 movw r30, r10 + 11f0: ee 0f add r30, r30 + 11f2: ff 1f adc r31, r31 + 11f4: ee 0f add r30, r30 + 11f6: ff 1f adc r31, r31 + 11f8: e4 0f add r30, r20 + 11fa: f5 1f adc r31, r21 + 11fc: 09 81 ldd r16, Y+1 ; 0x01 + 11fe: 1a 81 ldd r17, Y+2 ; 0x02 + 1200: 2b 81 ldd r18, Y+3 ; 0x03 + 1202: 3c 81 ldd r19, Y+4 ; 0x04 + 1204: 00 83 st Z, r16 + 1206: 11 83 std Z+1, r17 ; 0x01 + 1208: 22 83 std Z+2, r18 ; 0x02 + 120a: 33 83 std Z+3, r19 ; 0x03 + decode_message->len_numbers++; + 120c: fa 01 movw r30, r20 + 120e: 24 85 ldd r18, Z+12 ; 0x0c + 1210: 35 85 ldd r19, Z+13 ; 0x0d + 1212: 2f 5f subi r18, 0xFF ; 255 + 1214: 3f 4f sbci r19, 0xFF ; 255 + 1216: 35 87 std Z+13, r19 ; 0x0d + 1218: 24 87 std Z+12, r18 ; 0x0c + union convert_float sample; + for (int z = 0; z < sizeof sample.buf; z++){ + i++; + sample.buf[z] = encode_message[i]; + } + decode_message->numbers[count_number++] = sample.fVal; + 121a: 95 01 movw r18, r10 + 121c: 2f 5f subi r18, 0xFF ; 255 + 121e: 3f 4f sbci r19, 0xFF ; 255 + 1220: 59 01 movw r10, r18 + decode_message->len_numbers++; + } + + + if (encode_message[i] == FLAG_WORD){ + 1222: fc 01 movw r30, r24 + 1224: e6 0f add r30, r22 + 1226: f7 1f adc r31, r23 + 1228: 20 81 ld r18, Z + 122a: 21 30 cpi r18, 0x01 ; 1 + 122c: 21 f5 brne .+72 ; 0x1276 <protocol_decode+0xfa> + int count_word = 0; + i++; + 122e: 9b 01 movw r18, r22 + 1230: 2f 5f subi r18, 0xFF ; 255 + 1232: 3f 4f sbci r19, 0xFF ; 255 + union convert_char sample; + for (int z = 0; z < encode_message[i]; z++){ + 1234: fc 01 movw r30, r24 + 1236: e2 0f add r30, r18 + 1238: f3 1f adc r31, r19 + 123a: e0 81 ld r30, Z + 123c: ee 23 and r30, r30 + 123e: 99 f0 breq .+38 ; 0x1266 <protocol_decode+0xea> + 1240: 6e 5f subi r22, 0xFE ; 254 + 1242: 7f 4f sbci r23, 0xFF ; 255 + 1244: dc 01 movw r26, r24 + 1246: a6 0f add r26, r22 + 1248: b7 1f adc r27, r23 + 124a: f7 01 movw r30, r14 + 124c: b9 01 movw r22, r18 + i++; + 124e: 6f 5f subi r22, 0xFF ; 255 + 1250: 7f 4f sbci r23, 0xFF ; 255 + sample.buf[z] = encode_message[i]; + 1252: 2d 91 ld r18, X+ + 1254: 21 93 st Z+, r18 + + if (encode_message[i] == FLAG_WORD){ + int count_word = 0; + i++; + union convert_char sample; + for (int z = 0; z < encode_message[i]; z++){ + 1256: 30 e0 ldi r19, 0x00 ; 0 + 1258: 8f 01 movw r16, r30 + 125a: 0e 19 sub r16, r14 + 125c: 1f 09 sbc r17, r15 + 125e: 02 17 cp r16, r18 + 1260: 13 07 cpc r17, r19 + 1262: ac f3 brlt .-22 ; 0x124e <protocol_decode+0xd2> + 1264: 01 c0 rjmp .+2 ; 0x1268 <protocol_decode+0xec> + } + + + if (encode_message[i] == FLAG_WORD){ + int count_word = 0; + i++; + 1266: b9 01 movw r22, r18 + union convert_char sample; + for (int z = 0; z < encode_message[i]; z++){ + i++; + sample.buf[z] = encode_message[i]; + } + decode_message->str = sample.cVal; + 1268: 29 81 ldd r18, Y+1 ; 0x01 + 126a: 3a 81 ldd r19, Y+2 ; 0x02 + 126c: fa 01 movw r30, r20 + 126e: 37 87 std Z+15, r19 ; 0x0f + 1270: 26 87 std Z+14, r18 ; 0x0e + decode_message->len_str = count_word; + 1272: 11 8a std Z+17, r1 ; 0x11 + 1274: 10 8a std Z+16, r1 ; 0x10 +#include "protocol.h" + +void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ + int count_number = 0; + for(int i = 0; i < len_encode_message; i++){ + 1276: 6f 5f subi r22, 0xFF ; 255 + 1278: 7f 4f sbci r23, 0xFF ; 255 + 127a: 9b 01 movw r18, r22 + 127c: 68 15 cp r22, r8 + 127e: 79 05 cpc r23, r9 + 1280: 08 f4 brcc .+2 ; 0x1284 <protocol_decode+0x108> + 1282: a2 cf rjmp .-188 ; 0x11c8 <protocol_decode+0x4c> + 1284: 02 c0 rjmp .+4 ; 0x128a <protocol_decode+0x10e> +#include "protocol.h" + +void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ + int count_number = 0; + 1286: a1 2c mov r10, r1 + 1288: b1 2c mov r11, r1 + } + decode_message->str = sample.cVal; + decode_message->len_str = count_word; + } + } + decode_message->len_numbers = count_number; + 128a: fa 01 movw r30, r20 + 128c: b5 86 std Z+13, r11 ; 0x0d + 128e: a4 86 std Z+12, r10 ; 0x0c +} + 1290: c0 5c subi r28, 0xC0 ; 192 + 1292: df 4f sbci r29, 0xFF ; 255 + 1294: 0f b6 in r0, 0x3f ; 63 + 1296: f8 94 cli + 1298: de bf out 0x3e, r29 ; 62 + 129a: 0f be out 0x3f, r0 ; 63 + 129c: cd bf out 0x3d, r28 ; 61 + 129e: df 91 pop r29 + 12a0: cf 91 pop r28 + 12a2: 1f 91 pop r17 + 12a4: 0f 91 pop r16 + 12a6: ff 90 pop r15 + 12a8: ef 90 pop r14 + 12aa: df 90 pop r13 + 12ac: cf 90 pop r12 + 12ae: bf 90 pop r11 + 12b0: af 90 pop r10 + 12b2: 9f 90 pop r9 + 12b4: 8f 90 pop r8 + 12b6: 08 95 ret + +000012b8 <protocol_encode>: + +void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){ + 12b8: 4f 92 push r4 + 12ba: 5f 92 push r5 + 12bc: 6f 92 push r6 + 12be: 7f 92 push r7 + 12c0: 8f 92 push r8 + 12c2: 9f 92 push r9 + 12c4: af 92 push r10 + 12c6: bf 92 push r11 + 12c8: cf 92 push r12 + 12ca: df 92 push r13 + 12cc: ef 92 push r14 + 12ce: ff 92 push r15 + 12d0: 0f 93 push r16 + 12d2: 1f 93 push r17 + 12d4: cf 93 push r28 + 12d6: df 93 push r29 + 12d8: cd b7 in r28, 0x3d ; 61 + 12da: de b7 in r29, 0x3e ; 62 + 12dc: c2 55 subi r28, 0x52 ; 82 + 12de: d1 09 sbc r29, r1 + 12e0: 0f b6 in r0, 0x3f ; 63 + 12e2: f8 94 cli + 12e4: de bf out 0x3e, r29 ; 62 + 12e6: 0f be out 0x3f, r0 ; 63 + 12e8: cd bf out 0x3d, r28 ; 61 + 12ea: 22 96 adiw r28, 0x02 ; 2 + 12ec: 8f ae std Y+63, r8 ; 0x3f + 12ee: 22 97 sbiw r28, 0x02 ; 2 + 12f0: 23 96 adiw r28, 0x03 ; 3 + 12f2: 9f ae std Y+63, r9 ; 0x3f + 12f4: 23 97 sbiw r28, 0x03 ; 3 + 12f6: 24 96 adiw r28, 0x04 ; 4 + 12f8: af ae std Y+63, r10 ; 0x3f + 12fa: 24 97 sbiw r28, 0x04 ; 4 + 12fc: 25 96 adiw r28, 0x05 ; 5 + 12fe: bf ae std Y+63, r11 ; 0x3f + 1300: 25 97 sbiw r28, 0x05 ; 5 + 1302: 26 96 adiw r28, 0x06 ; 6 + 1304: cf ae std Y+63, r12 ; 0x3f + 1306: 26 97 sbiw r28, 0x06 ; 6 + 1308: 27 96 adiw r28, 0x07 ; 7 + 130a: df ae std Y+63, r13 ; 0x3f + 130c: 27 97 sbiw r28, 0x07 ; 7 + 130e: 28 96 adiw r28, 0x08 ; 8 + 1310: ef ae std Y+63, r14 ; 0x3f + 1312: 28 97 sbiw r28, 0x08 ; 8 + 1314: 29 96 adiw r28, 0x09 ; 9 + 1316: ff ae std Y+63, r15 ; 0x3f + 1318: 29 97 sbiw r28, 0x09 ; 9 + 131a: 2a 96 adiw r28, 0x0a ; 10 + 131c: 0f af std Y+63, r16 ; 0x3f + 131e: 2a 97 sbiw r28, 0x0a ; 10 + 1320: 2b 96 adiw r28, 0x0b ; 11 + 1322: 1f af std Y+63, r17 ; 0x3f + 1324: 2b 97 sbiw r28, 0x0b ; 11 + 1326: 2c 96 adiw r28, 0x0c ; 12 + 1328: 2f af std Y+63, r18 ; 0x3f + 132a: 2c 97 sbiw r28, 0x0c ; 12 + 132c: 2d 96 adiw r28, 0x0d ; 13 + 132e: 3f af std Y+63, r19 ; 0x3f + 1330: 2d 97 sbiw r28, 0x0d ; 13 + 1332: 2e 96 adiw r28, 0x0e ; 14 + 1334: 4f af std Y+63, r20 ; 0x3f + 1336: 2e 97 sbiw r28, 0x0e ; 14 + 1338: 2f 96 adiw r28, 0x0f ; 15 + 133a: 5f af std Y+63, r21 ; 0x3f + 133c: 2f 97 sbiw r28, 0x0f ; 15 + 133e: 60 96 adiw r28, 0x10 ; 16 + 1340: 6f af std Y+63, r22 ; 0x3f + 1342: 60 97 sbiw r28, 0x10 ; 16 + 1344: 61 96 adiw r28, 0x11 ; 17 + 1346: 7f af std Y+63, r23 ; 0x3f + 1348: 61 97 sbiw r28, 0x11 ; 17 + 134a: 62 96 adiw r28, 0x12 ; 18 + 134c: 8f af std Y+63, r24 ; 0x3f + 134e: 62 97 sbiw r28, 0x12 ; 18 + 1350: 63 96 adiw r28, 0x13 ; 19 + 1352: 9f af std Y+63, r25 ; 0x3f + 1354: 63 97 sbiw r28, 0x13 ; 19 + 1356: a7 96 adiw r28, 0x27 ; 39 + 1358: 0e ad ldd r16, Y+62 ; 0x3e + 135a: 1f ad ldd r17, Y+63 ; 0x3f + 135c: a7 97 sbiw r28, 0x27 ; 39 + 135e: 2f 96 adiw r28, 0x0f ; 15 + 1360: ce ac ldd r12, Y+62 ; 0x3e + 1362: df ac ldd r13, Y+63 ; 0x3f + 1364: 2f 97 sbiw r28, 0x0f ; 15 + 1366: 63 96 adiw r28, 0x13 ; 19 + 1368: 6e ad ldd r22, Y+62 ; 0x3e + 136a: 7f ad ldd r23, Y+63 ; 0x3f + 136c: 63 97 sbiw r28, 0x13 ; 19 + size_t count = 0; + if (message.len_numbers > 0){ + 136e: c1 14 cp r12, r1 + 1370: d1 04 cpc r13, r1 + 1372: 09 f4 brne .+2 ; 0x1376 <protocol_encode+0xbe> + 1374: 66 c0 rjmp .+204 ; 0x1442 <protocol_encode+0x18a> + 1376: 78 01 movw r14, r16 + 1378: ce 01 movw r24, r28 + 137a: 8f 5b subi r24, 0xBF ; 191 + 137c: 9f 4f sbci r25, 0xFF ; 255 + 137e: 56 01 movw r10, r12 + 1380: aa 0c add r10, r10 + 1382: bb 1c adc r11, r11 + 1384: aa 0c add r10, r10 + 1386: bb 1c adc r11, r11 + 1388: a8 0e add r10, r24 + 138a: b9 1e adc r11, r25 + 138c: ae 01 movw r20, r28 + 138e: 4b 5f subi r20, 0xFB ; 251 + 1390: 5f 4f sbci r21, 0xFF ; 255 + for (int i = 0; i < message.len_numbers; i++){ + encode_message[count++] = FLAG_NUMBER; + 1392: f7 01 movw r30, r14 + 1394: 11 92 st Z+, r1 + union convert_float sample; + sample.fVal = message.numbers[i]; + 1396: dc 01 movw r26, r24 + 1398: 4d 90 ld r4, X+ + 139a: 5d 90 ld r5, X+ + 139c: 6d 90 ld r6, X+ + 139e: 7d 90 ld r7, X+ + 13a0: cd 01 movw r24, r26 + 13a2: 49 82 std Y+1, r4 ; 0x01 + 13a4: 5a 82 std Y+2, r5 ; 0x02 + 13a6: 6b 82 std Y+3, r6 ; 0x03 + 13a8: 7c 82 std Y+4, r7 ; 0x04 + 13aa: de 01 movw r26, r28 + 13ac: 11 96 adiw r26, 0x01 ; 1 + for (int z = 0; z < sizeof sample.buf; z++){ + encode_message[count++] = sample.buf[z]; + 13ae: 3d 91 ld r19, X+ + 13b0: 31 93 st Z+, r19 + if (message.len_numbers > 0){ + for (int i = 0; i < message.len_numbers; i++){ + encode_message[count++] = FLAG_NUMBER; + union convert_float sample; + sample.fVal = message.numbers[i]; + for (int z = 0; z < sizeof sample.buf; z++){ + 13b2: a4 17 cp r26, r20 + 13b4: b5 07 cpc r27, r21 + 13b6: d9 f7 brne .-10 ; 0x13ae <protocol_encode+0xf6> + 13b8: b5 e0 ldi r27, 0x05 ; 5 + 13ba: eb 0e add r14, r27 + 13bc: f1 1c adc r15, r1 +} + +void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){ + size_t count = 0; + if (message.len_numbers > 0){ + for (int i = 0; i < message.len_numbers; i++){ + 13be: 8a 15 cp r24, r10 + 13c0: 9b 05 cpc r25, r11 + 13c2: 39 f7 brne .-50 ; 0x1392 <protocol_encode+0xda> + 13c4: 96 01 movw r18, r12 + 13c6: 22 0f add r18, r18 + 13c8: 33 1f adc r19, r19 + 13ca: 22 0f add r18, r18 + 13cc: 33 1f adc r19, r19 + 13ce: 2c 0d add r18, r12 + 13d0: 3d 1d adc r19, r13 + encode_message[count++] = sample.buf[z]; + } + } + } + + if (message.len_str > 0){ + 13d2: 61 15 cp r22, r1 + 13d4: 71 05 cpc r23, r1 + 13d6: 09 f1 breq .+66 ; 0x141a <protocol_encode+0x162> + encode_message[count++] = FLAG_WORD; + 13d8: d8 01 movw r26, r16 + 13da: a2 0f add r26, r18 + 13dc: b3 1f adc r27, r19 + 13de: 81 e0 ldi r24, 0x01 ; 1 + 13e0: 8c 93 st X, r24 + encode_message[count++] = message.len_str; + 13e2: d9 01 movw r26, r18 + 13e4: 11 96 adiw r26, 0x01 ; 1 + 13e6: a0 0f add r26, r16 + 13e8: b1 1f adc r27, r17 + 13ea: 2e 5f subi r18, 0xFE ; 254 + 13ec: 3f 4f sbci r19, 0xFF ; 255 + 13ee: 6c 93 st X, r22 + union convert_char sample; + sample.cVal = message.str; + 13f0: 61 96 adiw r28, 0x11 ; 17 + 13f2: 8e ad ldd r24, Y+62 ; 0x3e + 13f4: 9f ad ldd r25, Y+63 ; 0x3f + 13f6: 61 97 sbiw r28, 0x11 ; 17 + 13f8: 9a 83 std Y+2, r25 ; 0x02 + 13fa: 89 83 std Y+1, r24 ; 0x01 + 13fc: de 01 movw r26, r28 + 13fe: 11 96 adiw r26, 0x01 ; 1 + 1400: f8 01 movw r30, r16 + 1402: e2 0f add r30, r18 + 1404: f3 1f adc r31, r19 + } + } + + if (message.len_str > 0){ + encode_message[count++] = FLAG_WORD; + encode_message[count++] = message.len_str; + 1406: 80 e0 ldi r24, 0x00 ; 0 + 1408: 90 e0 ldi r25, 0x00 ; 0 + union convert_char sample; + sample.cVal = message.str; + for (int i = 0; i < message.len_str; i++){ + encode_message[count++] = sample.buf[i]; + 140a: 2f 5f subi r18, 0xFF ; 255 + 140c: 3f 4f sbci r19, 0xFF ; 255 + 140e: 4d 91 ld r20, X+ + 1410: 41 93 st Z+, r20 + if (message.len_str > 0){ + encode_message[count++] = FLAG_WORD; + encode_message[count++] = message.len_str; + union convert_char sample; + sample.cVal = message.str; + for (int i = 0; i < message.len_str; i++){ + 1412: 01 96 adiw r24, 0x01 ; 1 + 1414: 86 17 cp r24, r22 + 1416: 97 07 cpc r25, r23 + 1418: c0 f3 brcs .-16 ; 0x140a <protocol_encode+0x152> + encode_message[count++] = sample.buf[i]; + } + } + + *len_encode_message = count; + 141a: a9 96 adiw r28, 0x29 ; 41 + 141c: ee ad ldd r30, Y+62 ; 0x3e + 141e: ff ad ldd r31, Y+63 ; 0x3f + 1420: a9 97 sbiw r28, 0x29 ; 41 + 1422: 31 83 std Z+1, r19 ; 0x01 + 1424: 20 83 st Z, r18 + 1426: 13 c0 rjmp .+38 ; 0x144e <protocol_encode+0x196> + } + } + } + + if (message.len_str > 0){ + encode_message[count++] = FLAG_WORD; + 1428: 81 e0 ldi r24, 0x01 ; 1 + 142a: f8 01 movw r30, r16 + 142c: 80 83 st Z, r24 + encode_message[count++] = message.len_str; + 142e: 61 83 std Z+1, r22 ; 0x01 + union convert_char sample; + sample.cVal = message.str; + 1430: 61 96 adiw r28, 0x11 ; 17 + 1432: 8e ad ldd r24, Y+62 ; 0x3e + 1434: 9f ad ldd r25, Y+63 ; 0x3f + 1436: 61 97 sbiw r28, 0x11 ; 17 + 1438: 9a 83 std Y+2, r25 ; 0x02 + 143a: 89 83 std Y+1, r24 ; 0x01 + } + } + + if (message.len_str > 0){ + encode_message[count++] = FLAG_WORD; + encode_message[count++] = message.len_str; + 143c: 22 e0 ldi r18, 0x02 ; 2 + 143e: 30 e0 ldi r19, 0x00 ; 0 + 1440: dd cf rjmp .-70 ; 0x13fc <protocol_encode+0x144> + encode_message[count++] = sample.buf[z]; + } + } + } + + if (message.len_str > 0){ + 1442: 61 15 cp r22, r1 + 1444: 71 05 cpc r23, r1 + 1446: 81 f7 brne .-32 ; 0x1428 <protocol_encode+0x170> + } + decode_message->len_numbers = count_number; +} + +void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){ + size_t count = 0; + 1448: 20 e0 ldi r18, 0x00 ; 0 + 144a: 30 e0 ldi r19, 0x00 ; 0 + 144c: e6 cf rjmp .-52 ; 0x141a <protocol_encode+0x162> + encode_message[count++] = sample.buf[i]; + } + } + + *len_encode_message = count; + 144e: ce 5a subi r28, 0xAE ; 174 + 1450: df 4f sbci r29, 0xFF ; 255 + 1452: 0f b6 in r0, 0x3f ; 63 + 1454: f8 94 cli + 1456: de bf out 0x3e, r29 ; 62 + 1458: 0f be out 0x3f, r0 ; 63 + 145a: cd bf out 0x3d, r28 ; 61 + 145c: df 91 pop r29 + 145e: cf 91 pop r28 + 1460: 1f 91 pop r17 + 1462: 0f 91 pop r16 + 1464: ff 90 pop r15 + 1466: ef 90 pop r14 + 1468: df 90 pop r13 + 146a: cf 90 pop r12 + 146c: bf 90 pop r11 + 146e: af 90 pop r10 + 1470: 9f 90 pop r9 + 1472: 8f 90 pop r8 + 1474: 7f 90 pop r7 + 1476: 6f 90 pop r6 + 1478: 5f 90 pop r5 + 147a: 4f 90 pop r4 + 147c: 08 95 ret + +0000147e <buffer_empty>: +void initialize_buffer(struct circular_buffer* cb) { + cb->buf_head = 0; + cb->buf_tail = 0; +} +// Проверка, пустой ли буфер +int buffer_empty(const struct circular_buffer* cb) { + 147e: fc 01 movw r30, r24 + return cb->buf_head == cb->buf_tail; + 1480: 81 e0 ldi r24, 0x01 ; 1 + 1482: 90 e0 ldi r25, 0x00 ; 0 + 1484: 30 a1 ldd r19, Z+32 ; 0x20 + 1486: 21 a1 ldd r18, Z+33 ; 0x21 + 1488: 32 17 cp r19, r18 + 148a: 11 f0 breq .+4 ; 0x1490 <buffer_empty+0x12> + 148c: 80 e0 ldi r24, 0x00 ; 0 + 148e: 90 e0 ldi r25, 0x00 ; 0 +} + 1490: 08 95 ret + +00001492 <buffer_full>: +// Проверка, заполнен ли буфер +int buffer_full(const struct circular_buffer* cb) { + return (cb->buf_tail + 1) % BUFFER_SIZE == cb->buf_head; //проверяем следующее число, если оно будет совпадать с индексом головы то будет false, при совпадении вывод true + 1492: fc 01 movw r30, r24 + 1494: 21 a1 ldd r18, Z+33 ; 0x21 + 1496: 30 e0 ldi r19, 0x00 ; 0 + 1498: 2f 5f subi r18, 0xFF ; 255 + 149a: 3f 4f sbci r19, 0xFF ; 255 + 149c: 2f 71 andi r18, 0x1F ; 31 + 149e: 30 78 andi r19, 0x80 ; 128 + 14a0: 33 23 and r19, r19 + 14a2: 34 f4 brge .+12 ; 0x14b0 <buffer_full+0x1e> + 14a4: 21 50 subi r18, 0x01 ; 1 + 14a6: 31 09 sbc r19, r1 + 14a8: 20 6e ori r18, 0xE0 ; 224 + 14aa: 3f 6f ori r19, 0xFF ; 255 + 14ac: 2f 5f subi r18, 0xFF ; 255 + 14ae: 3f 4f sbci r19, 0xFF ; 255 + 14b0: fc 01 movw r30, r24 + 14b2: 40 a1 ldd r20, Z+32 ; 0x20 + 14b4: 50 e0 ldi r21, 0x00 ; 0 + 14b6: 81 e0 ldi r24, 0x01 ; 1 + 14b8: 90 e0 ldi r25, 0x00 ; 0 + 14ba: 24 17 cp r18, r20 + 14bc: 35 07 cpc r19, r21 + 14be: 11 f0 breq .+4 ; 0x14c4 <buffer_full+0x32> + 14c0: 80 e0 ldi r24, 0x00 ; 0 + 14c2: 90 e0 ldi r25, 0x00 ; 0 +} + 14c4: 08 95 ret + +000014c6 <write_buffer>: +// Запись в буфер +void write_buffer(struct circular_buffer* cb, int value) { + 14c6: 1f 93 push r17 + 14c8: cf 93 push r28 + 14ca: df 93 push r29 + 14cc: ec 01 movw r28, r24 + 14ce: 16 2f mov r17, r22 + if (buffer_full(cb)) { // проверяем, заполнен ли буфер + 14d0: 0e 94 49 0a call 0x1492 ; 0x1492 <buffer_full> + 14d4: 89 2b or r24, r25 + 14d6: 81 f4 brne .+32 ; 0x14f8 <write_buffer+0x32> + return; + } + cb->buffer[cb->buf_tail] = value;// записываем значение в элемент массива в хвост + 14d8: 89 a1 ldd r24, Y+33 ; 0x21 + 14da: 90 e0 ldi r25, 0x00 ; 0 + 14dc: fe 01 movw r30, r28 + 14de: e8 0f add r30, r24 + 14e0: f9 1f adc r31, r25 + 14e2: 10 83 st Z, r17 + cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере + 14e4: 01 96 adiw r24, 0x01 ; 1 + 14e6: 8f 71 andi r24, 0x1F ; 31 + 14e8: 90 78 andi r25, 0x80 ; 128 + 14ea: 99 23 and r25, r25 + 14ec: 24 f4 brge .+8 ; 0x14f6 <write_buffer+0x30> + 14ee: 01 97 sbiw r24, 0x01 ; 1 + 14f0: 80 6e ori r24, 0xE0 ; 224 + 14f2: 9f 6f ori r25, 0xFF ; 255 + 14f4: 01 96 adiw r24, 0x01 ; 1 + 14f6: 89 a3 std Y+33, r24 ; 0x21 +} + 14f8: df 91 pop r29 + 14fa: cf 91 pop r28 + 14fc: 1f 91 pop r17 + 14fe: 08 95 ret + +00001500 <read_buffer>: +// Чтение элемента +int read_buffer(struct circular_buffer* cb) { + 1500: fc 01 movw r30, r24 + cb->buf_head = 0; + cb->buf_tail = 0; +} +// Проверка, пустой ли буфер +int buffer_empty(const struct circular_buffer* cb) { + return cb->buf_head == cb->buf_tail; + 1502: 20 a1 ldd r18, Z+32 ; 0x20 + cb->buffer[cb->buf_tail] = value;// записываем значение в элемент массива в хвост + cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере +} +// Чтение элемента +int read_buffer(struct circular_buffer* cb) { + if (buffer_empty(cb)) { // проверка на пустоту + 1504: 81 a1 ldd r24, Z+33 ; 0x21 + 1506: 28 17 cp r18, r24 + 1508: b1 f0 breq .+44 ; 0x1536 <read_buffer+0x36> + return -1;// -1 как индикатор в случае ошибки + } + int value = cb->buffer[cb->buf_head]; // чтение по индексу головы + 150a: 30 e0 ldi r19, 0x00 ; 0 + 150c: df 01 movw r26, r30 + 150e: a2 0f add r26, r18 + 1510: b3 1f adc r27, r19 + 1512: 4c 91 ld r20, X + 1514: 50 e0 ldi r21, 0x00 ; 0 + cb->buf_head = (cb->buf_head + 1) % BUFFER_SIZE; // увеличиваем индекс на 1 + 1516: 2f 5f subi r18, 0xFF ; 255 + 1518: 3f 4f sbci r19, 0xFF ; 255 + 151a: 2f 71 andi r18, 0x1F ; 31 + 151c: 30 78 andi r19, 0x80 ; 128 + 151e: 33 23 and r19, r19 + 1520: 34 f4 brge .+12 ; 0x152e <read_buffer+0x2e> + 1522: 21 50 subi r18, 0x01 ; 1 + 1524: 31 09 sbc r19, r1 + 1526: 20 6e ori r18, 0xE0 ; 224 + 1528: 3f 6f ori r19, 0xFF ; 255 + 152a: 2f 5f subi r18, 0xFF ; 255 + 152c: 3f 4f sbci r19, 0xFF ; 255 + 152e: 20 a3 std Z+32, r18 ; 0x20 + return value; + 1530: 84 2f mov r24, r20 + 1532: 95 2f mov r25, r21 + 1534: 08 95 ret + cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере +} +// Чтение элемента +int read_buffer(struct circular_buffer* cb) { + if (buffer_empty(cb)) { // проверка на пустоту + return -1;// -1 как индикатор в случае ошибки + 1536: 8f ef ldi r24, 0xFF ; 255 + 1538: 9f ef ldi r25, 0xFF ; 255 + } + int value = cb->buffer[cb->buf_head]; // чтение по индексу головы + cb->buf_head = (cb->buf_head + 1) % BUFFER_SIZE; // увеличиваем индекс на 1 + return value; +} + 153a: 08 95 ret + +0000153c <UART_init>: + +struct circular_buffer uartRxBuffer; +struct circular_buffer uartTxBuffer; + +void UART_init(void) { + UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0) | (1<<TXCIE0) | (1 << UDRIE0); // прерывание по приему и передаче + 153c: 88 ef ldi r24, 0xF8 ; 248 + 153e: 80 93 c1 00 sts 0x00C1, r24 ; 0x8000c1 <__DATA_REGION_ORIGIN__+0x61> + UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); + 1542: 86 e0 ldi r24, 0x06 ; 6 + 1544: 80 93 c2 00 sts 0x00C2, r24 ; 0x8000c2 <__DATA_REGION_ORIGIN__+0x62> + UBRR0H = 0; + 1548: 10 92 c5 00 sts 0x00C5, r1 ; 0x8000c5 <__DATA_REGION_ORIGIN__+0x65> + UBRR0L = 103; + 154c: 87 e6 ldi r24, 0x67 ; 103 + 154e: 80 93 c4 00 sts 0x00C4, r24 ; 0x8000c4 <__DATA_REGION_ORIGIN__+0x64> + 1552: 08 95 ret + +00001554 <UART_send>: +} + +void UART_send(uint8_t* data, size_t length) { + 1554: 0f 93 push r16 + 1556: 1f 93 push r17 + 1558: cf 93 push r28 + 155a: df 93 push r29 + for (size_t i = 0; i < length; i++) { + 155c: 61 15 cp r22, r1 + 155e: 71 05 cpc r23, r1 + 1560: 99 f0 breq .+38 ; 0x1588 <UART_send+0x34> + 1562: 8c 01 movw r16, r24 + 1564: ec 01 movw r28, r24 + 1566: 06 0f add r16, r22 + 1568: 17 1f adc r17, r23 + if (!buffer_full(&uartTxBuffer)) { + 156a: 8e e6 ldi r24, 0x6E ; 110 + 156c: 93 e0 ldi r25, 0x03 ; 3 + 156e: 0e 94 49 0a call 0x1492 ; 0x1492 <buffer_full> + 1572: 89 2b or r24, r25 + 1574: 49 f4 brne .+18 ; 0x1588 <UART_send+0x34> + write_buffer(&uartTxBuffer, data[i]); + 1576: 69 91 ld r22, Y+ + 1578: 70 e0 ldi r23, 0x00 ; 0 + 157a: 8e e6 ldi r24, 0x6E ; 110 + 157c: 93 e0 ldi r25, 0x03 ; 3 + 157e: 0e 94 63 0a call 0x14c6 ; 0x14c6 <write_buffer> + UBRR0H = 0; + UBRR0L = 103; +} + +void UART_send(uint8_t* data, size_t length) { + for (size_t i = 0; i < length; i++) { + 1582: c0 17 cp r28, r16 + 1584: d1 07 cpc r29, r17 + 1586: 89 f7 brne .-30 ; 0x156a <UART_send+0x16> + write_buffer(&uartTxBuffer, data[i]); + } else { + break; // если буфер передачи заполнен, то отправка прерывается + } + } + UCSR0B |= (1 << TXCIE0); // включаем прерывание по завершении передачи + 1588: e1 ec ldi r30, 0xC1 ; 193 + 158a: f0 e0 ldi r31, 0x00 ; 0 + 158c: 80 81 ld r24, Z + 158e: 80 64 ori r24, 0x40 ; 64 + 1590: 80 83 st Z, r24 +} + 1592: df 91 pop r29 + 1594: cf 91 pop r28 + 1596: 1f 91 pop r17 + 1598: 0f 91 pop r16 + 159a: 08 95 ret + +0000159c <UART_receive>: + +// Получение данных из буфера +int UART_receive(uint8_t* data, size_t length) { + 159c: 8f 92 push r8 + 159e: 9f 92 push r9 + 15a0: af 92 push r10 + 15a2: bf 92 push r11 + 15a4: cf 92 push r12 + 15a6: df 92 push r13 + 15a8: ef 92 push r14 + 15aa: ff 92 push r15 + 15ac: 0f 93 push r16 + 15ae: 1f 93 push r17 + 15b0: cf 93 push r28 + 15b2: df 93 push r29 + 15b4: 8b 01 movw r16, r22 + 15b6: ec 01 movw r28, r24 + char overflow = 0; // Флаг переполнения, который устанавливается, если превышен размер массива + uint32_t byteCount = 0; // Счетчик байтов, принятых из буфера приема + 15b8: c1 2c mov r12, r1 + 15ba: d1 2c mov r13, r1 + 15bc: 76 01 movw r14, r12 + // Пока буфер приема не пуст и не превышен лимит длины массива, + // функция продолжает читать байты из буфера и сохранять их в массив data. + while (!buffer_empty(&uartRxBuffer) && byteCount < length) { + 15be: 4b 01 movw r8, r22 + 15c0: a1 2c mov r10, r1 + 15c2: b1 2c mov r11, r1 + 15c4: 0a c0 rjmp .+20 ; 0x15da <UART_receive+0x3e> + int reader = read_buffer(&uartRxBuffer); // Прием и запись символа в переменную + 15c6: 8c e4 ldi r24, 0x4C ; 76 + 15c8: 93 e0 ldi r25, 0x03 ; 3 + 15ca: 0e 94 80 0a call 0x1500 ; 0x1500 <read_buffer> + data[byteCount] = reader; // Запись в массив с индексом byteCount + 15ce: 89 93 st Y+, r24 + byteCount++; + 15d0: 8f ef ldi r24, 0xFF ; 255 + 15d2: c8 1a sub r12, r24 + 15d4: d8 0a sbc r13, r24 + 15d6: e8 0a sbc r14, r24 + 15d8: f8 0a sbc r15, r24 +int UART_receive(uint8_t* data, size_t length) { + char overflow = 0; // Флаг переполнения, который устанавливается, если превышен размер массива + uint32_t byteCount = 0; // Счетчик байтов, принятых из буфера приема + // Пока буфер приема не пуст и не превышен лимит длины массива, + // функция продолжает читать байты из буфера и сохранять их в массив data. + while (!buffer_empty(&uartRxBuffer) && byteCount < length) { + 15da: 8c e4 ldi r24, 0x4C ; 76 + 15dc: 93 e0 ldi r25, 0x03 ; 3 + 15de: 0e 94 3f 0a call 0x147e ; 0x147e <buffer_empty> + 15e2: 89 2b or r24, r25 + 15e4: 29 f4 brne .+10 ; 0x15f0 <UART_receive+0x54> + 15e6: c8 14 cp r12, r8 + 15e8: d9 04 cpc r13, r9 + 15ea: ea 04 cpc r14, r10 + 15ec: fb 04 cpc r15, r11 + 15ee: 58 f3 brcs .-42 ; 0x15c6 <UART_receive+0x2a> + } + // Проверка переполнения + if (byteCount > length) { + overflow = 1; + } + return overflow ? -1 : byteCount; // Возвращает количество успешно принятых байт или -1 в случае переполнения + 15f0: 20 e0 ldi r18, 0x00 ; 0 + 15f2: 30 e0 ldi r19, 0x00 ; 0 + 15f4: 0c 15 cp r16, r12 + 15f6: 1d 05 cpc r17, r13 + 15f8: 2e 05 cpc r18, r14 + 15fa: 3f 05 cpc r19, r15 + 15fc: 10 f0 brcs .+4 ; 0x1602 <UART_receive+0x66> + 15fe: c6 01 movw r24, r12 + 1600: 02 c0 rjmp .+4 ; 0x1606 <UART_receive+0x6a> + 1602: 8f ef ldi r24, 0xFF ; 255 + 1604: 9f ef ldi r25, 0xFF ; 255 +} + 1606: df 91 pop r29 + 1608: cf 91 pop r28 + 160a: 1f 91 pop r17 + 160c: 0f 91 pop r16 + 160e: ff 90 pop r15 + 1610: ef 90 pop r14 + 1612: df 90 pop r13 + 1614: cf 90 pop r12 + 1616: bf 90 pop r11 + 1618: af 90 pop r10 + 161a: 9f 90 pop r9 + 161c: 8f 90 pop r8 + 161e: 08 95 ret + +00001620 <__vector_18>: + +// прерывание по завершению приема +ISR(USART_RX_vect) { + 1620: 1f 92 push r1 + 1622: 0f 92 push r0 + 1624: 0f b6 in r0, 0x3f ; 63 + 1626: 0f 92 push r0 + 1628: 11 24 eor r1, r1 + 162a: 2f 93 push r18 + 162c: 3f 93 push r19 + 162e: 4f 93 push r20 + 1630: 5f 93 push r21 + 1632: 6f 93 push r22 + 1634: 7f 93 push r23 + 1636: 8f 93 push r24 + 1638: 9f 93 push r25 + 163a: af 93 push r26 + 163c: bf 93 push r27 + 163e: cf 93 push r28 + 1640: ef 93 push r30 + 1642: ff 93 push r31 + uint8_t data = UDR0; // читаем из регистра UDR0 + 1644: c0 91 c6 00 lds r28, 0x00C6 ; 0x8000c6 <__DATA_REGION_ORIGIN__+0x66> + if (!buffer_full(&uartRxBuffer)) { + 1648: 8c e4 ldi r24, 0x4C ; 76 + 164a: 93 e0 ldi r25, 0x03 ; 3 + 164c: 0e 94 49 0a call 0x1492 ; 0x1492 <buffer_full> + 1650: 89 2b or r24, r25 + 1652: 31 f4 brne .+12 ; 0x1660 <__vector_18+0x40> + write_buffer(&uartRxBuffer, data);// записываем символ в буфер приема + 1654: 6c 2f mov r22, r28 + 1656: 70 e0 ldi r23, 0x00 ; 0 + 1658: 8c e4 ldi r24, 0x4C ; 76 + 165a: 93 e0 ldi r25, 0x03 ; 3 + 165c: 0e 94 63 0a call 0x14c6 ; 0x14c6 <write_buffer> + } +} + 1660: ff 91 pop r31 + 1662: ef 91 pop r30 + 1664: cf 91 pop r28 + 1666: bf 91 pop r27 + 1668: af 91 pop r26 + 166a: 9f 91 pop r25 + 166c: 8f 91 pop r24 + 166e: 7f 91 pop r23 + 1670: 6f 91 pop r22 + 1672: 5f 91 pop r21 + 1674: 4f 91 pop r20 + 1676: 3f 91 pop r19 + 1678: 2f 91 pop r18 + 167a: 0f 90 pop r0 + 167c: 0f be out 0x3f, r0 ; 63 + 167e: 0f 90 pop r0 + 1680: 1f 90 pop r1 + 1682: 18 95 reti + +00001684 <__vector_20>: + +ISR(USART_TX_vect) { + 1684: 1f 92 push r1 + 1686: 0f 92 push r0 + 1688: 0f b6 in r0, 0x3f ; 63 + 168a: 0f 92 push r0 + 168c: 11 24 eor r1, r1 + 168e: 2f 93 push r18 + 1690: 3f 93 push r19 + 1692: 4f 93 push r20 + 1694: 5f 93 push r21 + 1696: 6f 93 push r22 + 1698: 7f 93 push r23 + 169a: 8f 93 push r24 + 169c: 9f 93 push r25 + 169e: af 93 push r26 + 16a0: bf 93 push r27 + 16a2: ef 93 push r30 + 16a4: ff 93 push r31 + if (!buffer_empty(&uartTxBuffer)) { + 16a6: 8e e6 ldi r24, 0x6E ; 110 + 16a8: 93 e0 ldi r25, 0x03 ; 3 + 16aa: 0e 94 3f 0a call 0x147e ; 0x147e <buffer_empty> + 16ae: 89 2b or r24, r25 + 16b0: 39 f4 brne .+14 ; 0x16c0 <__vector_20+0x3c> + UDR0 = read_buffer(&uartTxBuffer); + 16b2: 8e e6 ldi r24, 0x6E ; 110 + 16b4: 93 e0 ldi r25, 0x03 ; 3 + 16b6: 0e 94 80 0a call 0x1500 ; 0x1500 <read_buffer> + 16ba: 80 93 c6 00 sts 0x00C6, r24 ; 0x8000c6 <__DATA_REGION_ORIGIN__+0x66> + 16be: 05 c0 rjmp .+10 ; 0x16ca <__vector_20+0x46> + } else { + UCSR0B &= ~(1 << TXCIE0); // отключаем прерывание, когда все данные отправлены + 16c0: e1 ec ldi r30, 0xC1 ; 193 + 16c2: f0 e0 ldi r31, 0x00 ; 0 + 16c4: 80 81 ld r24, Z + 16c6: 8f 7b andi r24, 0xBF ; 191 + 16c8: 80 83 st Z, r24 + } + 16ca: ff 91 pop r31 + 16cc: ef 91 pop r30 + 16ce: bf 91 pop r27 + 16d0: af 91 pop r26 + 16d2: 9f 91 pop r25 + 16d4: 8f 91 pop r24 + 16d6: 7f 91 pop r23 + 16d8: 6f 91 pop r22 + 16da: 5f 91 pop r21 + 16dc: 4f 91 pop r20 + 16de: 3f 91 pop r19 + 16e0: 2f 91 pop r18 + 16e2: 0f 90 pop r0 + 16e4: 0f be out 0x3f, r0 ; 63 + 16e6: 0f 90 pop r0 + 16e8: 1f 90 pop r1 + 16ea: 18 95 reti + +000016ec <__udivmodhi4>: + 16ec: aa 1b sub r26, r26 + 16ee: bb 1b sub r27, r27 + 16f0: 51 e1 ldi r21, 0x11 ; 17 + 16f2: 07 c0 rjmp .+14 ; 0x1702 <__udivmodhi4_ep> + +000016f4 <__udivmodhi4_loop>: + 16f4: aa 1f adc r26, r26 + 16f6: bb 1f adc r27, r27 + 16f8: a6 17 cp r26, r22 + 16fa: b7 07 cpc r27, r23 + 16fc: 10 f0 brcs .+4 ; 0x1702 <__udivmodhi4_ep> + 16fe: a6 1b sub r26, r22 + 1700: b7 0b sbc r27, r23 + +00001702 <__udivmodhi4_ep>: + 1702: 88 1f adc r24, r24 + 1704: 99 1f adc r25, r25 + 1706: 5a 95 dec r21 + 1708: a9 f7 brne .-22 ; 0x16f4 <__udivmodhi4_loop> + 170a: 80 95 com r24 + 170c: 90 95 com r25 + 170e: bc 01 movw r22, r24 + 1710: cd 01 movw r24, r26 + 1712: 08 95 ret + +00001714 <strncpy>: + 1714: fb 01 movw r30, r22 + 1716: dc 01 movw r26, r24 + 1718: 41 50 subi r20, 0x01 ; 1 + 171a: 50 40 sbci r21, 0x00 ; 0 + 171c: 48 f0 brcs .+18 ; 0x1730 <strncpy+0x1c> + 171e: 01 90 ld r0, Z+ + 1720: 0d 92 st X+, r0 + 1722: 00 20 and r0, r0 + 1724: c9 f7 brne .-14 ; 0x1718 <strncpy+0x4> + 1726: 01 c0 rjmp .+2 ; 0x172a <strncpy+0x16> + 1728: 1d 92 st X+, r1 + 172a: 41 50 subi r20, 0x01 ; 1 + 172c: 50 40 sbci r21, 0x00 ; 0 + 172e: e0 f7 brcc .-8 ; 0x1728 <strncpy+0x14> + 1730: 08 95 ret + +00001732 <printf>: + 1732: a0 e0 ldi r26, 0x00 ; 0 + 1734: b0 e0 ldi r27, 0x00 ; 0 + 1736: ef e9 ldi r30, 0x9F ; 159 + 1738: fb e0 ldi r31, 0x0B ; 11 + 173a: 0c 94 80 0e jmp 0x1d00 ; 0x1d00 <__prologue_saves__+0x20> + 173e: ae 01 movw r20, r28 + 1740: 4b 5f subi r20, 0xFB ; 251 + 1742: 5f 4f sbci r21, 0xFF ; 255 + 1744: fa 01 movw r30, r20 + 1746: 61 91 ld r22, Z+ + 1748: 71 91 ld r23, Z+ + 174a: af 01 movw r20, r30 + 174c: 80 91 92 03 lds r24, 0x0392 ; 0x800392 <__iob+0x2> + 1750: 90 91 93 03 lds r25, 0x0393 ; 0x800393 <__iob+0x3> + 1754: 0e 94 df 0b call 0x17be ; 0x17be <vfprintf> + 1758: e2 e0 ldi r30, 0x02 ; 2 + 175a: 0c 94 9c 0e jmp 0x1d38 ; 0x1d38 <__epilogue_restores__+0x20> + +0000175e <snprintf>: + 175e: ae e0 ldi r26, 0x0E ; 14 + 1760: b0 e0 ldi r27, 0x00 ; 0 + 1762: e5 eb ldi r30, 0xB5 ; 181 + 1764: fb e0 ldi r31, 0x0B ; 11 + 1766: 0c 94 7e 0e jmp 0x1cfc ; 0x1cfc <__prologue_saves__+0x1c> + 176a: 0d 89 ldd r16, Y+21 ; 0x15 + 176c: 1e 89 ldd r17, Y+22 ; 0x16 + 176e: 8f 89 ldd r24, Y+23 ; 0x17 + 1770: 98 8d ldd r25, Y+24 ; 0x18 + 1772: 26 e0 ldi r18, 0x06 ; 6 + 1774: 2c 83 std Y+4, r18 ; 0x04 + 1776: 1a 83 std Y+2, r17 ; 0x02 + 1778: 09 83 std Y+1, r16 ; 0x01 + 177a: 97 ff sbrs r25, 7 + 177c: 02 c0 rjmp .+4 ; 0x1782 <snprintf+0x24> + 177e: 80 e0 ldi r24, 0x00 ; 0 + 1780: 90 e8 ldi r25, 0x80 ; 128 + 1782: 01 97 sbiw r24, 0x01 ; 1 + 1784: 9e 83 std Y+6, r25 ; 0x06 + 1786: 8d 83 std Y+5, r24 ; 0x05 + 1788: ae 01 movw r20, r28 + 178a: 45 5e subi r20, 0xE5 ; 229 + 178c: 5f 4f sbci r21, 0xFF ; 255 + 178e: 69 8d ldd r22, Y+25 ; 0x19 + 1790: 7a 8d ldd r23, Y+26 ; 0x1a + 1792: ce 01 movw r24, r28 + 1794: 01 96 adiw r24, 0x01 ; 1 + 1796: 0e 94 df 0b call 0x17be ; 0x17be <vfprintf> + 179a: 4d 81 ldd r20, Y+5 ; 0x05 + 179c: 5e 81 ldd r21, Y+6 ; 0x06 + 179e: 57 fd sbrc r21, 7 + 17a0: 0a c0 rjmp .+20 ; 0x17b6 <snprintf+0x58> + 17a2: 2f 81 ldd r18, Y+7 ; 0x07 + 17a4: 38 85 ldd r19, Y+8 ; 0x08 + 17a6: 42 17 cp r20, r18 + 17a8: 53 07 cpc r21, r19 + 17aa: 0c f4 brge .+2 ; 0x17ae <snprintf+0x50> + 17ac: 9a 01 movw r18, r20 + 17ae: f8 01 movw r30, r16 + 17b0: e2 0f add r30, r18 + 17b2: f3 1f adc r31, r19 + 17b4: 10 82 st Z, r1 + 17b6: 2e 96 adiw r28, 0x0e ; 14 + 17b8: e4 e0 ldi r30, 0x04 ; 4 + 17ba: 0c 94 9a 0e jmp 0x1d34 ; 0x1d34 <__epilogue_restores__+0x1c> + +000017be <vfprintf>: + 17be: ab e0 ldi r26, 0x0B ; 11 + 17c0: b0 e0 ldi r27, 0x00 ; 0 + 17c2: e5 ee ldi r30, 0xE5 ; 229 + 17c4: fb e0 ldi r31, 0x0B ; 11 + 17c6: 0c 94 70 0e jmp 0x1ce0 ; 0x1ce0 <__prologue_saves__> + 17ca: 6c 01 movw r12, r24 + 17cc: 7b 01 movw r14, r22 + 17ce: 8a 01 movw r16, r20 + 17d0: fc 01 movw r30, r24 + 17d2: 17 82 std Z+7, r1 ; 0x07 + 17d4: 16 82 std Z+6, r1 ; 0x06 + 17d6: 83 81 ldd r24, Z+3 ; 0x03 + 17d8: 81 ff sbrs r24, 1 + 17da: cc c1 rjmp .+920 ; 0x1b74 <vfprintf+0x3b6> + 17dc: ce 01 movw r24, r28 + 17de: 01 96 adiw r24, 0x01 ; 1 + 17e0: 3c 01 movw r6, r24 + 17e2: f6 01 movw r30, r12 + 17e4: 93 81 ldd r25, Z+3 ; 0x03 + 17e6: f7 01 movw r30, r14 + 17e8: 93 fd sbrc r25, 3 + 17ea: 85 91 lpm r24, Z+ + 17ec: 93 ff sbrs r25, 3 + 17ee: 81 91 ld r24, Z+ + 17f0: 7f 01 movw r14, r30 + 17f2: 88 23 and r24, r24 + 17f4: 09 f4 brne .+2 ; 0x17f8 <vfprintf+0x3a> + 17f6: ba c1 rjmp .+884 ; 0x1b6c <vfprintf+0x3ae> + 17f8: 85 32 cpi r24, 0x25 ; 37 + 17fa: 39 f4 brne .+14 ; 0x180a <vfprintf+0x4c> + 17fc: 93 fd sbrc r25, 3 + 17fe: 85 91 lpm r24, Z+ + 1800: 93 ff sbrs r25, 3 + 1802: 81 91 ld r24, Z+ + 1804: 7f 01 movw r14, r30 + 1806: 85 32 cpi r24, 0x25 ; 37 + 1808: 29 f4 brne .+10 ; 0x1814 <vfprintf+0x56> + 180a: b6 01 movw r22, r12 + 180c: 90 e0 ldi r25, 0x00 ; 0 + 180e: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1812: e7 cf rjmp .-50 ; 0x17e2 <vfprintf+0x24> + 1814: 91 2c mov r9, r1 + 1816: 21 2c mov r2, r1 + 1818: 31 2c mov r3, r1 + 181a: ff e1 ldi r31, 0x1F ; 31 + 181c: f3 15 cp r31, r3 + 181e: d8 f0 brcs .+54 ; 0x1856 <vfprintf+0x98> + 1820: 8b 32 cpi r24, 0x2B ; 43 + 1822: 79 f0 breq .+30 ; 0x1842 <vfprintf+0x84> + 1824: 38 f4 brcc .+14 ; 0x1834 <vfprintf+0x76> + 1826: 80 32 cpi r24, 0x20 ; 32 + 1828: 79 f0 breq .+30 ; 0x1848 <vfprintf+0x8a> + 182a: 83 32 cpi r24, 0x23 ; 35 + 182c: a1 f4 brne .+40 ; 0x1856 <vfprintf+0x98> + 182e: 23 2d mov r18, r3 + 1830: 20 61 ori r18, 0x10 ; 16 + 1832: 1d c0 rjmp .+58 ; 0x186e <vfprintf+0xb0> + 1834: 8d 32 cpi r24, 0x2D ; 45 + 1836: 61 f0 breq .+24 ; 0x1850 <vfprintf+0x92> + 1838: 80 33 cpi r24, 0x30 ; 48 + 183a: 69 f4 brne .+26 ; 0x1856 <vfprintf+0x98> + 183c: 23 2d mov r18, r3 + 183e: 21 60 ori r18, 0x01 ; 1 + 1840: 16 c0 rjmp .+44 ; 0x186e <vfprintf+0xb0> + 1842: 83 2d mov r24, r3 + 1844: 82 60 ori r24, 0x02 ; 2 + 1846: 38 2e mov r3, r24 + 1848: e3 2d mov r30, r3 + 184a: e4 60 ori r30, 0x04 ; 4 + 184c: 3e 2e mov r3, r30 + 184e: 2a c0 rjmp .+84 ; 0x18a4 <vfprintf+0xe6> + 1850: f3 2d mov r31, r3 + 1852: f8 60 ori r31, 0x08 ; 8 + 1854: 1d c0 rjmp .+58 ; 0x1890 <vfprintf+0xd2> + 1856: 37 fc sbrc r3, 7 + 1858: 2d c0 rjmp .+90 ; 0x18b4 <vfprintf+0xf6> + 185a: 20 ed ldi r18, 0xD0 ; 208 + 185c: 28 0f add r18, r24 + 185e: 2a 30 cpi r18, 0x0A ; 10 + 1860: 40 f0 brcs .+16 ; 0x1872 <vfprintf+0xb4> + 1862: 8e 32 cpi r24, 0x2E ; 46 + 1864: b9 f4 brne .+46 ; 0x1894 <vfprintf+0xd6> + 1866: 36 fc sbrc r3, 6 + 1868: 81 c1 rjmp .+770 ; 0x1b6c <vfprintf+0x3ae> + 186a: 23 2d mov r18, r3 + 186c: 20 64 ori r18, 0x40 ; 64 + 186e: 32 2e mov r3, r18 + 1870: 19 c0 rjmp .+50 ; 0x18a4 <vfprintf+0xe6> + 1872: 36 fe sbrs r3, 6 + 1874: 06 c0 rjmp .+12 ; 0x1882 <vfprintf+0xc4> + 1876: 8a e0 ldi r24, 0x0A ; 10 + 1878: 98 9e mul r9, r24 + 187a: 20 0d add r18, r0 + 187c: 11 24 eor r1, r1 + 187e: 92 2e mov r9, r18 + 1880: 11 c0 rjmp .+34 ; 0x18a4 <vfprintf+0xe6> + 1882: ea e0 ldi r30, 0x0A ; 10 + 1884: 2e 9e mul r2, r30 + 1886: 20 0d add r18, r0 + 1888: 11 24 eor r1, r1 + 188a: 22 2e mov r2, r18 + 188c: f3 2d mov r31, r3 + 188e: f0 62 ori r31, 0x20 ; 32 + 1890: 3f 2e mov r3, r31 + 1892: 08 c0 rjmp .+16 ; 0x18a4 <vfprintf+0xe6> + 1894: 8c 36 cpi r24, 0x6C ; 108 + 1896: 21 f4 brne .+8 ; 0x18a0 <vfprintf+0xe2> + 1898: 83 2d mov r24, r3 + 189a: 80 68 ori r24, 0x80 ; 128 + 189c: 38 2e mov r3, r24 + 189e: 02 c0 rjmp .+4 ; 0x18a4 <vfprintf+0xe6> + 18a0: 88 36 cpi r24, 0x68 ; 104 + 18a2: 41 f4 brne .+16 ; 0x18b4 <vfprintf+0xf6> + 18a4: f7 01 movw r30, r14 + 18a6: 93 fd sbrc r25, 3 + 18a8: 85 91 lpm r24, Z+ + 18aa: 93 ff sbrs r25, 3 + 18ac: 81 91 ld r24, Z+ + 18ae: 7f 01 movw r14, r30 + 18b0: 81 11 cpse r24, r1 + 18b2: b3 cf rjmp .-154 ; 0x181a <vfprintf+0x5c> + 18b4: 98 2f mov r25, r24 + 18b6: 9f 7d andi r25, 0xDF ; 223 + 18b8: 95 54 subi r25, 0x45 ; 69 + 18ba: 93 30 cpi r25, 0x03 ; 3 + 18bc: 28 f4 brcc .+10 ; 0x18c8 <vfprintf+0x10a> + 18be: 0c 5f subi r16, 0xFC ; 252 + 18c0: 1f 4f sbci r17, 0xFF ; 255 + 18c2: 9f e3 ldi r25, 0x3F ; 63 + 18c4: 99 83 std Y+1, r25 ; 0x01 + 18c6: 0d c0 rjmp .+26 ; 0x18e2 <vfprintf+0x124> + 18c8: 83 36 cpi r24, 0x63 ; 99 + 18ca: 31 f0 breq .+12 ; 0x18d8 <vfprintf+0x11a> + 18cc: 83 37 cpi r24, 0x73 ; 115 + 18ce: 71 f0 breq .+28 ; 0x18ec <vfprintf+0x12e> + 18d0: 83 35 cpi r24, 0x53 ; 83 + 18d2: 09 f0 breq .+2 ; 0x18d6 <vfprintf+0x118> + 18d4: 59 c0 rjmp .+178 ; 0x1988 <vfprintf+0x1ca> + 18d6: 21 c0 rjmp .+66 ; 0x191a <vfprintf+0x15c> + 18d8: f8 01 movw r30, r16 + 18da: 80 81 ld r24, Z + 18dc: 89 83 std Y+1, r24 ; 0x01 + 18de: 0e 5f subi r16, 0xFE ; 254 + 18e0: 1f 4f sbci r17, 0xFF ; 255 + 18e2: 88 24 eor r8, r8 + 18e4: 83 94 inc r8 + 18e6: 91 2c mov r9, r1 + 18e8: 53 01 movw r10, r6 + 18ea: 13 c0 rjmp .+38 ; 0x1912 <vfprintf+0x154> + 18ec: 28 01 movw r4, r16 + 18ee: f2 e0 ldi r31, 0x02 ; 2 + 18f0: 4f 0e add r4, r31 + 18f2: 51 1c adc r5, r1 + 18f4: f8 01 movw r30, r16 + 18f6: a0 80 ld r10, Z + 18f8: b1 80 ldd r11, Z+1 ; 0x01 + 18fa: 36 fe sbrs r3, 6 + 18fc: 03 c0 rjmp .+6 ; 0x1904 <vfprintf+0x146> + 18fe: 69 2d mov r22, r9 + 1900: 70 e0 ldi r23, 0x00 ; 0 + 1902: 02 c0 rjmp .+4 ; 0x1908 <vfprintf+0x14a> + 1904: 6f ef ldi r22, 0xFF ; 255 + 1906: 7f ef ldi r23, 0xFF ; 255 + 1908: c5 01 movw r24, r10 + 190a: 0e 94 cb 0d call 0x1b96 ; 0x1b96 <strnlen> + 190e: 4c 01 movw r8, r24 + 1910: 82 01 movw r16, r4 + 1912: f3 2d mov r31, r3 + 1914: ff 77 andi r31, 0x7F ; 127 + 1916: 3f 2e mov r3, r31 + 1918: 16 c0 rjmp .+44 ; 0x1946 <vfprintf+0x188> + 191a: 28 01 movw r4, r16 + 191c: 22 e0 ldi r18, 0x02 ; 2 + 191e: 42 0e add r4, r18 + 1920: 51 1c adc r5, r1 + 1922: f8 01 movw r30, r16 + 1924: a0 80 ld r10, Z + 1926: b1 80 ldd r11, Z+1 ; 0x01 + 1928: 36 fe sbrs r3, 6 + 192a: 03 c0 rjmp .+6 ; 0x1932 <vfprintf+0x174> + 192c: 69 2d mov r22, r9 + 192e: 70 e0 ldi r23, 0x00 ; 0 + 1930: 02 c0 rjmp .+4 ; 0x1936 <vfprintf+0x178> + 1932: 6f ef ldi r22, 0xFF ; 255 + 1934: 7f ef ldi r23, 0xFF ; 255 + 1936: c5 01 movw r24, r10 + 1938: 0e 94 c0 0d call 0x1b80 ; 0x1b80 <strnlen_P> + 193c: 4c 01 movw r8, r24 + 193e: f3 2d mov r31, r3 + 1940: f0 68 ori r31, 0x80 ; 128 + 1942: 3f 2e mov r3, r31 + 1944: 82 01 movw r16, r4 + 1946: 33 fc sbrc r3, 3 + 1948: 1b c0 rjmp .+54 ; 0x1980 <vfprintf+0x1c2> + 194a: 82 2d mov r24, r2 + 194c: 90 e0 ldi r25, 0x00 ; 0 + 194e: 88 16 cp r8, r24 + 1950: 99 06 cpc r9, r25 + 1952: b0 f4 brcc .+44 ; 0x1980 <vfprintf+0x1c2> + 1954: b6 01 movw r22, r12 + 1956: 80 e2 ldi r24, 0x20 ; 32 + 1958: 90 e0 ldi r25, 0x00 ; 0 + 195a: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 195e: 2a 94 dec r2 + 1960: f4 cf rjmp .-24 ; 0x194a <vfprintf+0x18c> + 1962: f5 01 movw r30, r10 + 1964: 37 fc sbrc r3, 7 + 1966: 85 91 lpm r24, Z+ + 1968: 37 fe sbrs r3, 7 + 196a: 81 91 ld r24, Z+ + 196c: 5f 01 movw r10, r30 + 196e: b6 01 movw r22, r12 + 1970: 90 e0 ldi r25, 0x00 ; 0 + 1972: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1976: 21 10 cpse r2, r1 + 1978: 2a 94 dec r2 + 197a: 21 e0 ldi r18, 0x01 ; 1 + 197c: 82 1a sub r8, r18 + 197e: 91 08 sbc r9, r1 + 1980: 81 14 cp r8, r1 + 1982: 91 04 cpc r9, r1 + 1984: 71 f7 brne .-36 ; 0x1962 <vfprintf+0x1a4> + 1986: e8 c0 rjmp .+464 ; 0x1b58 <vfprintf+0x39a> + 1988: 84 36 cpi r24, 0x64 ; 100 + 198a: 11 f0 breq .+4 ; 0x1990 <vfprintf+0x1d2> + 198c: 89 36 cpi r24, 0x69 ; 105 + 198e: 41 f5 brne .+80 ; 0x19e0 <vfprintf+0x222> + 1990: f8 01 movw r30, r16 + 1992: 37 fe sbrs r3, 7 + 1994: 07 c0 rjmp .+14 ; 0x19a4 <vfprintf+0x1e6> + 1996: 60 81 ld r22, Z + 1998: 71 81 ldd r23, Z+1 ; 0x01 + 199a: 82 81 ldd r24, Z+2 ; 0x02 + 199c: 93 81 ldd r25, Z+3 ; 0x03 + 199e: 0c 5f subi r16, 0xFC ; 252 + 19a0: 1f 4f sbci r17, 0xFF ; 255 + 19a2: 08 c0 rjmp .+16 ; 0x19b4 <vfprintf+0x1f6> + 19a4: 60 81 ld r22, Z + 19a6: 71 81 ldd r23, Z+1 ; 0x01 + 19a8: 07 2e mov r0, r23 + 19aa: 00 0c add r0, r0 + 19ac: 88 0b sbc r24, r24 + 19ae: 99 0b sbc r25, r25 + 19b0: 0e 5f subi r16, 0xFE ; 254 + 19b2: 1f 4f sbci r17, 0xFF ; 255 + 19b4: f3 2d mov r31, r3 + 19b6: ff 76 andi r31, 0x6F ; 111 + 19b8: 3f 2e mov r3, r31 + 19ba: 97 ff sbrs r25, 7 + 19bc: 09 c0 rjmp .+18 ; 0x19d0 <vfprintf+0x212> + 19be: 90 95 com r25 + 19c0: 80 95 com r24 + 19c2: 70 95 com r23 + 19c4: 61 95 neg r22 + 19c6: 7f 4f sbci r23, 0xFF ; 255 + 19c8: 8f 4f sbci r24, 0xFF ; 255 + 19ca: 9f 4f sbci r25, 0xFF ; 255 + 19cc: f0 68 ori r31, 0x80 ; 128 + 19ce: 3f 2e mov r3, r31 + 19d0: 2a e0 ldi r18, 0x0A ; 10 + 19d2: 30 e0 ldi r19, 0x00 ; 0 + 19d4: a3 01 movw r20, r6 + 19d6: 0e 94 12 0e call 0x1c24 ; 0x1c24 <__ultoa_invert> + 19da: 88 2e mov r8, r24 + 19dc: 86 18 sub r8, r6 + 19de: 45 c0 rjmp .+138 ; 0x1a6a <vfprintf+0x2ac> + 19e0: 85 37 cpi r24, 0x75 ; 117 + 19e2: 31 f4 brne .+12 ; 0x19f0 <vfprintf+0x232> + 19e4: 23 2d mov r18, r3 + 19e6: 2f 7e andi r18, 0xEF ; 239 + 19e8: b2 2e mov r11, r18 + 19ea: 2a e0 ldi r18, 0x0A ; 10 + 19ec: 30 e0 ldi r19, 0x00 ; 0 + 19ee: 25 c0 rjmp .+74 ; 0x1a3a <vfprintf+0x27c> + 19f0: 93 2d mov r25, r3 + 19f2: 99 7f andi r25, 0xF9 ; 249 + 19f4: b9 2e mov r11, r25 + 19f6: 8f 36 cpi r24, 0x6F ; 111 + 19f8: c1 f0 breq .+48 ; 0x1a2a <vfprintf+0x26c> + 19fa: 18 f4 brcc .+6 ; 0x1a02 <vfprintf+0x244> + 19fc: 88 35 cpi r24, 0x58 ; 88 + 19fe: 79 f0 breq .+30 ; 0x1a1e <vfprintf+0x260> + 1a00: b5 c0 rjmp .+362 ; 0x1b6c <vfprintf+0x3ae> + 1a02: 80 37 cpi r24, 0x70 ; 112 + 1a04: 19 f0 breq .+6 ; 0x1a0c <vfprintf+0x24e> + 1a06: 88 37 cpi r24, 0x78 ; 120 + 1a08: 21 f0 breq .+8 ; 0x1a12 <vfprintf+0x254> + 1a0a: b0 c0 rjmp .+352 ; 0x1b6c <vfprintf+0x3ae> + 1a0c: e9 2f mov r30, r25 + 1a0e: e0 61 ori r30, 0x10 ; 16 + 1a10: be 2e mov r11, r30 + 1a12: b4 fe sbrs r11, 4 + 1a14: 0d c0 rjmp .+26 ; 0x1a30 <vfprintf+0x272> + 1a16: fb 2d mov r31, r11 + 1a18: f4 60 ori r31, 0x04 ; 4 + 1a1a: bf 2e mov r11, r31 + 1a1c: 09 c0 rjmp .+18 ; 0x1a30 <vfprintf+0x272> + 1a1e: 34 fe sbrs r3, 4 + 1a20: 0a c0 rjmp .+20 ; 0x1a36 <vfprintf+0x278> + 1a22: 29 2f mov r18, r25 + 1a24: 26 60 ori r18, 0x06 ; 6 + 1a26: b2 2e mov r11, r18 + 1a28: 06 c0 rjmp .+12 ; 0x1a36 <vfprintf+0x278> + 1a2a: 28 e0 ldi r18, 0x08 ; 8 + 1a2c: 30 e0 ldi r19, 0x00 ; 0 + 1a2e: 05 c0 rjmp .+10 ; 0x1a3a <vfprintf+0x27c> + 1a30: 20 e1 ldi r18, 0x10 ; 16 + 1a32: 30 e0 ldi r19, 0x00 ; 0 + 1a34: 02 c0 rjmp .+4 ; 0x1a3a <vfprintf+0x27c> + 1a36: 20 e1 ldi r18, 0x10 ; 16 + 1a38: 32 e0 ldi r19, 0x02 ; 2 + 1a3a: f8 01 movw r30, r16 + 1a3c: b7 fe sbrs r11, 7 + 1a3e: 07 c0 rjmp .+14 ; 0x1a4e <vfprintf+0x290> + 1a40: 60 81 ld r22, Z + 1a42: 71 81 ldd r23, Z+1 ; 0x01 + 1a44: 82 81 ldd r24, Z+2 ; 0x02 + 1a46: 93 81 ldd r25, Z+3 ; 0x03 + 1a48: 0c 5f subi r16, 0xFC ; 252 + 1a4a: 1f 4f sbci r17, 0xFF ; 255 + 1a4c: 06 c0 rjmp .+12 ; 0x1a5a <vfprintf+0x29c> + 1a4e: 60 81 ld r22, Z + 1a50: 71 81 ldd r23, Z+1 ; 0x01 + 1a52: 80 e0 ldi r24, 0x00 ; 0 + 1a54: 90 e0 ldi r25, 0x00 ; 0 + 1a56: 0e 5f subi r16, 0xFE ; 254 + 1a58: 1f 4f sbci r17, 0xFF ; 255 + 1a5a: a3 01 movw r20, r6 + 1a5c: 0e 94 12 0e call 0x1c24 ; 0x1c24 <__ultoa_invert> + 1a60: 88 2e mov r8, r24 + 1a62: 86 18 sub r8, r6 + 1a64: fb 2d mov r31, r11 + 1a66: ff 77 andi r31, 0x7F ; 127 + 1a68: 3f 2e mov r3, r31 + 1a6a: 36 fe sbrs r3, 6 + 1a6c: 0d c0 rjmp .+26 ; 0x1a88 <vfprintf+0x2ca> + 1a6e: 23 2d mov r18, r3 + 1a70: 2e 7f andi r18, 0xFE ; 254 + 1a72: a2 2e mov r10, r18 + 1a74: 89 14 cp r8, r9 + 1a76: 58 f4 brcc .+22 ; 0x1a8e <vfprintf+0x2d0> + 1a78: 34 fe sbrs r3, 4 + 1a7a: 0b c0 rjmp .+22 ; 0x1a92 <vfprintf+0x2d4> + 1a7c: 32 fc sbrc r3, 2 + 1a7e: 09 c0 rjmp .+18 ; 0x1a92 <vfprintf+0x2d4> + 1a80: 83 2d mov r24, r3 + 1a82: 8e 7e andi r24, 0xEE ; 238 + 1a84: a8 2e mov r10, r24 + 1a86: 05 c0 rjmp .+10 ; 0x1a92 <vfprintf+0x2d4> + 1a88: b8 2c mov r11, r8 + 1a8a: a3 2c mov r10, r3 + 1a8c: 03 c0 rjmp .+6 ; 0x1a94 <vfprintf+0x2d6> + 1a8e: b8 2c mov r11, r8 + 1a90: 01 c0 rjmp .+2 ; 0x1a94 <vfprintf+0x2d6> + 1a92: b9 2c mov r11, r9 + 1a94: a4 fe sbrs r10, 4 + 1a96: 0f c0 rjmp .+30 ; 0x1ab6 <vfprintf+0x2f8> + 1a98: fe 01 movw r30, r28 + 1a9a: e8 0d add r30, r8 + 1a9c: f1 1d adc r31, r1 + 1a9e: 80 81 ld r24, Z + 1aa0: 80 33 cpi r24, 0x30 ; 48 + 1aa2: 21 f4 brne .+8 ; 0x1aac <vfprintf+0x2ee> + 1aa4: 9a 2d mov r25, r10 + 1aa6: 99 7e andi r25, 0xE9 ; 233 + 1aa8: a9 2e mov r10, r25 + 1aaa: 09 c0 rjmp .+18 ; 0x1abe <vfprintf+0x300> + 1aac: a2 fe sbrs r10, 2 + 1aae: 06 c0 rjmp .+12 ; 0x1abc <vfprintf+0x2fe> + 1ab0: b3 94 inc r11 + 1ab2: b3 94 inc r11 + 1ab4: 04 c0 rjmp .+8 ; 0x1abe <vfprintf+0x300> + 1ab6: 8a 2d mov r24, r10 + 1ab8: 86 78 andi r24, 0x86 ; 134 + 1aba: 09 f0 breq .+2 ; 0x1abe <vfprintf+0x300> + 1abc: b3 94 inc r11 + 1abe: a3 fc sbrc r10, 3 + 1ac0: 11 c0 rjmp .+34 ; 0x1ae4 <vfprintf+0x326> + 1ac2: a0 fe sbrs r10, 0 + 1ac4: 06 c0 rjmp .+12 ; 0x1ad2 <vfprintf+0x314> + 1ac6: b2 14 cp r11, r2 + 1ac8: 88 f4 brcc .+34 ; 0x1aec <vfprintf+0x32e> + 1aca: 28 0c add r2, r8 + 1acc: 92 2c mov r9, r2 + 1ace: 9b 18 sub r9, r11 + 1ad0: 0e c0 rjmp .+28 ; 0x1aee <vfprintf+0x330> + 1ad2: b2 14 cp r11, r2 + 1ad4: 60 f4 brcc .+24 ; 0x1aee <vfprintf+0x330> + 1ad6: b6 01 movw r22, r12 + 1ad8: 80 e2 ldi r24, 0x20 ; 32 + 1ada: 90 e0 ldi r25, 0x00 ; 0 + 1adc: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1ae0: b3 94 inc r11 + 1ae2: f7 cf rjmp .-18 ; 0x1ad2 <vfprintf+0x314> + 1ae4: b2 14 cp r11, r2 + 1ae6: 18 f4 brcc .+6 ; 0x1aee <vfprintf+0x330> + 1ae8: 2b 18 sub r2, r11 + 1aea: 02 c0 rjmp .+4 ; 0x1af0 <vfprintf+0x332> + 1aec: 98 2c mov r9, r8 + 1aee: 21 2c mov r2, r1 + 1af0: a4 fe sbrs r10, 4 + 1af2: 10 c0 rjmp .+32 ; 0x1b14 <vfprintf+0x356> + 1af4: b6 01 movw r22, r12 + 1af6: 80 e3 ldi r24, 0x30 ; 48 + 1af8: 90 e0 ldi r25, 0x00 ; 0 + 1afa: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1afe: a2 fe sbrs r10, 2 + 1b00: 17 c0 rjmp .+46 ; 0x1b30 <vfprintf+0x372> + 1b02: a1 fc sbrc r10, 1 + 1b04: 03 c0 rjmp .+6 ; 0x1b0c <vfprintf+0x34e> + 1b06: 88 e7 ldi r24, 0x78 ; 120 + 1b08: 90 e0 ldi r25, 0x00 ; 0 + 1b0a: 02 c0 rjmp .+4 ; 0x1b10 <vfprintf+0x352> + 1b0c: 88 e5 ldi r24, 0x58 ; 88 + 1b0e: 90 e0 ldi r25, 0x00 ; 0 + 1b10: b6 01 movw r22, r12 + 1b12: 0c c0 rjmp .+24 ; 0x1b2c <vfprintf+0x36e> + 1b14: 8a 2d mov r24, r10 + 1b16: 86 78 andi r24, 0x86 ; 134 + 1b18: 59 f0 breq .+22 ; 0x1b30 <vfprintf+0x372> + 1b1a: a1 fe sbrs r10, 1 + 1b1c: 02 c0 rjmp .+4 ; 0x1b22 <vfprintf+0x364> + 1b1e: 8b e2 ldi r24, 0x2B ; 43 + 1b20: 01 c0 rjmp .+2 ; 0x1b24 <vfprintf+0x366> + 1b22: 80 e2 ldi r24, 0x20 ; 32 + 1b24: a7 fc sbrc r10, 7 + 1b26: 8d e2 ldi r24, 0x2D ; 45 + 1b28: b6 01 movw r22, r12 + 1b2a: 90 e0 ldi r25, 0x00 ; 0 + 1b2c: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1b30: 89 14 cp r8, r9 + 1b32: 38 f4 brcc .+14 ; 0x1b42 <vfprintf+0x384> + 1b34: b6 01 movw r22, r12 + 1b36: 80 e3 ldi r24, 0x30 ; 48 + 1b38: 90 e0 ldi r25, 0x00 ; 0 + 1b3a: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1b3e: 9a 94 dec r9 + 1b40: f7 cf rjmp .-18 ; 0x1b30 <vfprintf+0x372> + 1b42: 8a 94 dec r8 + 1b44: f3 01 movw r30, r6 + 1b46: e8 0d add r30, r8 + 1b48: f1 1d adc r31, r1 + 1b4a: 80 81 ld r24, Z + 1b4c: b6 01 movw r22, r12 + 1b4e: 90 e0 ldi r25, 0x00 ; 0 + 1b50: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1b54: 81 10 cpse r8, r1 + 1b56: f5 cf rjmp .-22 ; 0x1b42 <vfprintf+0x384> + 1b58: 22 20 and r2, r2 + 1b5a: 09 f4 brne .+2 ; 0x1b5e <vfprintf+0x3a0> + 1b5c: 42 ce rjmp .-892 ; 0x17e2 <vfprintf+0x24> + 1b5e: b6 01 movw r22, r12 + 1b60: 80 e2 ldi r24, 0x20 ; 32 + 1b62: 90 e0 ldi r25, 0x00 ; 0 + 1b64: 0e 94 d6 0d call 0x1bac ; 0x1bac <fputc> + 1b68: 2a 94 dec r2 + 1b6a: f6 cf rjmp .-20 ; 0x1b58 <vfprintf+0x39a> + 1b6c: f6 01 movw r30, r12 + 1b6e: 86 81 ldd r24, Z+6 ; 0x06 + 1b70: 97 81 ldd r25, Z+7 ; 0x07 + 1b72: 02 c0 rjmp .+4 ; 0x1b78 <vfprintf+0x3ba> + 1b74: 8f ef ldi r24, 0xFF ; 255 + 1b76: 9f ef ldi r25, 0xFF ; 255 + 1b78: 2b 96 adiw r28, 0x0b ; 11 + 1b7a: e2 e1 ldi r30, 0x12 ; 18 + 1b7c: 0c 94 8c 0e jmp 0x1d18 ; 0x1d18 <__epilogue_restores__> + +00001b80 <strnlen_P>: + 1b80: fc 01 movw r30, r24 + 1b82: 05 90 lpm r0, Z+ + 1b84: 61 50 subi r22, 0x01 ; 1 + 1b86: 70 40 sbci r23, 0x00 ; 0 + 1b88: 01 10 cpse r0, r1 + 1b8a: d8 f7 brcc .-10 ; 0x1b82 <strnlen_P+0x2> + 1b8c: 80 95 com r24 + 1b8e: 90 95 com r25 + 1b90: 8e 0f add r24, r30 + 1b92: 9f 1f adc r25, r31 + 1b94: 08 95 ret + +00001b96 <strnlen>: + 1b96: fc 01 movw r30, r24 + 1b98: 61 50 subi r22, 0x01 ; 1 + 1b9a: 70 40 sbci r23, 0x00 ; 0 + 1b9c: 01 90 ld r0, Z+ + 1b9e: 01 10 cpse r0, r1 + 1ba0: d8 f7 brcc .-10 ; 0x1b98 <strnlen+0x2> + 1ba2: 80 95 com r24 + 1ba4: 90 95 com r25 + 1ba6: 8e 0f add r24, r30 + 1ba8: 9f 1f adc r25, r31 + 1baa: 08 95 ret + +00001bac <fputc>: + 1bac: 0f 93 push r16 + 1bae: 1f 93 push r17 + 1bb0: cf 93 push r28 + 1bb2: df 93 push r29 + 1bb4: fb 01 movw r30, r22 + 1bb6: 23 81 ldd r18, Z+3 ; 0x03 + 1bb8: 21 fd sbrc r18, 1 + 1bba: 03 c0 rjmp .+6 ; 0x1bc2 <fputc+0x16> + 1bbc: 8f ef ldi r24, 0xFF ; 255 + 1bbe: 9f ef ldi r25, 0xFF ; 255 + 1bc0: 2c c0 rjmp .+88 ; 0x1c1a <fputc+0x6e> + 1bc2: 22 ff sbrs r18, 2 + 1bc4: 16 c0 rjmp .+44 ; 0x1bf2 <fputc+0x46> + 1bc6: 46 81 ldd r20, Z+6 ; 0x06 + 1bc8: 57 81 ldd r21, Z+7 ; 0x07 + 1bca: 24 81 ldd r18, Z+4 ; 0x04 + 1bcc: 35 81 ldd r19, Z+5 ; 0x05 + 1bce: 42 17 cp r20, r18 + 1bd0: 53 07 cpc r21, r19 + 1bd2: 44 f4 brge .+16 ; 0x1be4 <fputc+0x38> + 1bd4: a0 81 ld r26, Z + 1bd6: b1 81 ldd r27, Z+1 ; 0x01 + 1bd8: 9d 01 movw r18, r26 + 1bda: 2f 5f subi r18, 0xFF ; 255 + 1bdc: 3f 4f sbci r19, 0xFF ; 255 + 1bde: 31 83 std Z+1, r19 ; 0x01 + 1be0: 20 83 st Z, r18 + 1be2: 8c 93 st X, r24 + 1be4: 26 81 ldd r18, Z+6 ; 0x06 + 1be6: 37 81 ldd r19, Z+7 ; 0x07 + 1be8: 2f 5f subi r18, 0xFF ; 255 + 1bea: 3f 4f sbci r19, 0xFF ; 255 + 1bec: 37 83 std Z+7, r19 ; 0x07 + 1bee: 26 83 std Z+6, r18 ; 0x06 + 1bf0: 14 c0 rjmp .+40 ; 0x1c1a <fputc+0x6e> + 1bf2: 8b 01 movw r16, r22 + 1bf4: ec 01 movw r28, r24 + 1bf6: fb 01 movw r30, r22 + 1bf8: 00 84 ldd r0, Z+8 ; 0x08 + 1bfa: f1 85 ldd r31, Z+9 ; 0x09 + 1bfc: e0 2d mov r30, r0 + 1bfe: 09 95 icall + 1c00: 89 2b or r24, r25 + 1c02: e1 f6 brne .-72 ; 0x1bbc <fputc+0x10> + 1c04: d8 01 movw r26, r16 + 1c06: 16 96 adiw r26, 0x06 ; 6 + 1c08: 8d 91 ld r24, X+ + 1c0a: 9c 91 ld r25, X + 1c0c: 17 97 sbiw r26, 0x07 ; 7 + 1c0e: 01 96 adiw r24, 0x01 ; 1 + 1c10: 17 96 adiw r26, 0x07 ; 7 + 1c12: 9c 93 st X, r25 + 1c14: 8e 93 st -X, r24 + 1c16: 16 97 sbiw r26, 0x06 ; 6 + 1c18: ce 01 movw r24, r28 + 1c1a: df 91 pop r29 + 1c1c: cf 91 pop r28 + 1c1e: 1f 91 pop r17 + 1c20: 0f 91 pop r16 + 1c22: 08 95 ret + +00001c24 <__ultoa_invert>: + 1c24: fa 01 movw r30, r20 + 1c26: aa 27 eor r26, r26 + 1c28: 28 30 cpi r18, 0x08 ; 8 + 1c2a: 51 f1 breq .+84 ; 0x1c80 <__ultoa_invert+0x5c> + 1c2c: 20 31 cpi r18, 0x10 ; 16 + 1c2e: 81 f1 breq .+96 ; 0x1c90 <__ultoa_invert+0x6c> + 1c30: e8 94 clt + 1c32: 6f 93 push r22 + 1c34: 6e 7f andi r22, 0xFE ; 254 + 1c36: 6e 5f subi r22, 0xFE ; 254 + 1c38: 7f 4f sbci r23, 0xFF ; 255 + 1c3a: 8f 4f sbci r24, 0xFF ; 255 + 1c3c: 9f 4f sbci r25, 0xFF ; 255 + 1c3e: af 4f sbci r26, 0xFF ; 255 + 1c40: b1 e0 ldi r27, 0x01 ; 1 + 1c42: 3e d0 rcall .+124 ; 0x1cc0 <__ultoa_invert+0x9c> + 1c44: b4 e0 ldi r27, 0x04 ; 4 + 1c46: 3c d0 rcall .+120 ; 0x1cc0 <__ultoa_invert+0x9c> + 1c48: 67 0f add r22, r23 + 1c4a: 78 1f adc r23, r24 + 1c4c: 89 1f adc r24, r25 + 1c4e: 9a 1f adc r25, r26 + 1c50: a1 1d adc r26, r1 + 1c52: 68 0f add r22, r24 + 1c54: 79 1f adc r23, r25 + 1c56: 8a 1f adc r24, r26 + 1c58: 91 1d adc r25, r1 + 1c5a: a1 1d adc r26, r1 + 1c5c: 6a 0f add r22, r26 + 1c5e: 71 1d adc r23, r1 + 1c60: 81 1d adc r24, r1 + 1c62: 91 1d adc r25, r1 + 1c64: a1 1d adc r26, r1 + 1c66: 20 d0 rcall .+64 ; 0x1ca8 <__ultoa_invert+0x84> + 1c68: 09 f4 brne .+2 ; 0x1c6c <__ultoa_invert+0x48> + 1c6a: 68 94 set + 1c6c: 3f 91 pop r19 + 1c6e: 2a e0 ldi r18, 0x0A ; 10 + 1c70: 26 9f mul r18, r22 + 1c72: 11 24 eor r1, r1 + 1c74: 30 19 sub r19, r0 + 1c76: 30 5d subi r19, 0xD0 ; 208 + 1c78: 31 93 st Z+, r19 + 1c7a: de f6 brtc .-74 ; 0x1c32 <__ultoa_invert+0xe> + 1c7c: cf 01 movw r24, r30 + 1c7e: 08 95 ret + 1c80: 46 2f mov r20, r22 + 1c82: 47 70 andi r20, 0x07 ; 7 + 1c84: 40 5d subi r20, 0xD0 ; 208 + 1c86: 41 93 st Z+, r20 + 1c88: b3 e0 ldi r27, 0x03 ; 3 + 1c8a: 0f d0 rcall .+30 ; 0x1caa <__ultoa_invert+0x86> + 1c8c: c9 f7 brne .-14 ; 0x1c80 <__ultoa_invert+0x5c> + 1c8e: f6 cf rjmp .-20 ; 0x1c7c <__ultoa_invert+0x58> + 1c90: 46 2f mov r20, r22 + 1c92: 4f 70 andi r20, 0x0F ; 15 + 1c94: 40 5d subi r20, 0xD0 ; 208 + 1c96: 4a 33 cpi r20, 0x3A ; 58 + 1c98: 18 f0 brcs .+6 ; 0x1ca0 <__ultoa_invert+0x7c> + 1c9a: 49 5d subi r20, 0xD9 ; 217 + 1c9c: 31 fd sbrc r19, 1 + 1c9e: 40 52 subi r20, 0x20 ; 32 + 1ca0: 41 93 st Z+, r20 + 1ca2: 02 d0 rcall .+4 ; 0x1ca8 <__ultoa_invert+0x84> + 1ca4: a9 f7 brne .-22 ; 0x1c90 <__ultoa_invert+0x6c> + 1ca6: ea cf rjmp .-44 ; 0x1c7c <__ultoa_invert+0x58> + 1ca8: b4 e0 ldi r27, 0x04 ; 4 + 1caa: a6 95 lsr r26 + 1cac: 97 95 ror r25 + 1cae: 87 95 ror r24 + 1cb0: 77 95 ror r23 + 1cb2: 67 95 ror r22 + 1cb4: ba 95 dec r27 + 1cb6: c9 f7 brne .-14 ; 0x1caa <__ultoa_invert+0x86> + 1cb8: 00 97 sbiw r24, 0x00 ; 0 + 1cba: 61 05 cpc r22, r1 + 1cbc: 71 05 cpc r23, r1 + 1cbe: 08 95 ret + 1cc0: 9b 01 movw r18, r22 + 1cc2: ac 01 movw r20, r24 + 1cc4: 0a 2e mov r0, r26 + 1cc6: 06 94 lsr r0 + 1cc8: 57 95 ror r21 + 1cca: 47 95 ror r20 + 1ccc: 37 95 ror r19 + 1cce: 27 95 ror r18 + 1cd0: ba 95 dec r27 + 1cd2: c9 f7 brne .-14 ; 0x1cc6 <__ultoa_invert+0xa2> + 1cd4: 62 0f add r22, r18 + 1cd6: 73 1f adc r23, r19 + 1cd8: 84 1f adc r24, r20 + 1cda: 95 1f adc r25, r21 + 1cdc: a0 1d adc r26, r0 + 1cde: 08 95 ret + +00001ce0 <__prologue_saves__>: + 1ce0: 2f 92 push r2 + 1ce2: 3f 92 push r3 + 1ce4: 4f 92 push r4 + 1ce6: 5f 92 push r5 + 1ce8: 6f 92 push r6 + 1cea: 7f 92 push r7 + 1cec: 8f 92 push r8 + 1cee: 9f 92 push r9 + 1cf0: af 92 push r10 + 1cf2: bf 92 push r11 + 1cf4: cf 92 push r12 + 1cf6: df 92 push r13 + 1cf8: ef 92 push r14 + 1cfa: ff 92 push r15 + 1cfc: 0f 93 push r16 + 1cfe: 1f 93 push r17 + 1d00: cf 93 push r28 + 1d02: df 93 push r29 + 1d04: cd b7 in r28, 0x3d ; 61 + 1d06: de b7 in r29, 0x3e ; 62 + 1d08: ca 1b sub r28, r26 + 1d0a: db 0b sbc r29, r27 + 1d0c: 0f b6 in r0, 0x3f ; 63 + 1d0e: f8 94 cli + 1d10: de bf out 0x3e, r29 ; 62 + 1d12: 0f be out 0x3f, r0 ; 63 + 1d14: cd bf out 0x3d, r28 ; 61 + 1d16: 09 94 ijmp + +00001d18 <__epilogue_restores__>: + 1d18: 2a 88 ldd r2, Y+18 ; 0x12 + 1d1a: 39 88 ldd r3, Y+17 ; 0x11 + 1d1c: 48 88 ldd r4, Y+16 ; 0x10 + 1d1e: 5f 84 ldd r5, Y+15 ; 0x0f + 1d20: 6e 84 ldd r6, Y+14 ; 0x0e + 1d22: 7d 84 ldd r7, Y+13 ; 0x0d + 1d24: 8c 84 ldd r8, Y+12 ; 0x0c + 1d26: 9b 84 ldd r9, Y+11 ; 0x0b + 1d28: aa 84 ldd r10, Y+10 ; 0x0a + 1d2a: b9 84 ldd r11, Y+9 ; 0x09 + 1d2c: c8 84 ldd r12, Y+8 ; 0x08 + 1d2e: df 80 ldd r13, Y+7 ; 0x07 + 1d30: ee 80 ldd r14, Y+6 ; 0x06 + 1d32: fd 80 ldd r15, Y+5 ; 0x05 + 1d34: 0c 81 ldd r16, Y+4 ; 0x04 + 1d36: 1b 81 ldd r17, Y+3 ; 0x03 + 1d38: aa 81 ldd r26, Y+2 ; 0x02 + 1d3a: b9 81 ldd r27, Y+1 ; 0x01 + 1d3c: ce 0f add r28, r30 + 1d3e: d1 1d adc r29, r1 + 1d40: 0f b6 in r0, 0x3f ; 63 + 1d42: f8 94 cli + 1d44: de bf out 0x3e, r29 ; 62 + 1d46: 0f be out 0x3f, r0 ; 63 + 1d48: cd bf out 0x3d, r28 ; 61 + 1d4a: ed 01 movw r28, r26 + 1d4c: 08 95 ret + +00001d4e <_exit>: + 1d4e: f8 94 cli + +00001d50 <__stop_program>: + 1d50: ff cf rjmp .-2 ; 0x1d50 <__stop_program> diff --git a/hdlc_screen/Debug/hdlc_screen.map b/hdlc_screen/Debug/hdlc_screen.map new file mode 100644 index 0000000..4d6d650 --- /dev/null +++ b/hdlc_screen/Debug/hdlc_screen.map @@ -0,0 +1,953 @@ +Archive member included to satisfy reference by file (symbol) + +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + LCD/Lcd_print.o (__udivmodhi4) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o (exit) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + hdlc/client.o (__do_copy_data) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + hdlc/client.o (__do_clear_bss) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o) + LCD/Lcd_print.o (strncpy) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) + hdlc/client.o (printf) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(snprintf.o) + LCD/Lcd_print.o (snprintf) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) (vfprintf) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen_P) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (fputc) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) (__iob) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (__ultoa_invert) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) (__prologue_saves__) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) (__epilogue_restores__) + +Allocating common symbols +Common symbol size file + +uartRxBuffer 0x22 UART/uart.o +pcf8574_pinstatus 0x1 LCD/pcf8574.o +textCounter 0x6 LCD/Lcd_print.o +uartTxBuffer 0x22 UART/uart.o +__iob 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o) +connecting_frame_timeout_bf + 0x2 hdlc/client.o + +Discarded input sections + + .data 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + .bss 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + .text 0x00000000 0x0 hdlc/client.o + .data 0x00000000 0x0 hdlc/client.o + .bss 0x00000000 0x0 hdlc/client.o + .text 0x00000000 0x0 hdlc/fcs.o + .data 0x00000000 0x0 hdlc/fcs.o + .bss 0x00000000 0x0 hdlc/fcs.o + .text 0x00000000 0x0 hdlc/hdlc.o + .data 0x00000000 0x0 hdlc/hdlc.o + .bss 0x00000000 0x0 hdlc/hdlc.o + .text.hdlc_set_state + 0x00000000 0x20 hdlc/hdlc.o + .text.hdlc_get_state + 0x00000000 0x20 hdlc/hdlc.o + .text.hdlc_get_data_reset + 0x00000000 0xa hdlc/hdlc.o + .text.hdlc_get_data + 0x00000000 0x24 hdlc/hdlc.o + .data.hdlc_state + 0x00000000 0xb hdlc/hdlc.o + .text 0x00000000 0x0 LCD/lcdpcf8574.o + .data 0x00000000 0x0 LCD/lcdpcf8574.o + .bss 0x00000000 0x0 LCD/lcdpcf8574.o + .text.lcd_data + 0x00000000 0x14 LCD/lcdpcf8574.o + .text.lcd_getxy + 0x00000000 0x8 LCD/lcdpcf8574.o + .text.lcd_puts_p + 0x00000000 0x24 LCD/lcdpcf8574.o + .text 0x00000000 0x0 LCD/Lcd_print.o + .data 0x00000000 0x0 LCD/Lcd_print.o + .bss 0x00000000 0x0 LCD/Lcd_print.o + .text 0x00000000 0x0 LCD/pcf8574.o + .data 0x00000000 0x0 LCD/pcf8574.o + .bss 0x00000000 0x0 LCD/pcf8574.o + .text.pcf8574_getoutput + 0x00000000 0xe LCD/pcf8574.o + .text.pcf8574_setoutputpins + 0x00000000 0x80 LCD/pcf8574.o + .text.pcf8574_getinput + 0x00000000 0x22 LCD/pcf8574.o + .text.pcf8574_getinputpin + 0x00000000 0x32 LCD/pcf8574.o + .text 0x00000000 0x0 LCD/twimaster.o + .data 0x00000000 0x0 LCD/twimaster.o + .bss 0x00000000 0x0 LCD/twimaster.o + .text.i2c_start_wait + 0x00000000 0x50 LCD/twimaster.o + .text.i2c_rep_start + 0x00000000 0x6 LCD/twimaster.o + .text.i2c_readAck + 0x00000000 0x16 LCD/twimaster.o + .text.i2c_readNak + 0x00000000 0x16 LCD/twimaster.o + .text 0x00000000 0x0 main.o + .data 0x00000000 0x0 main.o + .bss 0x00000000 0x0 main.o + .text 0x00000000 0x0 protocol/protocol.o + .data 0x00000000 0x0 protocol/protocol.o + .bss 0x00000000 0x0 protocol/protocol.o + .text 0x00000000 0x0 UART/circular_buf.o + .data 0x00000000 0x0 UART/circular_buf.o + .bss 0x00000000 0x0 UART/circular_buf.o + .text.initialize_buffer + 0x00000000 0x8 UART/circular_buf.o + .text 0x00000000 0x0 UART/uart.o + .data 0x00000000 0x0 UART/uart.o + .bss 0x00000000 0x0 UART/uart.o + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(snprintf.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(snprintf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(snprintf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x00000000 0x00020000 xr +data 0x00800060 0x0000ffa0 rw !x +eeprom 0x00810000 0x00010000 rw !x +fuse 0x00820000 0x00000003 rw !x +lock 0x00830000 0x00000400 rw !x +signature 0x00840000 0x00000400 rw !x +user_signatures 0x00850000 0x00000400 rw !x +*default* 0x00000000 0xffffffff + +Linker script and memory map + +Address of section .data set to 0x800100 +LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o +LOAD hdlc/client.o +LOAD hdlc/fcs.o +LOAD hdlc/hdlc.o +LOAD LCD/lcdpcf8574.o +LOAD LCD/Lcd_print.o +LOAD LCD/pcf8574.o +LOAD LCD/twimaster.o +LOAD main.o +LOAD protocol/protocol.o +LOAD UART/circular_buf.o +LOAD UART/uart.o +START GROUP +LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a +END GROUP +START GROUP +LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a +LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a +LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a +LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5\libatmega328p.a +END GROUP + 0x00000000 __TEXT_REGION_ORIGIN__ = DEFINED (__TEXT_REGION_ORIGIN__)?__TEXT_REGION_ORIGIN__:0x0 + 0x00800060 __DATA_REGION_ORIGIN__ = DEFINED (__DATA_REGION_ORIGIN__)?__DATA_REGION_ORIGIN__:0x800060 + 0x00020000 __TEXT_REGION_LENGTH__ = DEFINED (__TEXT_REGION_LENGTH__)?__TEXT_REGION_LENGTH__:0x20000 + 0x0000ffa0 __DATA_REGION_LENGTH__ = DEFINED (__DATA_REGION_LENGTH__)?__DATA_REGION_LENGTH__:0xffa0 + 0x00010000 __EEPROM_REGION_LENGTH__ = DEFINED (__EEPROM_REGION_LENGTH__)?__EEPROM_REGION_LENGTH__:0x10000 + [0x00000003] __FUSE_REGION_LENGTH__ = DEFINED (__FUSE_REGION_LENGTH__)?__FUSE_REGION_LENGTH__:0x400 + 0x00000400 __LOCK_REGION_LENGTH__ = DEFINED (__LOCK_REGION_LENGTH__)?__LOCK_REGION_LENGTH__:0x400 + 0x00000400 __SIGNATURE_REGION_LENGTH__ = DEFINED (__SIGNATURE_REGION_LENGTH__)?__SIGNATURE_REGION_LENGTH__:0x400 + 0x00000400 __USER_SIGNATURE_REGION_LENGTH__ = DEFINED (__USER_SIGNATURE_REGION_LENGTH__)?__USER_SIGNATURE_REGION_LENGTH__:0x400 + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text) + *(.rel.text.*) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.text.*) + *(.rela.gnu.linkonce.t*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata) + *(.rel.rodata.*) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.rodata.*) + *(.rela.gnu.linkonce.r*) + +.rel.data + *(.rel.data) + *(.rel.data.*) + *(.rel.gnu.linkonce.d*) + +.rela.data + *(.rela.data) + *(.rela.data.*) + *(.rela.gnu.linkonce.d*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x00000000 0x1d52 + *(.vectors) + .vectors 0x00000000 0x68 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + 0x00000000 __vector_default + 0x00000000 __vectors + *(.vectors) + *(.progmem.gcc*) + 0x00000068 . = ALIGN (0x2) + 0x00000068 __trampolines_start = . + *(.trampolines) + .trampolines 0x00000068 0x0 linker stubs + *(.trampolines*) + 0x00000068 __trampolines_end = . + *libprintf_flt.a:*(.progmem.data) + *libc.a:*(.progmem.data) + *(.progmem*) + 0x00000068 . = ALIGN (0x2) + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x00000068 __ctors_start = . + *(.ctors) + 0x00000068 __ctors_end = . + 0x00000068 __dtors_start = . + *(.dtors) + 0x00000068 __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x00000068 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + 0x00000068 __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x00000068 0xc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + *(.init2) + *(.init3) + *(.init3) + *(.init4) + .init4 0x00000074 0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o) + 0x00000074 __do_copy_data + .init4 0x0000008a 0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o) + 0x0000008a __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x0000009a 0x8 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + *(.init9) + *(.text) + .text 0x000000a2 0x4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + 0x000000a2 __vector_22 + 0x000000a2 __vector_1 + 0x000000a2 __vector_24 + 0x000000a2 __vector_12 + 0x000000a2 __bad_interrupt + 0x000000a2 __vector_6 + 0x000000a2 __vector_3 + 0x000000a2 __vector_23 + 0x000000a2 __vector_25 + 0x000000a2 __vector_11 + 0x000000a2 __vector_13 + 0x000000a2 __vector_17 + 0x000000a2 __vector_19 + 0x000000a2 __vector_7 + 0x000000a2 __vector_5 + 0x000000a2 __vector_4 + 0x000000a2 __vector_9 + 0x000000a2 __vector_2 + 0x000000a2 __vector_21 + 0x000000a2 __vector_15 + 0x000000a2 __vector_8 + 0x000000a2 __vector_14 + 0x000000a2 __vector_10 + 0x000000a2 __vector_16 + 0x000000a6 . = ALIGN (0x2) + *(.text.*) + .text.init_hdlc_client + 0x000000a6 0x32 hdlc/client.o + 0x000000a6 init_hdlc_client + .text.hdlc_connect + 0x000000d8 0x14 hdlc/client.o + 0x000000d8 hdlc_connect + .text.hdlc_send_data + 0x000000ec 0x36 hdlc/client.o + 0x000000ec hdlc_send_data + .text.hdlc_get_raw_frame + 0x00000122 0xec hdlc/client.o + 0x00000122 hdlc_get_raw_frame + .text.hdlc_decode_recived_raw_data + 0x0000020e 0x142 hdlc/client.o + 0x0000020e hdlc_decode_recived_raw_data + .text.hdlc_timeout_handler + 0x00000350 0x20 hdlc/client.o + 0x00000350 hdlc_timeout_handler + .text.calc_fcs + 0x00000370 0x1c hdlc/fcs.o + 0x00000370 calc_fcs + .text.hdlc_escape_value + 0x0000038c 0x3e hdlc/hdlc.o + 0x0000038c hdlc_escape_value + .text.hdlc_get_control_type + 0x000003ca 0x26 hdlc/hdlc.o + 0x000003ca hdlc_get_control_type + .text.hdlc_frame_control_type + 0x000003f0 0x36 hdlc/hdlc.o + 0x000003f0 hdlc_frame_control_type + .text.hdlc_get_data_reset_with_state + 0x00000426 0x1e hdlc/hdlc.o + 0x00000426 hdlc_get_data_reset_with_state + .text.hdlc_get_data_with_state + 0x00000444 0x24c hdlc/hdlc.o + 0x00000444 hdlc_get_data_with_state + .text.hdlc_frame_data + 0x00000690 0x14a hdlc/hdlc.o + 0x00000690 hdlc_frame_data + .text.lcd_read + 0x000007da 0x76 LCD/lcdpcf8574.o + .text.lcd_waitbusy + 0x00000850 0x14 LCD/lcdpcf8574.o + .text.toggle_e + 0x00000864 0x14 LCD/lcdpcf8574.o + .text.lcd_write + 0x00000878 0x144 LCD/lcdpcf8574.o + .text.lcd_command + 0x000009bc 0x14 LCD/lcdpcf8574.o + 0x000009bc lcd_command + .text.lcd_gotoxy + 0x000009d0 0x14 LCD/lcdpcf8574.o + 0x000009d0 lcd_gotoxy + .text.lcd_clrscr + 0x000009e4 0x8 LCD/lcdpcf8574.o + 0x000009e4 lcd_clrscr + .text.lcd_led 0x000009ec 0x26 LCD/lcdpcf8574.o + 0x000009ec lcd_led + .text.lcd_home + 0x00000a12 0x8 LCD/lcdpcf8574.o + 0x00000a12 lcd_home + .text.lcd_putc + 0x00000a1a 0x48 LCD/lcdpcf8574.o + 0x00000a1a lcd_putc + .text.lcd_puts + 0x00000a62 0x20 LCD/lcdpcf8574.o + 0x00000a62 lcd_puts + .text.lcd_init + 0x00000a82 0xa4 LCD/lcdpcf8574.o + 0x00000a82 lcd_init + .text.Lcd_inciliation + 0x00000b26 0x12 LCD/Lcd_print.o + 0x00000b26 Lcd_inciliation + .text.fillBuffer1 + 0x00000b38 0x7a LCD/Lcd_print.o + 0x00000b38 fillBuffer1 + .text.fillBuffer2 + 0x00000bb2 0x5e LCD/Lcd_print.o + 0x00000bb2 fillBuffer2 + .text.printLcd + 0x00000c10 0xe0 LCD/Lcd_print.o + 0x00000c10 printLcd + .text.pcf8574_init + 0x00000cf0 0x12 LCD/pcf8574.o + 0x00000cf0 pcf8574_init + .text.pcf8574_getoutputpin + 0x00000d02 0x28 LCD/pcf8574.o + 0x00000d02 pcf8574_getoutputpin + .text.pcf8574_setoutput + 0x00000d2a 0x26 LCD/pcf8574.o + 0x00000d2a pcf8574_setoutput + .text.pcf8574_setoutputpin + 0x00000d50 0x5c LCD/pcf8574.o + 0x00000d50 pcf8574_setoutputpin + .text.pcf8574_setoutputpinhigh + 0x00000dac 0x8 LCD/pcf8574.o + 0x00000dac pcf8574_setoutputpinhigh + .text.pcf8574_setoutputpinlow + 0x00000db4 0x8 LCD/pcf8574.o + 0x00000db4 pcf8574_setoutputpinlow + .text.i2c_init + 0x00000dbc 0xc LCD/twimaster.o + 0x00000dbc i2c_init + .text.i2c_start + 0x00000dc8 0x4e LCD/twimaster.o + 0x00000dc8 i2c_start + .text.i2c_stop + 0x00000e16 0x12 LCD/twimaster.o + 0x00000e16 i2c_stop + .text.i2c_write + 0x00000e28 0x24 LCD/twimaster.o + 0x00000e28 i2c_write + .text.main 0x00000e4c 0x330 main.o + 0x00000e4c main + .text.protocol_decode + 0x0000117c 0x13c protocol/protocol.o + 0x0000117c protocol_decode + .text.protocol_encode + 0x000012b8 0x1c6 protocol/protocol.o + 0x000012b8 protocol_encode + .text.buffer_empty + 0x0000147e 0x14 UART/circular_buf.o + 0x0000147e buffer_empty + .text.buffer_full + 0x00001492 0x34 UART/circular_buf.o + 0x00001492 buffer_full + .text.write_buffer + 0x000014c6 0x3a UART/circular_buf.o + 0x000014c6 write_buffer + .text.read_buffer + 0x00001500 0x3c UART/circular_buf.o + 0x00001500 read_buffer + .text.UART_init + 0x0000153c 0x18 UART/uart.o + 0x0000153c UART_init + .text.UART_send + 0x00001554 0x48 UART/uart.o + 0x00001554 UART_send + .text.UART_receive + 0x0000159c 0x84 UART/uart.o + 0x0000159c UART_receive + .text.__vector_18 + 0x00001620 0x64 UART/uart.o + 0x00001620 __vector_18 + .text.__vector_20 + 0x00001684 0x68 UART/uart.o + 0x00001684 __vector_20 + .text.libgcc.div + 0x000016ec 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o) + 0x000016ec __udivmodhi4 + .text.avr-libc + 0x00001714 0x1e c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o) + 0x00001714 strncpy + .text.avr-libc + 0x00001732 0x2c c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) + 0x00001732 printf + .text.avr-libc + 0x0000175e 0x60 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(snprintf.o) + 0x0000175e snprintf + .text.avr-libc + 0x000017be 0x3c2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + 0x000017be vfprintf + .text.avr-libc + 0x00001b80 0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + 0x00001b80 strnlen_P + .text.avr-libc + 0x00001b96 0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o) + 0x00001b96 strnlen + .text.avr-libc + 0x00001bac 0x78 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o) + 0x00001bac fputc + .text.avr-libc + 0x00001c24 0xbc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + 0x00001c24 __ultoa_invert + .text.libgcc.prologue + 0x00001ce0 0x38 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o) + 0x00001ce0 __prologue_saves__ + .text.libgcc.prologue + 0x00001d18 0x36 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o) + 0x00001d18 __epilogue_restores__ + 0x00001d4e . = ALIGN (0x2) + *(.fini9) + .fini9 0x00001d4e 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + 0x00001d4e _exit + 0x00001d4e exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x00001d4e 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o) + *(.fini0) + 0x00001d52 _etext = . + +.data 0x00800100 0x242 load address 0x00001d52 + 0x00800100 PROVIDE (__data_start, .) + *(.data) + *(.data*) + *(.gnu.linkonce.d*) + *(.rodata) + *(.rodata*) + .rodata.str1.1 + 0x00800100 0x16 hdlc/client.o + .rodata.fcstab + 0x00800116 0x200 hdlc/fcs.o + .rodata.str1.1 + 0x00800316 0xf LCD/Lcd_print.o + .rodata.str1.1 + 0x00800325 0x1c main.o + *(.gnu.linkonce.r*) + 0x00800342 . = ALIGN (0x2) + *fill* 0x00800341 0x1 + 0x00800342 _edata = . + 0x00800342 PROVIDE (__data_end, .) + +.bss 0x00800342 0x54 + 0x00800342 PROVIDE (__bss_start, .) + *(.bss) + *(.bss*) + .bss.dataport 0x00800342 0x1 LCD/lcdpcf8574.o + 0x00800342 dataport + *(COMMON) + COMMON 0x00800343 0x2 hdlc/client.o + 0x00800343 connecting_frame_timeout_bf + COMMON 0x00800345 0x6 LCD/Lcd_print.o + 0x00800345 textCounter + COMMON 0x0080034b 0x1 LCD/pcf8574.o + 0x0080034b pcf8574_pinstatus + COMMON 0x0080034c 0x44 UART/uart.o + 0x0080034c uartRxBuffer + 0x0080036e uartTxBuffer + COMMON 0x00800390 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o) + 0x00800390 __iob + 0x00800396 PROVIDE (__bss_end, .) + 0x00001d52 __data_load_start = LOADADDR (.data) + 0x00001f94 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00800396 0x0 + [!provide] PROVIDE (__noinit_start, .) + *(.noinit*) + [!provide] PROVIDE (__noinit_end, .) + 0x00800396 _end = . + [!provide] PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.user_signatures + *(.user_signatures*) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x8c + *(.comment) + .comment 0x00000000 0x30 hdlc/client.o + 0x31 (size before relaxing) + .comment 0x00000030 0x30 hdlc/fcs.o + 0x31 (size before relaxing) + .comment 0x00000060 0x31 hdlc/hdlc.o + .comment 0x00000060 0x31 LCD/lcdpcf8574.o + .comment 0x00000060 0x31 LCD/Lcd_print.o + .comment 0x00000060 0x31 LCD/pcf8574.o + .comment 0x00000060 0x31 LCD/twimaster.o + .comment 0x00000060 0x31 main.o + .comment 0x00000060 0x31 protocol/protocol.o + .comment 0x00000060 0x31 UART/circular_buf.o + .comment 0x00000060 0x31 UART/uart.o + .comment 0x00000060 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(printf.o) + .comment 0x00000060 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(snprintf.o) + .comment 0x00000060 0x2c c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + 0x2d (size before relaxing) + .comment 0x0000008c 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o) + .comment 0x0000008c 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o) + +.note.gnu.avr.deviceinfo + 0x00000000 0x40 + .note.gnu.avr.deviceinfo + 0x00000000 0x40 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + +.note.gnu.build-id + *(.note.gnu.build-id) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x320 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x48 hdlc/client.o + .debug_aranges + 0x00000048 0x20 hdlc/fcs.o + .debug_aranges + 0x00000068 0x68 hdlc/hdlc.o + .debug_aranges + 0x000000d0 0x90 LCD/lcdpcf8574.o + .debug_aranges + 0x00000160 0x38 LCD/Lcd_print.o + .debug_aranges + 0x00000198 0x68 LCD/pcf8574.o + .debug_aranges + 0x00000200 0x58 LCD/twimaster.o + .debug_aranges + 0x00000258 0x20 main.o + .debug_aranges + 0x00000278 0x28 protocol/protocol.o + .debug_aranges + 0x000002a0 0x40 UART/circular_buf.o + .debug_aranges + 0x000002e0 0x40 UART/uart.o + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x00000000 0x378f + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x00000000 0x5f4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + .debug_info 0x000005f4 0x5e7 hdlc/client.o + .debug_info 0x00000bdb 0xa5 hdlc/fcs.o + .debug_info 0x00000c80 0x685 hdlc/hdlc.o + .debug_info 0x00001305 0x7d2 LCD/lcdpcf8574.o + .debug_info 0x00001ad7 0x45c LCD/Lcd_print.o + .debug_info 0x00001f33 0x54c LCD/pcf8574.o + .debug_info 0x0000247f 0x1c4 LCD/twimaster.o + .debug_info 0x00002643 0x91f main.o + .debug_info 0x00002f62 0x30c protocol/protocol.o + .debug_info 0x0000326e 0x1fc UART/circular_buf.o + .debug_info 0x0000346a 0x325 UART/uart.o + +.debug_abbrev 0x00000000 0x1589 + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x5a2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + .debug_abbrev 0x000005a2 0x1fc hdlc/client.o + .debug_abbrev 0x0000079e 0x83 hdlc/fcs.o + .debug_abbrev 0x00000821 0x194 hdlc/hdlc.o + .debug_abbrev 0x000009b5 0x266 LCD/lcdpcf8574.o + .debug_abbrev 0x00000c1b 0x163 LCD/Lcd_print.o + .debug_abbrev 0x00000d7e 0x1b6 LCD/pcf8574.o + .debug_abbrev 0x00000f34 0xe5 LCD/twimaster.o + .debug_abbrev 0x00001019 0x17c main.o + .debug_abbrev 0x00001195 0x137 protocol/protocol.o + .debug_abbrev 0x000012cc 0x175 UART/circular_buf.o + .debug_abbrev 0x00001441 0x148 UART/uart.o + +.debug_line 0x00000000 0x1e37 + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x00000000 0x133 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + .debug_line 0x00000133 0x32b hdlc/client.o + .debug_line 0x0000045e 0x47 hdlc/fcs.o + .debug_line 0x000004a5 0x497 hdlc/hdlc.o + .debug_line 0x0000093c 0x4bb LCD/lcdpcf8574.o + .debug_line 0x00000df7 0x1e8 LCD/Lcd_print.o + .debug_line 0x00000fdf 0x36c LCD/pcf8574.o + .debug_line 0x0000134b 0x2bf LCD/twimaster.o + .debug_line 0x0000160a 0x2af main.o + .debug_line 0x000018b9 0x25e protocol/protocol.o + .debug_line 0x00001b17 0xfa UART/circular_buf.o + .debug_line 0x00001c11 0x226 UART/uart.o + +.debug_frame 0x00000000 0x9a0 + *(.debug_frame) + .debug_frame 0x00000000 0x104 hdlc/client.o + .debug_frame 0x00000104 0x24 hdlc/fcs.o + .debug_frame 0x00000128 0x178 hdlc/hdlc.o + .debug_frame 0x000002a0 0x154 LCD/lcdpcf8574.o + .debug_frame 0x000003f4 0x124 LCD/Lcd_print.o + .debug_frame 0x00000518 0xe0 LCD/pcf8574.o + .debug_frame 0x000005f8 0xa0 LCD/twimaster.o + .debug_frame 0x00000698 0x7c main.o + .debug_frame 0x00000714 0xd0 protocol/protocol.o + .debug_frame 0x000007e4 0x74 UART/circular_buf.o + .debug_frame 0x00000858 0x148 UART/uart.o + +.debug_str 0x00000000 0xcc5 + *(.debug_str) + .debug_str 0x00000000 0x208 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o + .debug_str 0x00000208 0x387 hdlc/client.o + 0x412 (size before relaxing) + .debug_str 0x0000058f 0x41 hdlc/fcs.o + 0x11c (size before relaxing) + .debug_str 0x000005d0 0xcf hdlc/hdlc.o + 0x302 (size before relaxing) + .debug_str 0x0000069f 0x17f LCD/lcdpcf8574.o + 0x2ca (size before relaxing) + .debug_str 0x0000081e 0xfe LCD/Lcd_print.o + 0x287 (size before relaxing) + .debug_str 0x0000091c 0x123 LCD/pcf8574.o + 0x2e3 (size before relaxing) + .debug_str 0x00000a3f 0x49 LCD/twimaster.o + 0x1c6 (size before relaxing) + .debug_str 0x00000a88 0xe8 main.o + 0x4ac (size before relaxing) + .debug_str 0x00000b70 0x7d protocol/protocol.o + 0x232 (size before relaxing) + .debug_str 0x00000bed 0x7d UART/circular_buf.o + 0x1d1 (size before relaxing) + .debug_str 0x00000c6a 0x5b UART/uart.o + 0x242 (size before relaxing) + +.debug_loc 0x00000000 0x2fe7 + *(.debug_loc) + .debug_loc 0x00000000 0x534 hdlc/client.o + .debug_loc 0x00000534 0x26 hdlc/fcs.o + .debug_loc 0x0000055a 0xb7e hdlc/hdlc.o + .debug_loc 0x000010d8 0x5b5 LCD/lcdpcf8574.o + .debug_loc 0x0000168d 0x4ac LCD/Lcd_print.o + .debug_loc 0x00001b39 0x69d LCD/pcf8574.o + .debug_loc 0x000021d6 0x12d LCD/twimaster.o + .debug_loc 0x00002303 0x21a main.o + .debug_loc 0x0000251d 0x578 protocol/protocol.o + .debug_loc 0x00002a95 0x140 UART/circular_buf.o + .debug_loc 0x00002bd5 0x412 UART/uart.o + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x00000000 0x2e8 + *(.debug_ranges) + .debug_ranges 0x00000000 0x50 hdlc/client.o + .debug_ranges 0x00000050 0x10 hdlc/fcs.o + .debug_ranges 0x00000060 0x58 hdlc/hdlc.o + .debug_ranges 0x000000b8 0x98 LCD/lcdpcf8574.o + .debug_ranges 0x00000150 0x28 LCD/Lcd_print.o + .debug_ranges 0x00000178 0x58 LCD/pcf8574.o + .debug_ranges 0x000001d0 0x48 LCD/twimaster.o + .debug_ranges 0x00000218 0x40 main.o + .debug_ranges 0x00000258 0x30 protocol/protocol.o + .debug_ranges 0x00000288 0x30 UART/circular_buf.o + .debug_ranges 0x000002b8 0x30 UART/uart.o + +.debug_macro + *(.debug_macro) +OUTPUT(hdlc_screen.elf elf32-avr) +LOAD linker stubs diff --git a/hdlc_screen/Debug/hdlc_screen.srec b/hdlc_screen/Debug/hdlc_screen.srec new file mode 100644 index 0000000..33acdeb --- /dev/null +++ b/hdlc_screen/Debug/hdlc_screen.srec @@ -0,0 +1,509 @@ +S013000068646C635F73637265656E2E7372656397 +S11300000C9434000C9451000C9451000C94510045 +S11300100C9451000C9451000C9451000C94510018 +S11300200C9451000C9451000C9451000C94510008 +S11300300C9451000C9451000C9451000C945100F8 +S11300400C9451000C9451000C94100B0C9451001E +S11300500C94420B0C9451000C9451000C945100DC +S11300600C9451000C94510011241FBECFEFD8E022 +S1130070DEBFCDBF13E0A0E0B1E0E2E5FDE102C0E8 +S113008005900D92A234B107D9F723E0A2E4B3E0BE +S113009001C01D92A639B207E1F70E9426070C940D +S11300A0A70E0C940000FC0181E0808372836183BD +S11300B0709344036093430384E1838314828FEF3A +S11300C09FEF9683858390878783928781871486A1 +S11300D01386168615860895FC0183E08083808943 +S11300E0887F808B81E0878713820895FC0180815B +S11300F0823089F485E080834134510578F4828923 +S1130100887F828B118A748B638B568B458B138209 +S113011080E090E008958CEF9FEF08958FEF9FEFBC +S11301200895CF92DF92EF92FF920F931F93CF9394 +S1130130DF9300D0CDB7DEB77C016B015A834983CE +S1130140FC0180818530D1F445895689638974899D +S11301508E010F5F1F4F9601C70141960E9448030D +S1130160992364F49F938F9380E091E09F938F93FE +S11301700E94990B0F900F900F900F90F7018081C0 +S11301808330D1F48E010F5F1F4F960140E050E0A1 +S113019060E070E0C7010F960E944803992364F45D +S11301A09F938F9380E091E09F938F930E94990B8C +S11301B00F900F900F900F90F70180818430D1F44D +S11301C08E010F5F1F4F960140E050E060E070E049 +S11301D0C70147960E944803992364F49F938F9321 +S11301E080E091E09F938F930E94990B0F900F9062 +S11301F00F900F9080E090E00F900F90DF91CF91DF +S11302001F910F91FF90EF90DF90CF9008952F9260 +S11302103F924F925F926F927F928F929F92AF9292 +S1130220BF92CF92DF92EF92FF920F931F93CF93DF +S1130230DF9300D000D0CDB7DEB75C015C834B8385 +S1130240222E332E38018DB69EB6C42ED52E8DB7F0 +S11302509EB78C199D090FB6F8949EBF0FBE8DBF33 +S1130260EDB7FEB731962F01CE0103967C018F01C5 +S11302709601AB01BE016F5F7F4FC50104960E94DA +S1130280220299230CF448C08A81877090E0F5011A +S1130290238130E08217930751F084E08083808DBE +S11302A0887F808F82E0878B8AEF9FEF35C08981BA +S11302B0813049F018F08230D9F025C0F2E0CF1A2D +S11302C0D10829F40EC082E0F50180831CC0F2013C +S11302D0A22DB32D4C0C5D1C81918D93E415F50575 +S11302E0D9F7F301D182C08286E0F50180830BC087 +S11302F084E0F5018083808D887F808F82E0878B06 +S11303008AEF9FEF09C08091430390914403F50164 +S11303109283818380E090E00FB6F8949EBE0FBE76 +S11303208DBE0F900F900F900F90DF91CF911F9182 +S11303300F91FF90EF90DF90CF90BF90AF909F9080 +S11303408F907F906F905F904F903F902F90089583 +S1130350FC0121813281261B370B32832183121643 +S113036013061CF480E090E008958BEF9FEF08954E +S1130370FC01E627FF27EE0FFF1FEA5EFE4F892FE1 +S1130380992720813181822793270895FA0193E8E0 +S1130390980F923070F420813181A9014F5F5F4F33 +S11303A051834083DB01A20FB31F9DE79C9390E22E +S11303B0892720813181A9014F5F5F4F5183408399 +S11303C0FB01E20FF31F80830895982F80FF0BC079 +S11303D086958695837011F082E001C081E0929544 +S11303E09695977003C09695977080E097700895DE +S11303F0FC019081913049F018F0923061F011C005 +S113040081818770880F8061089581818295880F2A +S1130410807E8160089581818295880F807E8960C5 +S1130420089580E00895FC018FEF9FEF928381830C +S1130430968385839483838312861186108617821C +S1130440108208953F924F925F926F927F928F92A3 +S11304509F92AF92BF92CF92DF92EF92FF920F934F +S11304601F93CF93DF9300D000D0CDB7DEB70097B2 +S113047009F4EAC06115710509F4E9C04115510593 +S113048009F4E8C00115110509F4E7C0E114F10409 +S113049009F4E6C0380149017A8369839C838B831C +S11304A02115310509F499C08A01C12CD12C689415 +S11304B0442445F833243394590121E0A21AB108A5 +S11304C0AB81BC8113968D919C91149799239CF4D4 +S11304D0F80180818E3709F070C0CA14DB0420F45F +S11304E081818E3709F470C0EB81FC81878190850E +S11304F09483838362C0F80150802EE7521219C09E +S1130500CA14DB0420F421812E3709F45DC0AB81C9 +S1130510BC8117962D913C911897AC014F5F5F4FAA +S11305204217530709F450C016963C932E9315971F +S11305305DC0BDE75B1204C0EB81FC8130823DC02D +S1130540AB81BC818C91882319F01C925080542477 +S1130550652DEB81FC81818192810E94B801AB8180 +S1130560BC8112969C938E93119717962D913C9172 +S1130570189713968D919C91149702962817390712 +S113058041F4852D0E94E501E981FA8191838083FC +S113059014C0821793078CF4AB81BC8119968D919A +S11305A09C911A979C012F5F3F4F1A963C932E9370 +S11305B01997F301E80FF91F5082EB81FC818781C1 +S11305C09085019690878783FFEFCF1ADF0A0F5F2C +S11305D01F4F8C149D0409F073CFAB81BC8113961B +S11305E08D919C91149799233CF06401EB81FC81DB +S11305F025813681332334F4D7011D921C928EE079 +S113060092ED30C00496281739073CF0EB81FC8149 +S113061081819281883B904F31F0D701CD92DC9259 +S11306200EE012ED0AC0EB81FC8181859285029770 +S1130630D7018D939C930C2D1D2D8B819C810E9441 +S11306401302802F912F0EC08EE092ED0BC08EE02E +S113065092ED08C08EE092ED05C08EE092ED02C0EE +S11306608EE092ED0F900F900F900F90DF91CF914D +S11306701F910F91FF90EF90DF90CF90BF90AF90BC +S11306809F908F907F906F905F904F903F900895D0 +S11306905F926F927F928F929F92AF92BF92CF920E +S11306A0DF92EF92FF920F931F93CF93DF9300D0CB +S11306B0CDB7DEB7009709F473C06115710521F455 +S11306C04115510509F06FC02115310509F46EC0BB +S11306D00115110509F46DC0380179015A014B0166 +S11306E08C0181E090E09A8389838EE7F90180830D +S11306F06FEF8FEF9FEF0E94B8016C01AE014F5F67 +S11307005F4FB7018FEF0E94C601C8010E94F80134 +S1130710582E682FC6010E94B8016C01AE014F5FCC +S11307205F4FB701852D0E94C601F80180818111B8 +S113073019C0A114B104B1F084018A0C9B1C5801A6 +S1130740F80161918F01C6010E94B8016C01AE01EC +S11307504F5F5F4FB701F50180810E94C60180168B +S1130760910669F7C094D094AE014F5F5F4FB70113 +S11307708C2D0E94C601AE014F5F5F4FB7018D2DD6 +S11307800E94C60189819A81F701E80FF91F2EE7BB +S113079020830196F3019183808380E090E00BC075 +S11307A08EE092ED08C08EE092ED05C08EE092EDF1 +S11307B002C08EE092ED0F900F90DF91CF911F91C8 +S11307C00F91FF90EF90DF90CF90BF90AF909F90EC +S11307D08F907F906F905F900895CF93882331F02E +S11307E08091420381608093420305C0809142035B +S11307F08E7F809342038091420382608093420300 +S11308006091420380E00E94950662E080E00E94CD +S1130810D60600C064E080E00E948106C82F62E032 +S113082080E00E94DA0600C062E080E00E94D60602 +S113083000C064E080E00E948106C295C07F8F7092 +S1130840C82B62E080E00E94DA068C2FCF910895D5 +S113085080E00E94ED038823DCF300C080E00E9466 +S1130860ED03089562E080E00E94D60600C062E0D5 +S113087080E00E94DA060895CF93C82F662331F0F2 +S11308808091420381608093420305C080914203BA +S11308908E7F80934203809142038D7F8093420335 +S11308A06091420380E00E949506809142038F7715 +S11308B080934203809142038F7B80934203809113 +S11308C042038F7D80934203809142038F7E809305 +S11308D04203CC232CF4809142038068809342032A +S11308E0C6FF05C080914203806480934203C5FF24 +S11308F005C080914203806280934203C4FF05C017 +S1130900809142038061809342036091420380E0BE +S11309100E9495060E943204809142038F7780934F +S11309204203809142038F7B809342038091420370 +S11309308F7D80934203809142038F7E8093420394 +S1130940C3FF05C080914203806880934203C2FFC5 +S113095005C080914203806480934203C1FF05C0B7 +S113096080914203806280934203C0FF05C080915E +S113097042038061809342036091420380E00E94BD +S113098095060E9432048091420380618093420361 +S11309908091420380628093420380914203806489 +S11309A08093420380914203806880934203609164 +S11309B0420380E00E949506CF910895CF93C82FFB +S11309C00E94280460E08C2F0E943C04CF9108957B +S11309D0611104C080580E94DE04089580540E946E +S11309E0DE04089581E00E94DE040895882331F036 +S11309F080914203877F8093420305C08091420324 +S1130A008860809342036091420380E00E949506CF +S1130A10089582E00E94DE040895CF93C82F0E94B7 +S1130A202804CA3049F4803410F080E001C080E426 +S1130A3080580E94DE0413C0803129F460E080EC09 +S1130A400E943C0406C0803521F460E080E80E94E6 +S1130A503C040E94280461E08C2F0E943C04CF9146 +S1130A600895CF93DF93EC012196FC0180818823C4 +S1130A7029F00E940D0589918111FBCFDF91CF915F +S1130A8008951F93CF93DF93182F0E947806109236 +S1130A9042036091420380E00E94950680EA9FE051 +S1130AA00197F1F780914203806280934203809121 +S1130AB042038061809342036091420380E00E947C +S1130AC095060E94320480EE94E00197F1F70E94AB +S1130AD03204C0E1D0E0CE010197F1F70E94320464 +S1130AE0CE010197F1F7809142038F7E80934203F8 +S1130AF06091420380E00E9495060E94320421978F +S1130B00F1F788E20E94DE0488E00E94DE040E947D +S1130B10F20486E00E94DE04812F0E94DE04DF914D +S1130B20CF911F9108958DE00E9441050E9409050F +S1130B3080E00E94F6040895CF92DF92EF92FF9234 +S1130B400F931F93CF93DF938C017B01C901F801AD +S1130B5001900020E9F73197BF01601B710B0E94DF +S1130B60760B670120E1C20ED11CE7019C012E190E +S1130B703F09F80101900020E9F73197BF01601B9C +S1130B80710BC9018C0F9D1F0E94760BF801E80FB1 +S1130B90F91F80818993CC15DD0559F7F701108A77 +S1130BA0DF91CF911F910F91FF90EF90DF90CF9045 +S1130BB00895AF92BF92CF92DF92EF92FF920F937C +S1130BC01F931F930F93FF92EF925F934F933F9363 +S1130BD02F939F938F937F936F9386E193E09F93DB +S1130BE08F93BF92AF92DF92CF920E94AF0B8DB7DB +S1130BF09EB742960FB6F8949EBF0FBE8DBF1F914D +S1130C000F91FF90EF90DF90CF90BF90AF90089539 +S1130C106F927F92AF92BF92CF92DF92EF92FF9248 +S1130C200F931F93CF93DF93CDB7DEB7C254D1098F +S1130C300FB6F894DEBF0FBECDBF3C01209149032F +S1130C4030914A0341E150E0BE016F5F7F4F0E9443 +S1130C509C05F301E85BFF4FE080F1800281138182 +S1130C60349720813181428153813497608171812D +S1130C70828193810F2EF1E1AF2EB12CF02DFE0174 +S1130C8072966F010E94D90540E150E0BE016F5F8A +S1130C907F4FCE0183960E948A0B40E150E0B6015B +S1130CA0CE01C3960E948A0B60E080E00E94E804B3 +S1130CB0CE0183960E94310561E080E00E94E80441 +S1130CC0CE01C3960E943105CE5BDF4F0FB6F89478 +S1130CD0DEBF0FBECDBFDF91CF911F910F91FF906B +S1130CE0EF90DF90CF90BF90AF907F906F9008957A +S1130CF00E94DE0683E08A95F1F7000010924B0310 +S1130D00089581110EC0683070F480914B03082E51 +S1130D10000C990B02C0959587956A95E2F781704E +S1130D2008958FEF08958FEF0895CF9381110DC02B +S1130D30C62F60934B038EE40E94E4068C2F0E941E +S1130D4014070E940B0780E001C08FEFCF91089534 +S1130D50CF93DF93811124C0683020F580914B0339 +S1130D60442349F0C1E0D0E002C0CC0FDD1F6A95F6 +S1130D70E2F7C82B09C0C1E0D0E002C0CC0FDD1FF0 +S1130D806A95E2F7C095C823C0934B038EE40E9492 +S1130D90E4068C2F0E9414070E940B0780E003C016 +S1130DA08FEF01C08FEFDF91CF91089541E00E9452 +S1130DB0A806089540E00E94A80608951092B9007C +S1130DC08DEF8093B800089594EA9093BC00ECEB07 +S1130DD0F0E090819923ECF79091B900987F9830D6 +S1130DE011F09031A1F48093BB0084E88093BC009F +S1130DF0ECEBF0E080818823ECF79091B900987FC8 +S1130E00983139F081E0903429F480E0089581E04C +S1130E10089580E0089584E98093BC00ECEBF0E051 +S1130E20808184FDFDCF08958093BB0084E8809386 +S1130E30BC00ECEBF0E080818823ECF79091B900E2 +S1130E40987F81E0983209F480E008954F925F9290 +S1130E506F927F928F929F92AF92BF92CF92DF92C6 +S1130E60EF92FF920F931F93CF93DF93CDB7DEB72B +S1130E70C350D2400FB6F894DEBF0FBECDBF0E9460 +S1130E8093050E949E0A68EC70E0CE0101960E94D0 +S1130E905300CE0101960E946C004AE050E0BE016E +S1130EA0665E7F4FCE0101960E9491006AE070E079 +S1130EB0CE014A960E94AA0A64E170E0CE018051F4 +S1130EC09E4F0E94CE0A61E070E0CE0101960E941E +S1130ED0A801059681F44AE050E0BE01665E7F4FAA +S1130EE0CE0101960E9491006AE070E0CE014A961C +S1130EF00E94AA0AE1CF00E010E020E030E044E1E3 +S1130F0050E0BE0160517E4FCE0101960E94070160 +S1130F108C019923ACF40A3F8FEF1807B1F444E134 +S1130F2050E0BE01605A7E4FCE0101960E949100AE +S1130F3064E170E0CE01805A9E4F0E94AA0A05C067 +S1130F408981823009F0B8CF03C0802F912FFEC071 +S1130F5084EA90E7ADE9BFE38CA39DA3AEA3BFA34E +S1130F608DEC9CECA0EBB1E488A799A7AAA7BBA73A +S1130F7080E090E0A8ECB2E48CA79DA7AEA7BFA741 +S1130F8083E090E099AB88AB85E293E09BAB8AABBE +S1130F9082E090E09DAB8CAB2E01E6E74E0E511C37 +S1130FA05F924F923E01F6E36F0E711C7F926F9237 +S1130FB08CA09DA0AEA0BFA0C8A4D9A4EAA4FBA401 +S1130FC00CA51DA52EA53FA548A959A96AA97BA9C9 +S1130FD08CA99DA90E945C09F20140815181B30151 +S1130FE0CE0101960E94760048E450E0BE016858A4 +S1130FF07F4FCE0101960E94910068E470E0CE011B +S113100088589F4F0E94AA0A0F900F900F900F903C +S113101060E970E0CE01805A9E4F0E94CE0A61E0E2 +S113102070E0CE0101960E94A801059689F448E477 +S113103050E0BE0168587F4FCE0101960E94910096 +S113104068E470E0CE0188589F4F0E94AA0AE0CF5E +S11310508E0113959E0120543F4F40E950E0BE019C +S1131060605A7E4FCE0101960E9407018C0199239C +S11310709CF40696B1F444E150E0BE0160517E4F09 +S1131080CE0101960E94910064E170E0CE0180518E +S11310909E4F0E94AA0A05C08981863009F0B8CF04 +S11310A003C0802F912F52C0C050DF4F68817981D7 +S11310B0C050D140AE014E5F5E4FCE0180549F4F71 +S11310C00E94BE08CE5FDE4F88819981AA81BB81D0 +S11310D0C250D140CC5ADE4F88839983AA83BB8304 +S11310E0C455D140CA5FDE4F88819981AA81BB81F2 +S11310F0C650D140C85ADE4F88839983AA83BB83E4 +S1131100C855D140C65FDE4F88819981AA81BB81D1 +S1131110CA50D140C45ADE4F88839983AA83BB83C3 +S1131120CC55D140C05FDE4F68817981C051D14038 +S11311304FE350E0CE018C5E9E4F0E948A0BCE019D +S11311408C5E9E4F0E94080680E090E0CD5FDD4FEC +S11311500FB6F894DEBF0FBECDBFDF91CF911F91C4 +S11311600F91FF90EF90DF90CF90BF90AF909F9042 +S11311708F907F906F905F904F9008958F929F9281 +S1131180AF92BF92CF92DF92EF92FF920F931F9391 +S1131190CF93DF93CDB7DEB7C054D1090FB6F8941F +S11311A0DEBF0FBECDBF4B01672B09F46CC020E03E +S11311B030E060E070E0A12CB12C6E01E5E0CE0ED1 +S11311C0D11CFE0131967F01FC01E20FF31F208147 +S11311D0211127C0DB011196A80FB91FFE0131961A +S11311E02D912193EC15FD05D9F76C5F7F4FF50127 +S11311F0EE0FFF1FEE0FFF1FE40FF51F09811A8189 +S11312002B813C810083118322833383FA0124855B +S113121035852F5F3F4F3587248795012F5F3F4FDB +S11312205901FC01E60FF71F2081213021F59B01B4 +S11312302F5F3F4FFC01E20FF31FE081EE2399F093 +S11312406E5F7F4FDC01A60FB71FF701B9016F5F17 +S11312507F4F2D91219330E08F010E191F09021742 +S11312601307ACF301C0B90129813A81FA01378728 +S11312702687118A108A6F5F7F4F9B016815790555 +S113128008F4A2CF02C0A12CB12CFA01B586A48621 +S1131290C05CDF4F0FB6F894DEBF0FBECDBFDF9149 +S11312A0CF911F910F91FF90EF90DF90CF90BF905F +S11312B0AF909F908F9008954F925F926F927F921C +S11312C08F929F92AF92BF92CF92DF92EF92FF9252 +S11312D00F931F93CF93DF93CDB7DEB7C255D109D8 +S11312E00FB6F894DEBF0FBECDBF22968FAE229705 +S11312F023969FAE23972496AFAE24972596BFAE30 +S113130025972696CFAE26972796DFAE2797289661 +S1131310EFAE28972996FFAE29972A960FAF2A9702 +S11313202B961FAF2B972C962FAF2C972D963FAF54 +S11313302D972E964FAF2E972F965FAF2F976096CF +S11313406FAF609761967FAF619762968FAF629738 +S113135063969FAF6397A7960EAD1FADA7972F9681 +S1131360CEACDFAC2F9763966EAD7FAD6397C1149F +S1131370D10409F466C07801CE018F5B9F4F5601FA +S1131380AA0CBB1CAA0CBB1CA80EB91EAE014B5F59 +S11313905F4FF7011192DC014D905D906D907D904F +S11313A0CD0149825A826B827C82DE0111963D9185 +S11313B03193A417B507D9F7B5E0EB0EF11C8A15E4 +S11313C09B0539F79601220F331F220F331F2C0D73 +S11313D03D1D6115710509F1D801A20FB31F81E00C +S11313E08C93D9011196A00FB11F2E5F3F4F6C93C0 +S11313F061968EAD9FAD61979A838983DE011196C4 +S1131400F801E20FF31F80E090E02F5F3F4F4D9112 +S11314104193019686179707C0F3A996EEADFFADE9 +S1131420A9973183208313C081E0F801808361830D +S113143061968EAD9FAD61979A83898322E030E0F7 +S1131440DDCF6115710581F720E030E0E6CFCE5A9B +S1131450DF4F0FB6F894DEBF0FBECDBFDF91CF9143 +S11314601F910F91FF90EF90DF90CF90BF90AF90BE +S11314709F908F907F906F905F904F900895FC01A4 +S113148081E090E030A121A1321711F080E090E0DA +S11314900895FC0121A130E02F5F3F4F2F71307878 +S11314A0332334F421503109206E3F6F2F5F3F4FB7 +S11314B0FC0140A150E081E090E02417350711F0D1 +S11314C080E090E008951F93CF93DF93EC01162FF3 +S11314D00E94490A892B81F489A190E0FE01E80F5A +S11314E0F91F108301968F719078992324F4019742 +S11314F0806E9F6F019689A3DF91CF911F9108950C +S1131500FC0120A181A12817B1F030E0DF01A20F76 +S1131510B31F4C9150E02F5F3F4F2F71307833232E +S113152034F421503109206E3F6F2F5F3F4F20A3C9 +S1131530842F952F08958FEF9FEF089588EF809360 +S1131540C10086E08093C2001092C50087E68093B4 +S1131550C40008950F931F93CF93DF936115710512 +S113156099F08C01EC01060F171F8EE693E00E94A0 +S1131570490A892B49F4699170E08EE693E00E9450 +S1131580630AC017D10789F7E1ECF0E08081806439 +S11315908083DF91CF911F910F9108958F929F9235 +S11315A0AF92BF92CF92DF92EF92FF920F931F936D +S11315B0CF93DF938B01EC01C12CD12C76014B012D +S11315C0A12CB12C0AC08CE493E00E94800A899378 +S11315D08FEFC81AD80AE80AF80A8CE493E00E944C +S11315E03F0A892B29F4C814D904EA04FB0458F3EC +S11315F020E030E00C151D052E053F0510F0C60156 +S113160002C08FEF9FEFDF91CF911F910F91FF9059 +S1131610EF90DF90CF90BF90AF909F908F90089500 +S11316201F920F920FB60F9211242F933F934F9353 +S11316305F936F937F938F939F93AF93BF93CF9356 +S1131640EF93FF93C091C6008CE493E00E94490A93 +S1131650892B31F46C2F70E08CE493E00E94630AD0 +S1131660FF91EF91CF91BF91AF919F918F917F9116 +S11316706F915F914F913F912F910F900FBE0F90FB +S11316801F9018951F920F920FB60F9211242F934B +S11316903F934F935F936F937F938F939F93AF93F6 +S11316A0BF93EF93FF938EE693E00E943F0A892B4A +S11316B039F48EE693E00E94800A8093C60005C048 +S11316C0E1ECF0E080818F7B8083FF91EF91BF910B +S11316D0AF919F918F917F916F915F914F913F91C6 +S11316E02F910F900FBE0F901F901895AA1BBB1B34 +S11316F051E107C0AA1FBB1FA617B70710F0A61B0E +S1131700B70B881F991F5A95A9F780959095BC012E +S1131710CD010895FB01DC014150504048F0019097 +S11317200D920020C9F701C01D9241505040E0F7CE +S11317300895A0E0B0E0EFE9FBE00C94800EAE0168 +S11317404B5F5F4FFA0161917191AF0180919203F8 +S1131750909193030E94DF0BE2E00C949C0EAEE0A8 +S1131760B0E0E5EBFBE00C947E0E0D891E898F89B9 +S1131770988D26E02C831A83098397FF02C080E0AA +S113178090E801979E838D83AE01455E5F4F698D1E +S11317907A8DCE0101960E94DF0B4D815E8157FD4B +S11317A00AC02F813885421753070CF49A01F801B7 +S11317B0E20FF31F10822E96E4E00C949A0EABE035 +S11317C0B0E0E5EEFBE00C94700E6C017B018A0145 +S11317D0FC0117821682838181FFCCC1CE01019660 +S11317E03C01F6019381F70193FD859193FF81916B +S11317F07F01882309F4BAC1853239F493FD8591B8 +S113180093FF81917F01853229F4B60190E00E9413 +S1131810D60DE7CF912C212C312CFFE1F315D8F014 +S11318208B3279F038F4803279F08332A1F4232DAD +S113183020611DC08D3261F0803369F4232D216055 +S113184016C0832D8260382EE32DE4603E2E2AC01C +S1131850F32DF8601DC037FC2DC020ED280F2A3071 +S113186040F08E32B9F436FC81C1232D2064322E2F +S113187019C036FE06C08AE0989E200D1124922ECF +S113188011C0EAE02E9E200D1124222EF32DF062C9 +S11318903F2E08C08C3621F4832D8068382E02C078 +S11318A0883641F4F70193FD859193FF81917F017F +S11318B08111B3CF982F9F7D9554933028F40C5FFA +S11318C01F4F9FE399830DC0833631F0833771F046 +S11318D0833509F059C021C0F801808189830E5FE6 +S11318E01F4F88248394912C530113C02801F2E0E4 +S11318F04F0E511CF801A080B18036FE03C0692D43 +S113190070E002C06FEF7FEFC5010E94CB0D4C0168 +S11319108201F32DFF773F2E16C0280122E0420EEC +S1131920511CF801A080B18036FE03C0692D70E01F +S113193002C06FEF7FEFC5010E94C00D4C01F32D73 +S1131940F0683F2E820133FC1BC0822D90E0881684 +S11319509906B0F4B60180E290E00E94D60D2A9474 +S1131960F4CFF50137FC859137FE81915F01B60113 +S113197090E00E94D60D21102A9421E0821A910849 +S11319808114910471F7E8C0843611F0893641F569 +S1131990F80137FE07C060817181828193810C5FF9 +S11319A01F4F08C060817181072E000C880B990BB2 +S11319B00E5F1F4FF32DFF763F2E97FF09C09095C2 +S11319C08095709561957F4F8F4F9F4FF0683F2EA4 +S11319D02AE030E0A3010E94120E882E861845C02A +S11319E0853731F4232D2F7EB22E2AE030E025C036 +S11319F0932D997FB92E8F36C1F018F4883579F07C +S1131A00B5C0803719F0883721F0B0C0E92FE06104 +S1131A10BE2EB4FE0DC0FB2DF460BF2E09C034FEF3 +S1131A200AC0292F2660B22E06C028E030E005C087 +S1131A3020E130E002C020E132E0F801B7FE07C047 +S1131A4060817181828193810C5F1F4F06C0608128 +S1131A50718180E090E00E5F1F4FA3010E94120E7F +S1131A60882E8618FB2DFF773F2E36FE0DC0232DC2 +S1131A702E7FA22E891458F434FE0BC032FC09C008 +S1131A80832D8E7EA82E05C0B82CA32C03C0B82CA1 +S1131A9001C0B92CA4FE0FC0FE01E80DF11D808128 +S1131AA0803321F49A2D997EA92E09C0A2FE06C086 +S1131AB0B394B39404C08A2D867809F0B394A3FC3C +S1131AC011C0A0FE06C0B21488F4280C922C9B18F6 +S1131AD00EC0B21460F4B60180E290E00E94D60D0C +S1131AE0B394F7CFB21418F42B1802C0982C212CFD +S1131AF0A4FE10C0B60180E390E00E94D60DA2FEC1 +S1131B0017C0A1FC03C088E790E002C088E590E01C +S1131B10B6010CC08A2D867859F0A1FE02C08BE272 +S1131B2001C080E2A7FC8DE2B60190E00E94D60DD0 +S1131B30891438F4B60180E390E00E94D60D9A949B +S1131B40F7CF8A94F301E80DF11D8081B60190E08E +S1131B500E94D60D8110F5CF222009F442CEB601A1 +S1131B6080E290E00E94D60D2A94F6CFF601868199 +S1131B70978102C08FEF9FEF2B96E2E10C948C0EBD +S1131B80FC010590615070400110D8F78095909544 +S1131B908E0F9F1F0895FC01615070400190011049 +S1131BA0D8F7809590958E0F9F1F08950F931F93DC +S1131BB0CF93DF93FB01238121FD03C08FEF9FEFC0 +S1131BC02CC022FF16C046815781248135814217DB +S1131BD0530744F4A081B1819D012F5F3F4F3183AE +S1131BE020838C93268137812F5F3F4F3783268351 +S1131BF014C08B01EC01FB010084F185E02D0995F3 +S1131C00892BE1F6D80116968D919C911797019630 +S1131C1017969C938E931697CE01DF91CF911F91C7 +S1131C200F910895FA01AA27283051F1203181F14A +S1131C30E8946F936E7F6E5F7F4F8F4F9F4FAF4FD0 +S1131C40B1E03ED0B4E03CD0670F781F891F9A1FE3 +S1131C50A11D680F791F8A1F911DA11D6A0F711D97 +S1131C60811D911DA11D20D009F468943F912AE0A3 +S1131C70269F11243019305D3193DEF6CF0108958B +S1131C80462F4770405D4193B3E00FD0C9F7F6CFBC +S1131C90462F4F70405D4A3318F0495D31FD405284 +S1131CA0419302D0A9F7EACFB4E0A695979587951A +S1131CB077956795BA95C9F70097610571050895F9 +S1131CC09B01AC010A2E06945795479537952795A5 +S1131CD0BA95C9F7620F731F841F951FA01D08953D +S1131CE02F923F924F925F926F927F928F929F9228 +S1131CF0AF92BF92CF92DF92EF92FF920F931F9316 +S1131D00CF93DF93CDB7DEB7CA1BDB0B0FB6F894C6 +S1131D10DEBF0FBECDBF09942A88398848885F8406 +S1131D206E847D848C849B84AA84B984C884DF8077 +S1131D30EE80FD800C811B81AA81B981CE0FD11D5B +S1131D400FB6F894DEBF0FBECDBFED010895F89431 +S1051D50FFCFBF +S1131D5265727220696E206765745F6672616D6573 +S1131D623A2025640A000000891112239B3224467A +S1131D72AD573665BF74488CC19D5AAFD3BE6CCA89 +S1131D82E5DB7EE9F7F88110080193331A22A556A0 +S1131D922C47B7753E64C99C408DDBBF52AEEDDA69 +S1131DA264CBFFF976E802218B301002991326677F +S1131DB2AF763444BD554AADC3BC588ED19F6EEB49 +S1131DC2E7FA7CC8F5D983310A2091121803A77760 +S1131DD22E66B5543C45CBBD42ACD99E508FEFFB29 +S1131DE266EAFDD874C904428D5316619F702004BB +S1131DF2A9153227BB364CCEC5DF5EEDD7FC688809 +S1131E02E1997AABF3BA85520C4397711E60A1141F +S1131E122805B3373A26CDDE44CFDFFD56ECE998E8 +S1131E226089FBBB72AA06638F7214409D512225FE +S1131E32AB343006B9174EEFC7FE5CCCD5DD6AA9C8 +S1131E42E3B8788AF19B87730E6295501C41A335DF +S1131E522A24B1163807CFFF46EEDDDC54CDEBB9A8 +S1131E6262A8F99A708B088481951AA793B62CC23A +S1131E72A5D33EE1B7F04008C919522BDB3A644EB0 +S1131E82ED5F766DFF7C899400859BB712A6ADD277 +S1131E9224C3BFF136E0C1184809D33B5A2AE55E90 +S1131EA26C4FF77D7E6C0AA583B4188691972EE356 +S1131EB2A7F23CC0B5D14229CB38500AD91B666F70 +S1131EC2EF7E744CFD5D8BB502A499961087AFF337 +S1131ED226E2BDD034C1C3394A28D11A580BE77F50 +S1131EE26E6EF55C7C4D0CC685D71EE597F4288092 +S1131EF2A1913AA3B3B2444ACD5B5669DF78600C30 +S1131F02E91D722FFB3E8DD604C79FF516E4A990F6 +S1131F122081BBB332A2C55A4C4BD7795E68E11C0F +S1131F22680DF33F7A2E0EE787F61CC495D52AA1D5 +S1131F32A3B03882B193466BCF7A5448DD59622DEF +S1131F42EB3C700EF91F8FF706E69DD414C5ABB1B6 +S1131F5222A0B9923083C77B4E6AD5585C49E33DCF +S1131F626A2CF11E780F252E32662E252E32662E0D +S1131F72252E326600776F72642077617220696E53 +S1131F82206E657720776F726C6420696F206578A4 +S1051F92000049 +S9030000FC diff --git a/hdlc_screen/Debug/main.d b/hdlc_screen/Debug/main.d new file mode 100644 index 0000000..90f9c28 --- /dev/null +++ b/hdlc_screen/Debug/main.d @@ -0,0 +1,45 @@ +main.d main.o: .././main.c .././hdlc/client.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h \ + .././hdlc/hdlc.h .././hdlc/fcs.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\errno.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + .././UART/uart.h .././LCD/lcd.h .././Protocol/protocol.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h + +.././hdlc/client.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h: + +.././hdlc/hdlc.h: + +.././hdlc/fcs.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\errno.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +.././UART/uart.h: + +.././LCD/lcd.h: + +.././Protocol/protocol.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: diff --git a/hdlc_screen/Debug/main.o b/hdlc_screen/Debug/main.o new file mode 100644 index 0000000..b64a833 Binary files /dev/null and b/hdlc_screen/Debug/main.o differ diff --git a/hdlc_screen/Debug/makedep.mk b/hdlc_screen/Debug/makedep.mk new file mode 100644 index 0000000..3b06a79 --- /dev/null +++ b/hdlc_screen/Debug/makedep.mk @@ -0,0 +1,26 @@ +################################################################################ +# Automatically-generated file. Do not edit or delete the file +################################################################################ + +hdlc\client.c + +hdlc\fcs.c + +hdlc\hdlc.c + +LCD\lcdpcf8574.c + +LCD\Lcd_print.c + +LCD\pcf8574.c + +LCD\twimaster.c + +main.c + +protocol\protocol.c + +UART\circular_buf.c + +UART\uart.c + diff --git a/hdlc_screen/Debug/protocol/protocol.d b/hdlc_screen/Debug/protocol/protocol.d new file mode 100644 index 0000000..492f731 --- /dev/null +++ b/hdlc_screen/Debug/protocol/protocol.d @@ -0,0 +1,28 @@ +protocol/protocol.d protocol/protocol.o: ../protocol/protocol.c \ + ../protocol/protocol.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h + +../protocol/protocol.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h: diff --git a/hdlc_screen/Debug/protocol/protocol.o b/hdlc_screen/Debug/protocol/protocol.o new file mode 100644 index 0000000..f5f9ecc Binary files /dev/null and b/hdlc_screen/Debug/protocol/protocol.o differ diff --git a/Lсd_print/Lcd_print.cpp b/hdlc_screen/LCD/Lcd_print.c similarity index 50% rename from Lсd_print/Lcd_print.cpp rename to hdlc_screen/LCD/Lcd_print.c index 3c59604..848976e 100644 --- a/Lсd_print/Lcd_print.cpp +++ b/hdlc_screen/LCD/Lcd_print.c @@ -1,31 +1,24 @@ -#include <stdlib.h> -#include <string.h> -#include <stdint.h> -#include <stdio.h> -#include <MyLCD.h> -#include <protocol.h> -#include <Arduino.h> -#include <cstddef> - -struct DisplayData { - char topLine[64]; - float value1; - float value2; - float value3; -}; +#include "lcd_headers.h" +#include "lcd.h" +//#include "time.h" +// #include <Arduino.h> +//#include <cstddef> struct TextCounter { unsigned long startTime; int incrementValue; }; -TextCounter textCounter; +struct TextCounter textCounter; + +//struct TextCounter textCounter; void Lcd_inciliation() { lcd_init(LCD_DISP_ON_BLINK); // инициализация дисплея lcd_home(); // домой курсор lcd_led(0); // вкл подсветки - textCounter.startTime = millis(); // Запоминаем время запуска программы + //textCounter.startTime = millis(); // Запоминаем время запуска программы + //Из за строчки выше все ломается } void fillBuffer1(const char* source, char* buffer, size_t bufferSize, int incrementValue) { @@ -42,30 +35,30 @@ void fillBuffer2(float value1, float value2, float value3, char* buffer, size_t snprintf(buffer, bufferSize, "%.2f.%.2f.%.2f", value1, value2, value3); } -void printLcd(struct message* decode_message) { - unsigned long currentTime = millis(); // Текущее время +void printLcd(struct DisplayData* displayData) { + //unsigned long currentTime = millis(); // Текущее время // Проверяем, прошло ли 500 мс с момента последнего увеличения incrementValue - if (currentTime - textCounter.startTime >= 500) { - textCounter.incrementValue++; // Увеличиваем incrementValue на 1 - textCounter.startTime = currentTime; // Обновляем время - } + //if (currentTime - textCounter.startTime >= 500) { + // textCounter.incrementValue++; // Увеличиваем incrementValue на 1 + // textCounter.startTime = currentTime; // Обновляем время + //} - struct DisplayData displayData; - strncpy(displayData.topLine, decode_message->str, sizeof(displayData.topLine) - 1); - displayData.topLine[sizeof(displayData.topLine) - 1] = '\0'; - displayData.value1 = decode_message->numbers[0]; - displayData.value2 = decode_message->numbers[1]; - displayData.value3 = decode_message->numbers[2]; + //struct DisplayData displayData; + //strncpy(displayData.topLine, decode_message->str, sizeof(displayData.topLine) - 1); + //displayData.topLine[sizeof(displayData.topLine) - 1] = '\0'; + //displayData.value1 = displayDataResp->value1; + //displayData.value2 = displayDataResp->value2; + //displayData.value3 = displayDataResp->value3; // Буферы для заполнения данных char buffer1[17]; char buffer2[17]; // Заполнение буфера 1 - fillBuffer1(displayData.topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); + fillBuffer1(displayData->topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); // Заполнение буфера 2 - fillBuffer2(displayData.value1, displayData.value2, displayData.value3, buffer2, sizeof(buffer2)); + fillBuffer2(displayData->value1, displayData->value2, displayData->value3, buffer2, sizeof(buffer2)); // Создание массива для вывода на дисплей char displayArray[32]; @@ -80,21 +73,21 @@ void printLcd(struct message* decode_message) { lcd_puts(displayArray + 16); // Вывод второй половины displayArray } -void dder() { - Lcd_inciliation(); - - uint8_t encode_message[100]; - size_t len_encode_message = 0; - struct message message; - - - // Получаем данные из протокола - protocol_encode(message, encode_message, &len_encode_message); - - // Декодируем данные из протокола - struct message decode_message; - protocol_decode(encode_message, len_encode_message, &decode_message); - - // Выводим данные на экран - printLcd(&decode_message); -} \ No newline at end of file +//void dder() { +// Lcd_inciliation(); +// +// uint8_t encode_message[100]; +// size_t len_encode_message = 0; +// struct message message; +// +// +// // Получаем данные из протокола +// protocol_encode(message, encode_message, &len_encode_message); +// +// // Декодируем данные из протокола +// struct message decode_message; +// protocol_decode(encode_message, len_encode_message, &decode_message); +// +// // Выводим данные на экран +// printLcd(&decode_message); +//} \ No newline at end of file diff --git a/MyLCD/i2cmaster.h b/hdlc_screen/LCD/i2cmaster.h similarity index 100% rename from MyLCD/i2cmaster.h rename to hdlc_screen/LCD/i2cmaster.h diff --git a/hdlc_screen/LCD/lcd.h b/hdlc_screen/LCD/lcd.h new file mode 100644 index 0000000..f3ca4bc --- /dev/null +++ b/hdlc_screen/LCD/lcd.h @@ -0,0 +1,14 @@ +#ifndef Lsd_print_h +#define Lsd_print_h + +struct DisplayData { + char topLine[64]; + float value1; + float value2; + float value3; +}; + +void Lcd_inciliation(); +void printLcd(struct DisplayData* displayData); + +#endif \ No newline at end of file diff --git a/main_sketch/MyLCD.h b/hdlc_screen/LCD/lcd_headers.h similarity index 66% rename from main_sketch/MyLCD.h rename to hdlc_screen/LCD/lcd_headers.h index f9d17f9..d4d9291 100644 --- a/main_sketch/MyLCD.h +++ b/hdlc_screen/LCD/lcd_headers.h @@ -1,9 +1,14 @@ - -#ifndef MYLCD_H_ -#define MYLCD_H_ +/* + * lcd_headers.h + * + * Created: 22.02.2024 15:16:19 + * Author: 79513 + */ -// ���������� ��� ���� +#ifndef LCD_HEADERS_H_ +#define LCD_HEADERS_H_ + #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> @@ -18,5 +23,4 @@ #include "pcf8574.h" #include "i2cmaster.h" - -#endif \ No newline at end of file +#endif /* LCD_HEADERS_H_ */ \ No newline at end of file diff --git a/main_sketch/lcdpcf8574.cpp b/hdlc_screen/LCD/lcdpcf8574.c similarity index 99% rename from main_sketch/lcdpcf8574.cpp rename to hdlc_screen/LCD/lcdpcf8574.c index c5808d5..24d09ff 100644 --- a/main_sketch/lcdpcf8574.cpp +++ b/hdlc_screen/LCD/lcdpcf8574.c @@ -1,4 +1,4 @@ -#include "MyLCD.h" +#include "lcd_headers.h" // задержеки через асемблер #define lcd_e_delay() __asm__ __volatile__( "rjmp 1f\n 1:" ); diff --git a/MyLCD/lcdpcf8574.h b/hdlc_screen/LCD/lcdpcf8574.h similarity index 100% rename from MyLCD/lcdpcf8574.h rename to hdlc_screen/LCD/lcdpcf8574.h diff --git a/main_sketch/pcf8574.cpp b/hdlc_screen/LCD/pcf8574.c similarity index 99% rename from main_sketch/pcf8574.cpp rename to hdlc_screen/LCD/pcf8574.c index e93f3d8..de5ebf6 100644 --- a/main_sketch/pcf8574.cpp +++ b/hdlc_screen/LCD/pcf8574.c @@ -1,4 +1,4 @@ -#include "MyLCD.h" +#include "lcd_headers.h" uint8_t pcf8574_pinstatus[PCF8574_MAXDEVICES]; // инициализация pcf diff --git a/MyLCD/pcf8574.h b/hdlc_screen/LCD/pcf8574.h similarity index 100% rename from MyLCD/pcf8574.h rename to hdlc_screen/LCD/pcf8574.h diff --git a/main_sketch/twimaster.cpp b/hdlc_screen/LCD/twimaster.c similarity index 99% rename from main_sketch/twimaster.cpp rename to hdlc_screen/LCD/twimaster.c index 2fad0d7..6019a42 100644 --- a/main_sketch/twimaster.cpp +++ b/hdlc_screen/LCD/twimaster.c @@ -1,4 +1,4 @@ -#include "MyLCD.h" +#include "lcd_headers.h" // инициализация интерфейса i2c void i2c_init(void) diff --git a/hdlc_screen/Readme.md b/hdlc_screen/Readme.md new file mode 100644 index 0000000..e63e9d8 --- /dev/null +++ b/hdlc_screen/Readme.md @@ -0,0 +1,15 @@ +# Устройство с дисплеем на AVR +* Команда: Лежнин Роман, Куршаков Кирилл, Деркачев Андрей, Чертков Максим + +Лежнин Роман +* Главный в группе +* Внедрение протокола HDLC и разработка протокола + +Куршаков Кирилл +* Внедрение протокола UART + +Чертков Максим +* Отрисовка данных на дисплей + +Деркачев Андрей +* Соединения и рефактор блоков UART, HDLC и вывода \ No newline at end of file diff --git a/UART/circular_buf.c b/hdlc_screen/UART/circular_buf.c similarity index 100% rename from UART/circular_buf.c rename to hdlc_screen/UART/circular_buf.c diff --git a/UART/circular_buf.h b/hdlc_screen/UART/circular_buf.h similarity index 100% rename from UART/circular_buf.h rename to hdlc_screen/UART/circular_buf.h diff --git a/hdlc/client.c b/hdlc_screen/hdlc/client.c similarity index 100% rename from hdlc/client.c rename to hdlc_screen/hdlc/client.c diff --git a/hdlc/client.h b/hdlc_screen/hdlc/client.h similarity index 100% rename from hdlc/client.h rename to hdlc_screen/hdlc/client.h diff --git a/hdlc/fcs.c b/hdlc_screen/hdlc/fcs.c similarity index 100% rename from hdlc/fcs.c rename to hdlc_screen/hdlc/fcs.c diff --git a/hdlc/fcs.h b/hdlc_screen/hdlc/fcs.h similarity index 100% rename from hdlc/fcs.h rename to hdlc_screen/hdlc/fcs.h diff --git a/hdlc/hdlc.c b/hdlc_screen/hdlc/hdlc.c similarity index 100% rename from hdlc/hdlc.c rename to hdlc_screen/hdlc/hdlc.c diff --git a/hdlc/hdlc.h b/hdlc_screen/hdlc/hdlc.h similarity index 98% rename from hdlc/hdlc.h rename to hdlc_screen/hdlc/hdlc.h index 12ddaa1..2798da9 100644 --- a/hdlc/hdlc.h +++ b/hdlc_screen/hdlc/hdlc.h @@ -7,7 +7,8 @@ #include "fcs.h" #include <errno.h> -#include "stdint.h" +#include <stdint.h> +#include <stddef.h> /** HDLC start/end flag sequence */ #define HDLC_FLAG_SEQUENCE 0x7E diff --git a/hdlc_screen/hdlc_screen.componentinfo.xml b/hdlc_screen/hdlc_screen.componentinfo.xml new file mode 100644 index 0000000..7473b85 --- /dev/null +++ b/hdlc_screen/hdlc_screen.componentinfo.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<Store xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="AtmelPackComponentManagement"> + <ProjectComponents> + <ProjectComponent z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> + <CApiVersion></CApiVersion> + <CBundle></CBundle> + <CClass>Device</CClass> + <CGroup>Startup</CGroup> + <CSub></CSub> + <CVariant></CVariant> + <CVendor>Atmel</CVendor> + <CVersion>1.2.0</CVersion> + <DefaultRepoPath>D:/atmelstudio\7.0\Packs</DefaultRepoPath> + <DependentComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" /> + <Description></Description> + <Files xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> + <d4p1:anyType i:type="FileInfo"> + <AbsolutePath>D:/atmelstudio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include</AbsolutePath> + <Attribute></Attribute> + <Category>include</Category> + <Condition>C</Condition> + <FileContentHash i:nil="true" /> + <FileVersion></FileVersion> + <Name>include</Name> + <SelectString></SelectString> + <SourcePath></SourcePath> + </d4p1:anyType> + <d4p1:anyType i:type="FileInfo"> + <AbsolutePath>D:/atmelstudio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include\avr\iom328p.h</AbsolutePath> + <Attribute></Attribute> + <Category>header</Category> + <Condition>C</Condition> + <FileContentHash>UMk4QUzkkuShabuoYtNl/Q==</FileContentHash> + <FileVersion></FileVersion> + <Name>include/avr/iom328p.h</Name> + <SelectString></SelectString> + <SourcePath></SourcePath> + </d4p1:anyType> + <d4p1:anyType i:type="FileInfo"> + <AbsolutePath>D:/atmelstudio\7.0\Packs\atmel\ATmega_DFP\1.2.209\templates\main.c</AbsolutePath> + <Attribute>template</Attribute> + <Category>source</Category> + <Condition>C Exe</Condition> + <FileContentHash>7MqOviI+fX8DsJg4frGlyg==</FileContentHash> + <FileVersion></FileVersion> + <Name>templates/main.c</Name> + <SelectString>Main file (.c)</SelectString> + <SourcePath></SourcePath> + </d4p1:anyType> + <d4p1:anyType i:type="FileInfo"> + <AbsolutePath>D:/atmelstudio\7.0\Packs\atmel\ATmega_DFP\1.2.209\templates\main.cpp</AbsolutePath> + <Attribute>template</Attribute> + <Category>source</Category> + <Condition>C Exe</Condition> + <FileContentHash>YXFphlh0CtZJU+ebktABgQ==</FileContentHash> + <FileVersion></FileVersion> + <Name>templates/main.cpp</Name> + <SelectString>Main file (.cpp)</SelectString> + <SourcePath></SourcePath> + </d4p1:anyType> + <d4p1:anyType i:type="FileInfo"> + <AbsolutePath>D:/atmelstudio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p</AbsolutePath> + <Attribute></Attribute> + <Category>libraryPrefix</Category> + <Condition>GCC</Condition> + <FileContentHash i:nil="true" /> + <FileVersion></FileVersion> + <Name>gcc/dev/atmega328p</Name> + <SelectString></SelectString> + <SourcePath></SourcePath> + </d4p1:anyType> + </Files> + <PackName>ATmega_DFP</PackName> + <PackPath>D:/atmelstudio/7.0/Packs/atmel/ATmega_DFP/1.2.209/Atmel.ATmega_DFP.pdsc</PackPath> + <PackVersion>1.2.209</PackVersion> + <PresentInProject>true</PresentInProject> + <ReferenceConditionId>ATmega328P</ReferenceConditionId> + <RteComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> + <d4p1:string></d4p1:string> + </RteComponents> + <Status>Resolved</Status> + <VersionMode>Fixed</VersionMode> + <IsComponentInAtProject>true</IsComponentInAtProject> + </ProjectComponent> + </ProjectComponents> +</Store> \ No newline at end of file diff --git a/hdlc_screen/hdlc_screen.cproj b/hdlc_screen/hdlc_screen.cproj new file mode 100644 index 0000000..541f3ef --- /dev/null +++ b/hdlc_screen/hdlc_screen.cproj @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0"> + <PropertyGroup> + <SchemaVersion>2.0</SchemaVersion> + <ProjectVersion>7.0</ProjectVersion> + <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName> + <ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid> + <avrdevice>ATmega328P</avrdevice> + <avrdeviceseries>none</avrdeviceseries> + <OutputType>Executable</OutputType> + <Language>C</Language> + <OutputFileName>$(MSBuildProjectName)</OutputFileName> + <OutputFileExtension>.elf</OutputFileExtension> + <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory> + <AssemblyName>hdlc_screen</AssemblyName> + <Name>hdlc_screen</Name> + <RootNamespace>hdlc_screen</RootNamespace> + <ToolchainFlavour>Native</ToolchainFlavour> + <KeepTimersRunning>true</KeepTimersRunning> + <OverrideVtor>false</OverrideVtor> + <CacheFlash>true</CacheFlash> + <ProgFlashFromRam>true</ProgFlashFromRam> + <RamSnippetAddress>0x20000000</RamSnippetAddress> + <UncachedRange /> + <preserveEEPROM>true</preserveEEPROM> + <OverrideVtorValue>exception_table</OverrideVtorValue> + <BootSegment>2</BootSegment> + <ResetRule>0</ResetRule> + <eraseonlaunchrule>0</eraseonlaunchrule> + <EraseKey /> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> + <ToolchainSettings> + <AvrGcc> + <avrgcc.common.Device>-mmcu=atmega328p -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p"</avrgcc.common.Device> + <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex> + <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss> + <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep> + <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec> + <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures> + <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned> + <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned> + <avrgcc.compiler.symbols.DefSymbols> + <ListValues> + <Value>NDEBUG</Value> + </ListValues> + </avrgcc.compiler.symbols.DefSymbols> + <avrgcc.compiler.directories.IncludePaths> + <ListValues> + <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value> + </ListValues> + </avrgcc.compiler.directories.IncludePaths> + <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level> + <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers> + <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum> + <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings> + <avrgcc.linker.libraries.Libraries> + <ListValues> + <Value>libm</Value> + </ListValues> + </avrgcc.linker.libraries.Libraries> + <avrgcc.assembler.general.IncludePaths> + <ListValues> + <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value> + </ListValues> + </avrgcc.assembler.general.IncludePaths> + </AvrGcc> + </ToolchainSettings> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> + <ToolchainSettings> + <AvrGcc> + <avrgcc.common.Device>-mmcu=atmega328p -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p"</avrgcc.common.Device> + <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex> + <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss> + <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep> + <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec> + <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures> + <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned> + <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned> + <avrgcc.compiler.symbols.DefSymbols> + <ListValues> + <Value>DEBUG</Value> + </ListValues> + </avrgcc.compiler.symbols.DefSymbols> + <avrgcc.compiler.directories.IncludePaths> + <ListValues> + <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value> + </ListValues> + </avrgcc.compiler.directories.IncludePaths> + <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level> + <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers> + <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum> + <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel> + <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings> + <avrgcc.linker.libraries.Libraries> + <ListValues> + <Value>libm</Value> + </ListValues> + </avrgcc.linker.libraries.Libraries> + <avrgcc.assembler.general.IncludePaths> + <ListValues> + <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value> + </ListValues> + </avrgcc.assembler.general.IncludePaths> + <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel> + </AvrGcc> + </ToolchainSettings> + </PropertyGroup> + <ItemGroup> + <Compile Include="hdlc\client.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="hdlc\client.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="hdlc\fcs.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="hdlc\fcs.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="hdlc\hdlc.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="hdlc\hdlc.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\i2cmaster.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\lcd.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\lcdpcf8574.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\lcdpcf8574.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\lcd_headers.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\Lcd_print.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\pcf8574.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\pcf8574.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="LCD\twimaster.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="main.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="protocol\protocol.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="protocol\protocol.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="UART\circular_buf.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="UART\circular_buf.h"> + <SubType>compile</SubType> + </Compile> + <Compile Include="UART\uart.c"> + <SubType>compile</SubType> + </Compile> + <Compile Include="UART\uart.h"> + <SubType>compile</SubType> + </Compile> + </ItemGroup> + <ItemGroup> + <Folder Include="hdlc" /> + <Folder Include="LCD" /> + <Folder Include="UART" /> + <Folder Include="protocol" /> + </ItemGroup> + <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" /> +</Project> \ No newline at end of file diff --git a/MyLCD/keywords.txt b/hdlc_screen/keywords.txt similarity index 100% rename from MyLCD/keywords.txt rename to hdlc_screen/keywords.txt diff --git a/main.c b/hdlc_screen/main.c similarity index 90% rename from main.c rename to hdlc_screen/main.c index 9c9bf50..ccebf62 100644 --- a/main.c +++ b/hdlc_screen/main.c @@ -1,12 +1,10 @@ -//#include "Lсd_print/lcd.h" #include "hdlc/client.h" #include "UART/uart.h" #include "stdbool.h" -//#include "stdio.h" -#include "Lсd_print/lcd.h" -//#include "protocol.h" +#include "LCD/lcd.h" +#include "Protocol/protocol.h" -int main() { +int main(void) { struct Client hdlc; bool flag_connection = false; @@ -103,8 +101,15 @@ int main() { struct message resp; protocol_decode(data_recive, len_data_recive, &resp); + + struct DisplayData disp; + disp.value1 = resp.numbers[0]; + disp.value2 = resp.numbers[1]; + disp.value3 = resp.numbers[2]; + //disp.topLine = *resp.str; + strncpy(disp.topLine, resp.str, sizeof(disp.topLine) - 1); - printLcd(&resp); + printLcd(&disp); return 0; } \ No newline at end of file diff --git a/main_sketch/protocol.c b/hdlc_screen/protocol/protocol.c similarity index 100% rename from main_sketch/protocol.c rename to hdlc_screen/protocol/protocol.c diff --git a/main_sketch/protocol.h b/hdlc_screen/protocol/protocol.h similarity index 100% rename from main_sketch/protocol.h rename to hdlc_screen/protocol/protocol.h diff --git a/main_sketch/Lcd_print.cpp b/main_sketch/Lcd_print.cpp deleted file mode 100644 index bae875b..0000000 --- a/main_sketch/Lcd_print.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include <stdlib.h> -#include <string.h> -#include <stdint.h> -#include <stdio.h> -#include "MyLCD.h" -#include "protocol.h" -#include <Arduino.h> - -struct DisplayData { - char topLine[64]; - float value1; - float value2; - float value3; -}; - -struct TextCounter { - unsigned long startTime; - int incrementValue; -}; - -TextCounter textCounter; - -void Lcd_inciliation() { - lcd_init(LCD_DISP_ON_BLINK); // инициализация дисплея - lcd_home(); // домой курсор - lcd_led(0); // вкл подсветки - textCounter.startTime = millis(); // Запоминаем время запуска программы -} - -void fillBuffer1(const char* source, char* buffer, size_t bufferSize, int incrementValue) { - int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue - int endIndex = startIndex + 16; - - for (int i = 0; i < 16; ++i) { - buffer[i] = source[(startIndex + i) % strlen(source)]; - } - buffer[16] = '\0'; // Установка нулевого символа в конце буфера -} - -void fillBuffer2(float value1, float value2, float value3, char* buffer, size_t bufferSize) { - snprintf(buffer, bufferSize, "%.2f.%.2f.%.2f", value1, value2, value3); -} - -void printLcd(struct message* decode_message) { - unsigned long currentTime = millis(); // Текущее время - // Проверяем, прошло ли 500 мс с момента последнего увеличения incrementValue - if (currentTime - textCounter.startTime >= 500) { - textCounter.incrementValue++; // Увеличиваем incrementValue на 1 - textCounter.startTime = currentTime; // Обновляем время - } - - struct DisplayData displayData; - strncpy(displayData.topLine, decode_message->str, sizeof(displayData.topLine) - 1); - displayData.topLine[sizeof(displayData.topLine) - 1] = '\0'; - displayData.value1 = decode_message->numbers[0]; - displayData.value2 = decode_message->numbers[1]; - displayData.value3 = decode_message->numbers[2]; - - // Буферы для заполнения данных - char buffer1[17]; - char buffer2[17]; - - // Заполнение буфера 1 - fillBuffer1(displayData.topLine, buffer1, sizeof(buffer1), textCounter.incrementValue); - - // Заполнение буфера 2 - fillBuffer2(displayData.value1, displayData.value2, displayData.value3, buffer2, sizeof(buffer2)); - - // Создание массива для вывода на дисплей - char displayArray[32]; - strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray - strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16 - - // Вывод данных на экран - lcd_gotoxy(0, 0); - lcd_puts(displayArray); - - lcd_gotoxy(0, 1); - lcd_puts(displayArray + 16); // Вывод второй половины displayArray -} - -void dder() { - Lcd_inciliation(); - - uint8_t encode_message[100]; - size_t len_encode_message = 0; - struct message message; - - - // Получаем данные из протокола - protocol_encode(message, encode_message, &len_encode_message); - - // Декодируем данные из протокола - struct message decode_message; - protocol_decode(encode_message, len_encode_message, &decode_message); - - // Выводим данные на экран - printLcd(&decode_message); -} \ No newline at end of file diff --git a/main_sketch/circular_buf.c b/main_sketch/circular_buf.c deleted file mode 100644 index e1b91c7..0000000 --- a/main_sketch/circular_buf.c +++ /dev/null @@ -1,36 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include "circular_buf.h" - - -void initialize_buffer(struct circular_buffer* cb) { - cb->buf_head = 0; - cb->buf_tail = 0; -} -// Проверка, пустой ли буфер -int buffer_empty(const struct circular_buffer* cb) { - return cb->buf_head == cb->buf_tail; -} -// Проверка, заполнен ли буфер -int buffer_full(const struct circular_buffer* cb) { - return (cb->buf_tail + 1) % BUFFER_SIZE == cb->buf_head; //проверяем следующее число, если оно будет совпадать с индексом головы то будет false, при совпадении вывод true -} -// Запись в буфер -void write_buffer(struct circular_buffer* cb, int value) { - if (buffer_full(cb)) { // проверяем, заполнен ли буфер - return; - } - cb->buffer[cb->buf_tail] = value;// записываем значение в элемент массива в хвост - cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;// присваивается cb->buf_tail, обновляется его значение на следующий индекс в буфере -} -// Чтение элемента -int read_buffer(struct circular_buffer* cb) { - if (buffer_empty(cb)) { // проверка на пустоту - return -1;// -1 как индикатор в случае ошибки - } - int value = cb->buffer[cb->buf_head]; // чтение по индексу головы - cb->buf_head = (cb->buf_head + 1) % BUFFER_SIZE; // увеличиваем индекс на 1 - return value; -} - - diff --git a/main_sketch/circular_buf.h b/main_sketch/circular_buf.h deleted file mode 100644 index 22dc139..0000000 --- a/main_sketch/circular_buf.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef CIRCULAR_BUFFER_H -#define CIRCULAR_BUFFER_H - -#define BUFFER_SIZE 32 - -struct circular_buffer{ - unsigned char buffer[BUFFER_SIZE]; - unsigned char buf_head; - unsigned char buf_tail; -}; - -void initialize_buffer(struct circular_buffer* cb); -int buffer_empty(const struct circular_buffer* cb); -int buffer_full(const struct circular_buffer* cb); -void write_buffer(struct circular_buffer* cb, int value); -int read_buffer(struct circular_buffer* cb); - -#endif /* CIRCULAR_BUFFER_H */ diff --git a/main_sketch/client.c b/main_sketch/client.c deleted file mode 100644 index b2b7318..0000000 --- a/main_sketch/client.c +++ /dev/null @@ -1,129 +0,0 @@ -#include "client.h" -#include "hdlc.h" -#include "stdio.h" - -#define SIZE_DATA_BUFFERS 64 - -int connecting_frame_timeout_bf; - -void init_hdlc_client(struct Client* client, int connecting_frame_timeout){ - client->state = IDLE_STATE; - client->connecting_frame_timeout = connecting_frame_timeout; - connecting_frame_timeout_bf = connecting_frame_timeout; - client->current_index_frame = 20; - - client->current_state_hdlc.control_escape = 0; - client->current_state_hdlc.fcs = FCS_INIT_VALUE; - client->current_state_hdlc.start_index = -1; - client->current_state_hdlc.end_index = -1; - client->current_state_hdlc.src_index = 0; - client->current_state_hdlc.dest_index = 0; -} - -void hdlc_connect(struct Client* client){ - client->state = CONNECTING; - - client->frameS.seq_no = 0; - client->frameS.frame = S_FRAME; - client->current_index_frame = client->frameS.seq_no; -} - -int hdlc_send_data(struct Client* client, uint8_t data[], size_t data_len){ - if (client->state != READY_STATE){ - return ERR_INVALID_STATE; - } - - client->state = RECIVING; - - if (SIZE_DATA_BUFFERS < data_len){ - return ERR_INVALID_DATA_SIZE; - } - - client->frameI.seq_no = 0; - client->frameI.frame = I_FRAME; - client->data_i_frame = data; - client->len_data_i_frame = data_len; - client->current_index_frame = client->frameI.seq_no; - - client->state = RECIVING; - return 0; -} - -int hdlc_get_raw_frame(struct Client *client, uint8_t* buffer, size_t lenBuffer) { - if(client->state == RECIVING){ - int ret = hdlc_frame_data(&client->frameI, client->data_i_frame, - client->len_data_i_frame, buffer, &lenBuffer); - if (ret < 0){ - printf("err in get_frame: %d\n", ret); - } - } - - if (client->state == CONNECTING){ - int ret = hdlc_frame_data(&client->frameS, NULL, 0, buffer, &lenBuffer); - - if (ret < 0){ - printf("err in get_frame: %d\n", ret); - } - } - - if (client->state == DISCONNECTING){ - int ret = hdlc_frame_data(&client->frame_rej, NULL, 0, buffer, &lenBuffer); - - if (ret < 0){ - printf("err in get_frame: %d\n", ret); - } - } - - return 0; -} - -int hdlc_decode_recived_raw_data(struct Client* client, uint8_t* buffer, size_t len_buffer, uint8_t* recived_data, size_t* len_recived_data){ - hdlc_control_t recv_control; - uint8_t recive[len_buffer]; - - int ret = hdlc_get_data_with_state(&client->current_state_hdlc,&recv_control, buffer, len_buffer, recive, - &len_buffer); - - if (ret < 0) { - return ret; - } - - if (recv_control.seq_no != client->current_index_frame){ - client->state = DISCONNECTING; - client->frame_rej.seq_no = 0; - client->frame_rej.frame = S_FRAME_NACK; - return ERR_INVALID_SEQ_NUMBER_FRAME; - } - - switch (recv_control.frame) { - case S_FRAME: - client->state = READY_STATE; - break; - case I_FRAME: - for (int i = 0; i < sizeof(recive)-2; i++){ - recived_data[i] = recive[i]; - } - - *len_recived_data = sizeof(recive)-2; - - client->state = SEND; - break; - case S_FRAME_NACK: - client->state = DISCONNECTING; - client->frame_rej.seq_no = 0; - client->frame_rej.frame = S_FRAME_NACK; - return ERR_INVALID_SEQ_NUMBER_FRAME; - } - - client->connecting_frame_timeout = connecting_frame_timeout_bf; - return 0; -} - -int hdlc_timeout_handler(struct Client* client, int delta_time){ - client->connecting_frame_timeout -= delta_time; - - if (client->connecting_frame_timeout <= 0){ - return ERR_FRAME_TIME_OUT; - } - return 0; -} \ No newline at end of file diff --git a/main_sketch/client.h b/main_sketch/client.h deleted file mode 100644 index 8702fa1..0000000 --- a/main_sketch/client.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef CLIENT_H -#define CLIENT_H - -#include <stdint.h> -#include <stdbool.h> -#include "hdlc.h" - -#define ERR_INVALID_DATA_SIZE -1 -#define ERR_ALL_BUFFERS_FILL -2 -#define ERR_INVALID_PARAMS -3 -#define ERR_INVALID_STATE -4 -#define ERR_FRAME_TIME_OUT -5 -#define ERR_INVALID_SEQ_NUMBER_FRAME -6 -#define ERR_TIMEOUT_ANSWER -7 - -enum HDLCState { - UNINITIALIZED_STATE = 0, // состояние до инцилизации - IDLE_STATE, // Состояние ожидания начала - READY_STATE, // Состояние принятия - CONNECTING, // состояние соединения - DISCONNECTING, // состояния отключения - RECIVING, // состояние приема и отправки - SEND, //данные отправлены -}; - -struct Client{ - enum HDLCState state; - int connecting_frame_timeout; //-1 - uint8_t current_index_frame; - hdlc_state_t current_state_hdlc; - hdlc_control_t frameS; - hdlc_control_t frameI; - uint8_t* data_i_frame; - size_t len_data_i_frame; -// hdlc_control_t frame3; -// hdlc_control_t frame4; - hdlc_control_t frame_rej; -}; - -//название функций -void init_hdlc_client(struct Client* client, int connecting_frame_timeout); -void hdlc_connect(struct Client* client); -int hdlc_send_data(struct Client* client, uint8_t data[], size_t data_len); -int hdlc_get_raw_frame(struct Client *client, uint8_t* buffer, size_t lenBuffer); -//принимает буффер с уарта -int hdlc_decode_recived_raw_data(struct Client* client, uint8_t* buffer, size_t len_buffer, uint8_t* recived_data, size_t* len_recived_data); -int hdlc_timeout_handler(struct Client* client, int delta_time); - -#endif //CLIENT_H diff --git a/main_sketch/fcs.c b/main_sketch/fcs.c deleted file mode 100644 index 6e29cf8..0000000 --- a/main_sketch/fcs.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "fcs.h" - -/* - * CRC-Type: CRC16 CCIT - * Polynomial: 0x1021 (x^16+x^12+x^5+1) - * Lookup Table: Reflected - */ -static const unsigned short fcstab[256] = { - 0x0000, 0x1189, 0x2312, 0x329b, - 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, - 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, - 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, - 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, - 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, - 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, - 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, - 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, - 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, - 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, - 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, - 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, - 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, - 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, - 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, - 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, - 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, - 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, - 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, - 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, - 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, - 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, - 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, - 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, - 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, - 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, - 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, - 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; - -FCS_SIZE calc_fcs(FCS_SIZE fcs, unsigned char value) { - return (fcs >> 8) ^ fcstab[(fcs ^ value) & 0xff]; -} \ No newline at end of file diff --git a/main_sketch/fcs.h b/main_sketch/fcs.h deleted file mode 100644 index 6673d40..0000000 --- a/main_sketch/fcs.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FCS_H -#define FCS_H - -#define FCS_INIT_VALUE 0xFFFF /* FCS initialization value. */ -#define FCS_GOOD_VALUE 0xF0B8 /* FCS value for valid frames. */ -#define FCS_INVERT_MASK 0xFFFF /* Invert the FCS value accordingly to the specification */ -#define FCS_SIZE unsigned short - -/** - * Calculates a new FCS based on the current value and value of data. - * - * @param fcs Current FCS value - * @param value The value to be added - * @returns Calculated FCS value - */ -FCS_SIZE calc_fcs(FCS_SIZE fcs, unsigned char value); - -#endif \ No newline at end of file diff --git a/main_sketch/hdlc.c b/main_sketch/hdlc.c deleted file mode 100644 index a5792e5..0000000 --- a/main_sketch/hdlc.c +++ /dev/null @@ -1,262 +0,0 @@ -#include "hdlc.h" - -// HDLC Control field bit positions -#define HDLC_CONTROL_S_OR_U_FRAME_BIT 0 -#define HDLC_CONTROL_SEND_SEQ_NO_BIT 1 -#define HDLC_CONTROL_S_FRAME_TYPE_BIT 2 -#define HDLC_CONTROL_POLL_BIT 4 -#define HDLC_CONTROL_RECV_SEQ_NO_BIT 5 - -// HDLC Control type definitions -#define HDLC_CONTROL_TYPE_RECEIVE_READY 0 -#define HDLC_CONTROL_TYPE_RECEIVE_NOT_READY 1 -#define HDLC_CONTROL_TYPE_REJECT 2 -#define HDLC_CONTROL_TYPE_SELECTIVE_REJECT 3 - -static hdlc_state_t hdlc_state = { - .control_escape = 0, - .fcs = FCS_INIT_VALUE, - .start_index = -1, - .end_index = -1, - .src_index = 0, - .dest_index = 0, -}; - -int hdlc_set_state(hdlc_state_t *state) { - if (!state) { - return -EINVAL; - } - - hdlc_state = *state; - return 0; -} - - -int hdlc_get_state(hdlc_state_t *state) { - if (!state) { - return -EINVAL; - } - - *state = hdlc_state; - return 0; -} - -void hdlc_escape_value(char value, char *dest, int *dest_index) { - // Check and escape the value if needed - if ((value == HDLC_FLAG_SEQUENCE) || (value == HDLC_CONTROL_ESCAPE)) { - dest[(*dest_index)++] = HDLC_CONTROL_ESCAPE; - value ^= 0x20; - } - - // Add the value to the destination buffer and increment destination index - dest[(*dest_index)++] = value; -} - -hdlc_control_t hdlc_get_control_type(unsigned char control) { - hdlc_control_t value; - - // Check if the frame is a S-frame (or U-frame) - if (control & (1 << HDLC_CONTROL_S_OR_U_FRAME_BIT)) { - // Check if S-frame type is a Receive Ready (ACK) - if (((control >> HDLC_CONTROL_S_FRAME_TYPE_BIT) & 0x3) - == HDLC_CONTROL_TYPE_RECEIVE_READY) { - value.frame = S_FRAME; - } else { - // Assume it is an NACK since Receive Not Ready, Selective Reject and U-frames are not supported - value.frame = S_FRAME_NACK; - } - - // Add the receive sequence number from the S-frame (or U-frame) - value.seq_no = (control >> HDLC_CONTROL_RECV_SEQ_NO_BIT); - } else { - // It must be an I-frame so add the send sequence number (receive sequence number is not used) - value.frame = I_FRAME; - value.seq_no = (control >> HDLC_CONTROL_SEND_SEQ_NO_BIT); - } - - return value; -} - -unsigned char hdlc_frame_control_type(hdlc_control_t *control) { - unsigned char value = 0; - - switch (control->frame) { - case I_FRAME: - // Create the HDLC I-frame control byte with Poll bit set - value |= (control->seq_no << HDLC_CONTROL_SEND_SEQ_NO_BIT); - value |= (1 << HDLC_CONTROL_POLL_BIT); - break; - case S_FRAME: - // Create the HDLC Receive Ready S-frame control byte with Poll bit cleared - value |= (control->seq_no << HDLC_CONTROL_RECV_SEQ_NO_BIT); - value |= (1 << HDLC_CONTROL_S_OR_U_FRAME_BIT); - break; - case S_FRAME_NACK: - // Create the HDLC Receive Ready S-frame control byte with Poll bit cleared - value |= (control->seq_no << HDLC_CONTROL_RECV_SEQ_NO_BIT); - value |= (HDLC_CONTROL_TYPE_REJECT << HDLC_CONTROL_S_FRAME_TYPE_BIT); - value |= (1 << HDLC_CONTROL_S_OR_U_FRAME_BIT); - break; - } - - return value; -} - -void hdlc_get_data_reset() { - hdlc_get_data_reset_with_state(&hdlc_state); -} - -void hdlc_get_data_reset_with_state(hdlc_state_t *state) { - state->fcs = FCS_INIT_VALUE; - state->start_index = state->end_index = -1; - state->src_index = state->dest_index = 0; - state->control_escape = 0; -} - -//int hdlc_get_data(hdlc_control_t *control, const char *src, -// unsigned int src_len, char *dest, unsigned int *dest_len) -int hdlc_get_data(hdlc_control_t *control, uint8_t *src, - size_t src_len, uint8_t *dest, size_t *dest_len){ - return hdlc_get_data_with_state(&hdlc_state, control, src, src_len, dest, dest_len); -} - -//int hdlc_get_data_with_state(hdlc_state_t *state, hdlc_control_t *control, const char *src, -// unsigned int src_len, char *dest, unsigned int *dest_len) -int -hdlc_get_data_with_state(hdlc_state_t *state, hdlc_control_t *control, uint8_t *src, - size_t src_len, uint8_t *dest, size_t *dest_len){ - int ret; - char value; - unsigned int i; - - // Make sure that all parameters are valid - if (!state || !control || !src || !dest || !dest_len) { - return -EINVAL; - } - - // Run through the data bytes - for (i = 0; i < src_len; i++) { - // First find the start flag sequence - if (state->start_index < 0) { - if (src[i] == HDLC_FLAG_SEQUENCE) { - // Check if an additional flag sequence byte is present - if ((i < (src_len - 1)) && (src[i + 1] == HDLC_FLAG_SEQUENCE)) { - // Just loop again to silently discard it (accordingly to HDLC) - continue; - } - - state->start_index = state->src_index; - } - } else { - // Check for end flag sequence - if (src[i] == HDLC_FLAG_SEQUENCE) { - // Check if an additional flag sequence byte is present or earlier received - if (((i < (src_len - 1)) && (src[i + 1] == HDLC_FLAG_SEQUENCE)) - || ((state->start_index + 1) == state->src_index)) { - // Just loop again to silently discard it (accordingly to HDLC) - continue; - } - - state->end_index = state->src_index; - break; - } else if (src[i] == HDLC_CONTROL_ESCAPE) { - state->control_escape = 1; - } else { - // Update the value based on any control escape received - if (state->control_escape) { - state->control_escape = 0; - value = src[i] ^ 0x20; - } else { - value = src[i]; - } - - // Now update the FCS value - state->fcs = calc_fcs(state->fcs, value); - - if (state->src_index == state->start_index + 2) { - // Control field is the second byte after the start flag sequence - *control = hdlc_get_control_type(value); - } else if (state->src_index > (state->start_index + 2)) { - // Start adding the data values after the Control field to the buffer - dest[state->dest_index++] = value; - } - } - } - state->src_index++; - } - - // Check for invalid frame (no start or end flag sequence) - if ((state->start_index < 0) || (state->end_index < 0)) { - // Return no message and make sure destination length is 0 - *dest_len = 0; - ret = -ENOMSG; - } else { - // A frame is at least 4 bytes in size and has a valid FCS value - if ((state->end_index < (state->start_index + 4)) - || (state->fcs != FCS_GOOD_VALUE)) { - // Return FCS error and indicate that data up to end flag sequence in buffer should be discarded - *dest_len = i; - ret = -EIO; - } else { - // Return success and indicate that data up to end flag sequence in buffer should be discarded - *dest_len = state->dest_index - sizeof(state->fcs); - ret = i; - } - - // Reset values for next frame - hdlc_get_data_reset_with_state(state); - } - - return ret; -} - -//int hdlc_frame_data(hdlc_control_t *control, const char *src, -// unsigned int src_len, char *dest, unsigned int *dest_len) -int hdlc_frame_data(hdlc_control_t *control, uint8_t *src, - size_t src_len, uint8_t *dest, size_t *dest_len){ - unsigned int i; - int dest_index = 0; - unsigned char value = 0; - FCS_SIZE fcs = FCS_INIT_VALUE; - - // Make sure that all parameters are valid - if (!control || (!src && (src_len > 0)) || !dest || !dest_len) { - return -EINVAL; - } - - // Start by adding the start flag sequence - dest[dest_index++] = HDLC_FLAG_SEQUENCE; - - // Add the all-station address from HDLC (broadcast) - fcs = calc_fcs(fcs, HDLC_ALL_STATION_ADDR); - hdlc_escape_value(HDLC_ALL_STATION_ADDR, dest, &dest_index); - - // Add the framed control field value - value = hdlc_frame_control_type(control); - fcs = calc_fcs(fcs, value); - hdlc_escape_value(value, dest, &dest_index); - - // Only DATA frames should contain data - if (control->frame == I_FRAME) { - // Calculate FCS and escape data - for (i = 0; i < src_len; i++) { - fcs = calc_fcs(fcs, src[i]); - hdlc_escape_value(src[i], dest, &dest_index); - } - } - - // Invert the FCS value accordingly to the specification - fcs ^= FCS_INVERT_MASK; - - // Run through the FCS bytes and escape the values - for (i = 0; i < sizeof(fcs); i++) { - value = ((fcs >> (8 * i)) & 0xFF); - hdlc_escape_value(value, dest, &dest_index); - } - - // Add end flag sequence and update length of frame - dest[dest_index++] = HDLC_FLAG_SEQUENCE; - *dest_len = dest_index; - - return 0; -} \ No newline at end of file diff --git a/main_sketch/hdlc.h b/main_sketch/hdlc.h deleted file mode 100644 index 61fc74a..0000000 --- a/main_sketch/hdlc.h +++ /dev/null @@ -1,108 +0,0 @@ -// -// Created by 79513 on 15.12.2023. -// - -#ifndef HDLC_H -#define HDLC_H - -#include "fcs.h" -#include "errno.h" -#include "stdint.h" - -/** HDLC start/end flag sequence */ -#define HDLC_FLAG_SEQUENCE 0x7E - -/** HDLC control escape value */ -#define HDLC_CONTROL_ESCAPE 0x7D - -/** HDLC all station address */ -#define HDLC_ALL_STATION_ADDR 0xFF - -/** Supported HDLC frame types */ -typedef enum { - I_FRAME, - S_FRAME, - S_FRAME_NACK, -} hdlc_frame_t; - -/** Control field information */ -typedef struct { - hdlc_frame_t frame; - unsigned char seq_no :3; -} hdlc_control_t; - -/** Variables used in hdlc_get_data and hdlc_get_data_with_state - * to keep track of received buffers - */ -typedef struct { - char control_escape; - FCS_SIZE fcs; - int start_index; - int end_index; - int src_index; - int dest_index; -} hdlc_state_t; - -/** - * Retrieves data from specified buffer containing the HDLC frame. Frames can be - * parsed from multiple buffers e.g. when received via UART. - * - * @param[out] control Control field structure with frame type and sequence number - * @param[in] src Source buffer with frame - * @param[in] src_len Source buffer length - * @param[out] dest Destination buffer (should be able to contain max frame size) - * @param[out] dest_len Destination buffer length - * @retval >=0 Success (size of returned value should be discarded from source buffer) - * @retval -EINVAL Invalid parameter - * @retval -ENOMSG Invalid message - * @retval -EIO Invalid FCS (size of dest_len should be discarded from source buffer) - * - * @see hdlc_get_data_with_state - */ -int hdlc_get_data(hdlc_control_t *control, uint8_t *src, - size_t src_len, uint8_t *dest, size_t *dest_len); - -/** - * Retrieves data from specified buffer containing the HDLC frame. Frames can be - * parsed from multiple buffers e.g. when received via UART. - * - * This function is a variation of @ref hdlc_get_data - * The difference is only in first argument: hdlc_state_t *state - * Data under that pointer is used to keep track of internal buffers. - * - * @see hdlc_get_data - */ -int hdlc_get_data_with_state(hdlc_state_t *state, hdlc_control_t *control, uint8_t *src, - size_t src_len, uint8_t *dest, size_t *dest_len); - -/** - * Resets values used in yahdlc_get_data function to keep track of received buffers - */ -void hdlc_get_data_reset(); - -/** - * This is a variation of @ref hdlc_get_data_reset - * Resets state values that are under the pointer provided as argument - * - * This function need to be called before the first call to hdlc_get_data_with_state - * when custom state storage is used. - * - * @see hdlc_get_data_reset - */ -void hdlc_get_data_reset_with_state(hdlc_state_t *state); - -/** - * Creates HDLC frame with specified data buffer. - * - * @param[in] control Control field structure with frame type and sequence number - * @param[in] src Source buffer with data - * @param[in] src_len Source buffer length - * @param[out] dest Destination buffer (should be bigger than source buffer) - * @param[out] dest_len Destination buffer length - * @retval 0 Success - * @retval -EINVAL Invalid parameter - */ -int hdlc_frame_data(hdlc_control_t *control, uint8_t *src, - size_t src_len, uint8_t *dest, size_t *dest_len); - -#endif //HDLC_H diff --git a/main_sketch/i2cmaster.h b/main_sketch/i2cmaster.h deleted file mode 100644 index 72efb7c..0000000 --- a/main_sketch/i2cmaster.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef _I2CMASTER_H -#define _I2CMASTER_H - -// ����, ���������� �� ������ ������ �� i2c -#define I2C_READ 1 - -// ����, ���������� �� �������� ������ �� i2c -#define I2C_WRITE 0 - -// ������� ������������ ����� � ������ -#define SCL_CLOCK 100000L - -// ������������� ���������� -void i2c_init(void); - -// �������� ������� ���� �� ���� -void i2c_stop(void); - -// �������� ������� ����� �� ���� -unsigned char i2c_start(unsigned char addr); - -// ��������� �����(����������) -unsigned char i2c_rep_start(unsigned char addr); - -// ����, ���� ������-�� ������, � ����� �������� ������� ����� �� ���� -void i2c_start_wait(unsigned char addr); - - // �������� ������ -unsigned char i2c_write(unsigned char data); - -// ������ ������ � ���������� ������� -unsigned char i2c_readAck(void); - -// ������ ������ � ����� �� ��������� �������� ������ ���� -unsigned char i2c_readNak(void); - -// ������ ������ � ���� -unsigned char i2c_read(unsigned char ack); - -// �������� ����� ������ ������ ������ ����� -#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); -#endif diff --git a/main_sketch/keywords.txt b/main_sketch/keywords.txt deleted file mode 100644 index 26f60da..0000000 --- a/main_sketch/keywords.txt +++ /dev/null @@ -1,10 +0,0 @@ -lcd_init KEYWORD2 -lcd_clrscr KEYWORD2 -lcd_home KEYWORD2 -lcd_gotoxy KEYWORD2 -lcd_led KEYWORD2 -lcd_putc KEYWORD2 -lcd_puts KEYWORD2 -lcd_puts_p KEYWORD2 -lcd_command KEYWORD2 -lcd_data KEYWORD2 \ No newline at end of file diff --git a/main_sketch/lcd.h b/main_sketch/lcd.h deleted file mode 100644 index f798ae0..0000000 --- a/main_sketch/lcd.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef Lsd_print_h -#define Lsd_print_h -#include "protocol.h" - -void Lcd_inciliation(); -void printLcd(struct message* decode_message); - -#endif \ No newline at end of file diff --git a/main_sketch/lcdpcf8574.h b/main_sketch/lcdpcf8574.h deleted file mode 100644 index cff8714..0000000 --- a/main_sketch/lcdpcf8574.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef LCD_H -#define LCD_H - -#define LCD_PCF8574_INIT 1 //������������� pcf - -#define LCD_PCF8574_DEVICEID 0 //id ���-�� -#define LCD_FUNCTION_DEFAULT LCD_FUNCTION_4BIT_2LINES - -// ��������� ������ �����: ���������/���������� �������� �������, ����������� ����������� ������� ���������/����������� -#define LCD_ENTRY_DEC 0x04 // �������� ������� ���������, ������ ������������ �� ������� -#define LCD_ENTRY_DEC_SHIFT 0x05 // ��������� ������ �������, ����������� ������� �� ������� -#define LCD_ENTRY_INC_ 0x06 // �������� ������� ���������, ���. ����������� ������� � ����������� -#define LCD_ENTRY_INC_SHIFT 0x07 // ��������� �������� �������, ���������� ����������� ����������� ������� - -// ���������/���������� �������, ���������/���������� �������, �������� ������ � ������� ������� -#define LCD_DISP_OFF 0x08 // ������� �������� -#define LCD_DISP_ON 0x0C // ������� ���, ������ ���� -#define LCD_DISP_ON_BLINK 0x0D // ������� ���, ������ ����, ���� �������� ����� -#define LCD_DISP_ON_CURSOR 0x0E // ������� ���, ������ ��� -#define LCD_DISP_ON_CURSOR_BLINK 0x0F // ������� ���, ������ ���, ���� �������� ����� - -// ����������� �������/�������� ������� -#define LCD_MOVE_CURSOR_LEFT 0x10 // ������ ������ -#define LCD_MOVE_CURSOR_RIGHT 0x14 // ������ ������� -#define LCD_MOVE_DISP_LEFT 0x18 // ����� ����� -#define LCD_MOVE_DISP_RIGHT 0x1C // ����� ������ - -// ����� �������: ��������� ����� ������ ���������� � ���������� ����� ����������� -#define LCD_FUNCTION_4BIT_1LINE 0x20 // 4-������ ���������, ���� ������, 5x7 ����� -#define LCD_FUNCTION_4BIT_2LINES 0x28 // 4-������ ���������, ������������, 5x7 ����� -#define LCD_FUNCTION_8BIT_1LINE 0x30 // 8-������ ���������, ���� ������, 5x7 ����� -#define LCD_FUNCTION_8BIT_2LINES 0x38 // 8-������ ���������, ������������, 5x7 ����� - -#define LCD_LINES 2 // ���-�� ����� -#define LCD_DISP_LENGTH 16 // ���-�� �������� � ������ -#define LCD_LINE_LENGTH 0x40 // ���������� ����� ������ ������� -#define LCD_START_LINE1 0x00 // DDRM ����� ��� 1 ������ -#define LCD_START_LINE2 0x40 // DDRM ����� ��� 2 ������ -#define LCD_WRAP_LINES 1 // ������� ������ - - - -#define LCD_DATA0_PIN 4 // ��� ��� ������ -#define LCD_DATA1_PIN 5 // ��� ��� ������ -#define LCD_DATA2_PIN 6 // ��� ��� ������ -#define LCD_DATA3_PIN 7 // ��� ��� ������ -#define LCD_RS_PIN 0 // ��� ����� RS -#define LCD_RW_PIN 1 // ��� ����� RW -#define LCD_E_PIN 2 // ��� ����� ������������ -#define LCD_LED_PIN 3 // ��� ��������� - - -// ������� ����� �������� ������ HD44780U. -#define LCD_CLR 0 // ��������� ������� -#define LCD_HOME 1 // ������� ������ ����� -#define LCD_ENTRY_MODE 2 // ��������� ������ ����� -#define LCD_ENTRY_INC 1 // ��������� -#define LCD_ENTRY_SHIFT 0 // ��� �������� -#define LCD_ON 3 // ��� ������� -#define LCD_ON_DISPLAY 2 // ���� ������� -#define LCD_ON_CURSOR 1 // ���� ������ -#define LCD_ON_BLINK 0 // ������� ������� -#define LCD_MOVE 4 // ������������ ������� -#define LCD_MOVE_DISP 3 // ������������ ������� -#define LCD_MOVE_RIGHT 2 // ������������ ������� ������� -#define LCD_FUNCTION 5 // ��������� ������� -#define LCD_FUNCTION_8BIT 4 // 8 ������ ����� -#define LCD_FUNCTION_2LINES 3 // ��������� ����� -#define LCD_FUNCTION_10DOTS 2 // ������ -#define LCD_CGRAM 6 // ��������� ������ CG RAM -#define LCD_DDRAM 7 // ��������� ������ DD RAM -#define LCD_BUSY 7 // ������� ����� - -// ����������� ����� -#define LCD_MODE_DEFAULT ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC) ) - -// ������������� ������� -void lcd_init(uint8_t dispAttr); - -// ������� ������� -void lcd_clrscr(void); - -// ������ � ������ ��������� -void lcd_home(void); - -// ����������� ������� �� ����������� -void lcd_gotoxy(uint8_t x, uint8_t y); - -// ��� � ���� ��������� -void lcd_led(uint8_t onoff); - -// ����������� ������� � ������� ������� ������� -void lcd_putc(char c); - -// ����� ������ �� ������� -void lcd_puts(const char *s); - -// ����� ������ �� ������ -void lcd_puts_p(const char *progmem_s); - -// ��������� ������� ��� �������� ������ ������� -void lcd_command(uint8_t cmd); - -// �������� ����� �� ������� -void lcd_data(uint8_t data); - -// ������� ��� ��������������� ���������� ��������� ��������� � ������ ��������� -#define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) - -#endif diff --git a/main_sketch/main.c b/main_sketch/main.c deleted file mode 100644 index 28aa299..0000000 --- a/main_sketch/main.c +++ /dev/null @@ -1,120 +0,0 @@ -#include "protocol.h" -#include "stdio.h" - -int main(){ -// union convert_float sample; -// sample.fVal = 135; -// union convert_float sample2; -// for(int i = 0; i < sizeof sample.buf; i++){ -// printf("buffer %d: %d\n", i, sample.buf[i]); -// sample2.buf[i] = sample.buf[i]; -// } -// -// printf("float: %f\n", sample2.fVal); - -// union convert_char sample; -// sample.cVal = "world_word_z"; -// union convert_char sample2; -// for(int i = 0; i < sizeof sample.buf; i++){ -// printf("buffer %d: %d\n", i, sample.buf[i]); -// sample2.buf[i] = sample.buf[i]; -// } -// -// printf("char: %s\n", sample2.cVal); - - -// char a[64]; -// float f = 3.14159; // number to start with -// -// snprintf(a, sizeof a, "%f", f); // point a to f's location -// -// float num = atof(a); -// -// printf("%s\n", a); -// printf("%f", num); -// -// // print float & byte array as hex -// printf("float: %f\n", f); -// printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \ -// a[0], a[1], a[2], a[3]); - -// uint8_t num; -// sscanf(a, "%s", &num); -// float s = atof(a); -// printf("%f\n", s); - -// float vIn = -1.07231; -// char *vOut[4]; -// _gcvt_s(vOut,sizeof(vOut),vIn,9); -// -// float vA = (float)strtod(vOut,NULL); -// -// printf("\n%f", vA); - - printf("Test number\n"); - struct message messNum; - messNum.numbers[0] = 12.134; - messNum.numbers[1] = 135.123; - messNum.numbers[2] = 5214.12; - messNum.numbers[3] = 12345.12345; - messNum.len_str = 0; - messNum.len_numbers = 4; - - uint8_t buffer_number[] = {}; - size_t len_buffer_number; - protocol_encode(messNum, buffer_number, &len_buffer_number); - for (int i = 0; i < len_buffer_number; i++){ - printf("buffer %d: %d\n", i, buffer_number[i]); - } - - printf("---------------------------------------\n"); - - struct message respNum; - protocol_decode(buffer_number, len_buffer_number, &respNum); - for (int i = 0; i < 4; i++){ - printf("number %d: %f\n", i, respNum.numbers[i]); - } - - printf("\nTest word\n"); - struct message messStr; - messStr.str = "word_war"; - messStr.len_str = sizeof messStr.str; - messStr.len_numbers = 0; - uint8_t bufferStr[] = {}; - size_t len_bufferStr; - protocol_encode(messStr, bufferStr, &len_bufferStr); - for (int i = 0; i < len_bufferStr; i++){ - printf("buffer %d: %d\n", i, bufferStr[i]); - } - - printf("---------------------------------------\n"); - - struct message respStr; - protocol_decode(bufferStr, len_bufferStr, &respStr); - printf("message: %s\n", respStr.str); - - printf("\nTest number + word\n"); - - struct message mess; - mess.numbers[0] = 12.134; - mess.numbers[1] = 135.123; - mess.len_numbers = 2; - mess.str = "word_war_sas"; - mess.len_str = sizeof mess.str; - uint8_t buffer[] = {}; - size_t len_buffer; - protocol_encode(mess, buffer, &len_buffer); - for (int i = 0; i < len_buffer; i++){ - printf("buffer %d: %d\n", i, buffer[i]); - } - - printf("---------------------------------------\n"); - - struct message resp; - protocol_decode(buffer, len_buffer, &resp); - for (int i = 0; i < resp.len_numbers; i++){ - printf("numbers %d: %f\n", i, resp.numbers[i]); - } - printf("message: %s\n", resp.str); - -} \ No newline at end of file diff --git a/main_sketch/main_sketch.ino b/main_sketch/main_sketch.ino deleted file mode 100644 index 97d49b8..0000000 --- a/main_sketch/main_sketch.ino +++ /dev/null @@ -1,108 +0,0 @@ -#include "lcd.h" -#include "client.h" -#include "uart.h" -#include "stdbool.h" -#include "stdio.h" - -struct Client hdlc; -bool flag_connection = false; - -void setup() { - Lsd_inciliation(); - UART_init(); - init_hdlc_client(&hdlc, 200); -} - -void loop() { -// while(true){ -// if (!flag_connection){ -// } -// } - - hdlc_connect(&hdlc); - uint8_t buffer[10]; - - hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); - - UART_send(&buffer, sizeof buffer); - - while(!flag_connection){ - uint8_t* buffer_recive[10]; - UART_receive(&buffer_recive, sizeof buffer_recive); - - int err = hdlc_timeout_handler(&hdlc, 1); - if (err == ERR_FRAME_TIME_OUT){ - hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer); - UART_send(buffer, sizeof buffer); - continue; - } - - err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive, sizeof buffer_recive, 0, 0); - if (err < 0){ - if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ - uint8_t* buffer_rej[10]; - hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); - UART_send(&buffer_rej, sizeof buffer_rej); - return err; - } - return err; - } - - if (hdlc.state == READY_STATE){ - flag_connection = true; - } - } - - struct message mess; - mess.numbers[0] = 1.23; - mess.numbers[1] = 22.1; - mess.numbers[2] = 100; - mess.len_numbers = 3; - mess.str = "word war in new world io ex"; - mess.len_str = sizeof mess.str; - - uint8_t data[64]; - size_t len_data; - protocol_encode(mess, data, &len_data); - - hdlc_send_data(&hdlc, data, len_data); - uint8_t buffer_data[72]; - hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); - - UART_send(&buffer_data, sizeof buffer_data); - - bool flag_recive = false; - uint8_t data_recive[64]; - size_t len_data_recive; - while (!flag_recive){ - uint8_t* buffer_recive_data[72]; - UART_receive(&buffer_recive_data, sizeof buffer_recive_data); - - int err = hdlc_timeout_handler(&hdlc, 1); - if (err == ERR_FRAME_TIME_OUT){ - hdlc_get_raw_frame(&hdlc, buffer_data, sizeof buffer_data); - UART_send(&buffer_data, sizeof buffer_data); - continue; - } - - err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive_data, sizeof buffer_recive_data, data_recive, &len_data_recive); - if (err < 0){ - if (err == ERR_INVALID_SEQ_NUMBER_FRAME){ - uint8_t* buffer_rej[10]; - hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej); - UART_send(&buffer_rej, sizeof buffer_rej); - return err; - } - return err; - } - - if (hdlc.state == SEND){ - flag_recive = true; - } - } - - struct message resp; - protocol_decode(data_recive, len_data_recive, &resp); - - printLcd(&resp); -} \ No newline at end of file diff --git a/main_sketch/pcf8574.h b/main_sketch/pcf8574.h deleted file mode 100644 index 74af505..0000000 --- a/main_sketch/pcf8574.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef PCF8574_H_ -#define PCF8574_H_ - -#define PCF8574_ADDRBASE (0x27) // ����� ���-�� - -#define PCF8574_I2CINIT 1 // ������������� i2c - -#define PCF8574_MAXDEVICES 1 // ���� ���-�� �������� -#define PCF8574_MAXPINS 8 // ���� ���-�� ����� - -void pcf8574_init(); -int8_t pcf8574_getoutput(uint8_t deviceid); -int8_t pcf8574_getoutputpin(uint8_t deviceid, uint8_t pin); -int8_t pcf8574_setoutput(uint8_t deviceid, uint8_t data); -int8_t pcf8574_setoutputpins(uint8_t deviceid, uint8_t pinstart, uint8_t pinlength, int8_t data); -int8_t pcf8574_setoutputpin(uint8_t deviceid, uint8_t pin, uint8_t data); -int8_t pcf8574_setoutputpinhigh(uint8_t deviceid, uint8_t pin); -int8_t pcf8574_setoutputpinlow(uint8_t deviceid, uint8_t pin); -int8_t pcf8574_getinput(uint8_t deviceid); -int8_t pcf8574_getinputpin(uint8_t deviceid, uint8_t pin); -#endif diff --git a/main_sketch/timer.c b/main_sketch/timer.c deleted file mode 100644 index ca35795..0000000 --- a/main_sketch/timer.c +++ /dev/null @@ -1,21 +0,0 @@ -#include <avr/io.h> -#include <avr/interrupt.h> - -static volatile unsigned long timerMillis = 0; - -void timerInit() { - TCCR1B |= (1 << WGM12) | (1 << CS11) | (1 << CS10); - OCR1A = 250; - TIMSK1 |= (1 << OCIE1A); - sei(); -} - -unsigned long millis() { - unsigned long ms; - ms = timerMillis; - return ms; -} - -ISR(TIMER1_COMPA_vect) { - timerMillis++; -} \ No newline at end of file diff --git a/main_sketch/timer.h b/main_sketch/timer.h deleted file mode 100644 index f5b07fe..0000000 --- a/main_sketch/timer.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef TIMER_H -#define TIMER_H - -void timerInit(); -unsigned long millis(); - -#endif // TIMER_H \ No newline at end of file diff --git a/protocol/main.c b/protocol/main.c deleted file mode 100644 index 28aa299..0000000 --- a/protocol/main.c +++ /dev/null @@ -1,120 +0,0 @@ -#include "protocol.h" -#include "stdio.h" - -int main(){ -// union convert_float sample; -// sample.fVal = 135; -// union convert_float sample2; -// for(int i = 0; i < sizeof sample.buf; i++){ -// printf("buffer %d: %d\n", i, sample.buf[i]); -// sample2.buf[i] = sample.buf[i]; -// } -// -// printf("float: %f\n", sample2.fVal); - -// union convert_char sample; -// sample.cVal = "world_word_z"; -// union convert_char sample2; -// for(int i = 0; i < sizeof sample.buf; i++){ -// printf("buffer %d: %d\n", i, sample.buf[i]); -// sample2.buf[i] = sample.buf[i]; -// } -// -// printf("char: %s\n", sample2.cVal); - - -// char a[64]; -// float f = 3.14159; // number to start with -// -// snprintf(a, sizeof a, "%f", f); // point a to f's location -// -// float num = atof(a); -// -// printf("%s\n", a); -// printf("%f", num); -// -// // print float & byte array as hex -// printf("float: %f\n", f); -// printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \ -// a[0], a[1], a[2], a[3]); - -// uint8_t num; -// sscanf(a, "%s", &num); -// float s = atof(a); -// printf("%f\n", s); - -// float vIn = -1.07231; -// char *vOut[4]; -// _gcvt_s(vOut,sizeof(vOut),vIn,9); -// -// float vA = (float)strtod(vOut,NULL); -// -// printf("\n%f", vA); - - printf("Test number\n"); - struct message messNum; - messNum.numbers[0] = 12.134; - messNum.numbers[1] = 135.123; - messNum.numbers[2] = 5214.12; - messNum.numbers[3] = 12345.12345; - messNum.len_str = 0; - messNum.len_numbers = 4; - - uint8_t buffer_number[] = {}; - size_t len_buffer_number; - protocol_encode(messNum, buffer_number, &len_buffer_number); - for (int i = 0; i < len_buffer_number; i++){ - printf("buffer %d: %d\n", i, buffer_number[i]); - } - - printf("---------------------------------------\n"); - - struct message respNum; - protocol_decode(buffer_number, len_buffer_number, &respNum); - for (int i = 0; i < 4; i++){ - printf("number %d: %f\n", i, respNum.numbers[i]); - } - - printf("\nTest word\n"); - struct message messStr; - messStr.str = "word_war"; - messStr.len_str = sizeof messStr.str; - messStr.len_numbers = 0; - uint8_t bufferStr[] = {}; - size_t len_bufferStr; - protocol_encode(messStr, bufferStr, &len_bufferStr); - for (int i = 0; i < len_bufferStr; i++){ - printf("buffer %d: %d\n", i, bufferStr[i]); - } - - printf("---------------------------------------\n"); - - struct message respStr; - protocol_decode(bufferStr, len_bufferStr, &respStr); - printf("message: %s\n", respStr.str); - - printf("\nTest number + word\n"); - - struct message mess; - mess.numbers[0] = 12.134; - mess.numbers[1] = 135.123; - mess.len_numbers = 2; - mess.str = "word_war_sas"; - mess.len_str = sizeof mess.str; - uint8_t buffer[] = {}; - size_t len_buffer; - protocol_encode(mess, buffer, &len_buffer); - for (int i = 0; i < len_buffer; i++){ - printf("buffer %d: %d\n", i, buffer[i]); - } - - printf("---------------------------------------\n"); - - struct message resp; - protocol_decode(buffer, len_buffer, &resp); - for (int i = 0; i < resp.len_numbers; i++){ - printf("numbers %d: %f\n", i, resp.numbers[i]); - } - printf("message: %s\n", resp.str); - -} \ No newline at end of file diff --git a/protocol/protocol.c b/protocol/protocol.c deleted file mode 100644 index 9717050..0000000 --- a/protocol/protocol.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "protocol.h" - -void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message){ - int count_number = 0; - for(int i = 0; i < len_encode_message; i++){ - if (encode_message[i] == FLAG_NUMBER){ - union convert_float sample; - for (int z = 0; z < sizeof sample.buf; z++){ - i++; - sample.buf[z] = encode_message[i]; - } - decode_message->numbers[count_number++] = sample.fVal; - decode_message->len_numbers++; - } - - - if (encode_message[i] == FLAG_WORD){ - int count_word = 0; - i++; - union convert_char sample; - for (int z = 0; z < encode_message[i]; z++){ - i++; - sample.buf[z] = encode_message[i]; - } - decode_message->str = sample.cVal; - decode_message->len_str = count_word; - } - } - decode_message->len_numbers = count_number; -} - -void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message){ - size_t count = 0; - if (message.len_numbers > 0){ - for (int i = 0; i < message.len_numbers; i++){ - encode_message[count++] = FLAG_NUMBER; - union convert_float sample; - sample.fVal = message.numbers[i]; - for (int z = 0; z < sizeof sample.buf; z++){ - encode_message[count++] = sample.buf[z]; - } - } - } - - if (message.len_str > 0){ - encode_message[count++] = FLAG_WORD; - encode_message[count++] = message.len_str; - union convert_char sample; - sample.cVal = message.str; - for (int i = 0; i < message.len_str; i++){ - encode_message[count++] = sample.buf[i]; - } - } - - *len_encode_message = count; -} \ No newline at end of file diff --git a/protocol/protocol.h b/protocol/protocol.h deleted file mode 100644 index c23f040..0000000 --- a/protocol/protocol.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef PROTOCOL_H -#define PROTOCOL_H - -#include <stdint.h> -#include <string.h> -#include <stdlib.h> -#include "stdio.h" - -#define FLAG_NUMBER 0 -#define FLAG_WORD 1 - -struct message{ - float numbers[3]; - size_t len_numbers; - char* str; - size_t len_str; -}; - -union convert_float{ - float fVal; - uint8_t buf[4]; -}; - -union convert_char{ - char* cVal; - uint8_t buf[64]; -}; - -void protocol_decode(uint8_t encode_message[], size_t len_encode_message, struct message* decode_message); -void protocol_encode(struct message message, uint8_t encode_message[], size_t* len_encode_message); - -#endif //PROTOCOL_H