Страница 1 из 1

Atmel studio помогите с ошибкой

Добавлено: Чт май 05, 2022 16:37:13
PE4ENbKA_173
У меня проблема при компиляции проекта в режиме Debug в Release все нормально ошибок нет.
Проблема связана с переполнением файла elf.
Изображение
СпойлерError region `text' overflowed by 52 bytes opticir 1
Error opticir.elf section `.text' will not fit in region `text' opticir 1
Спойлер$(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="opticir.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=attiny13 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.8.332\gcc\dev\attiny13"
@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 "opticir.elf" "opticir.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 "opticir.elf" "opticir.eep" || exit 0
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "opticir.elf" > "opticir.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 "opticir.elf" "opticir.srec"
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "opticir.elf"
Как мне решить эту проблему?
Поддержка ASCII включена.

Re: Atmel studio помогите с ошибкой

Добавлено: Чт май 05, 2022 19:53:06
Карбофос
Если всё правильно понимаю, у вас отладочная информация не влезает во флэш ATtiny13.
А что там отлаживать?
Загружайте Release в мк.
Если-б выложили исходный текст программы, возможно, кто-то мог подсказать, как её сократить.
Ну, и, можно к опциям компилятора добавить: -ffunction-sections -fdata-sections, если таких опций нет.

Re: Atmel studio помогите с ошибкой

Добавлено: Пт май 06, 2022 12:54:21
PE4ENbKA_173
[uquote="Карбофос",url="/forum/viewtopic.php?p=4227193#p4227193"]Если-б выложили исходный текст программы, возможно, кто-то мог подсказать, как её сократить.
Ну, и, можно к опциям компилятора добавить: -ffunction-sections -fdata-sections, если таких опций нет.[/uquote]
Я могу выложить код но он в нескольких файлах, разделен на библиотеки и файлы кода.
Скажите как добавить в опции компилятора добавить эти команды? У меня Microchip studio (он же атмел). В их настройках черт ногу сломит.
Приложил в файлы архив проекта. Просто не хочу засорять вставками сообщение, ибо потом еще хуже выловить отсюда смысл кода будет.

Re: Atmel studio помогите с ошибкой

Добавлено: Пт май 06, 2022 13:58:40
Карбофос
Я бы предложил вот-так написать функцию uart_putu и исправить ошибки.
Глядишь, может и влезет debug-версия.
Спойлер

Код: Выделить всё

void uart_putu(uint8_t x)
{
#if 0
        char buff[8] = {0};
        char* p = buff+7;
        *p-- = 0;
        do { *p-- = (x % 10) + '0'; x /= 10; } while(x);
        uart_puts(p+1);
#else
	uint8_t d = x / 10;
	uint8_t e = x % 10;
	if(d != 0)
		uart_putu(d);
	uart_putc(e + '0');
#endif
}

void uart_puts(const char *s)
{
     	while (*s) uart_putc(*s++);
}

Re: Atmel studio помогите с ошибкой

Добавлено: Пт май 06, 2022 14:48:28
PE4ENbKA_173
[uquote="Карбофос",url="/forum/viewtopic.php?p=4227541#p4227541"]
Спойлер

Код: Выделить всё

void uart_putu(uint8_t x)
{
#if 0
        char buff[8] = {0};
        char* p = buff+7;
        *p-- = 0;
        do { *p-- = (x % 10) + '0'; x /= 10; } while(x);
        uart_puts(p+1);
#else
	uint8_t d = x / 10;
	uint8_t e = x % 10;
	if(d != 0)
		uart_putu(d);
	uart_putc(e + '0');
#endif
}

void uart_puts(const char *s)
{
     	while (*s) uart_putc(*s++);
}
[/uquote]
Выполнил замену не помогло. Пробовал и так и этак, не поменялся результат. Полез в настройки оптимизации еще раз, один раз скомпилировалось а второй раз уже нет. скорее просто не отобразилось сообщение. В прочем ладно с этим. Я сейчас думаю как же компилятору в свойства добавить команды. Все облазил, не вижу.
Вот такое меню настроек проекта
Изображение
А вторая картинка это настройки билдера, вообще не густо
Изображение

Re: Atmel studio помогите с ошибкой

Добавлено: Пт май 06, 2022 15:01:30
Карбофос
PE4ENbKA_173 писал(а):как же компилятору в свойства добавить команды
Очевидно, на 1-ой картинке зайти "AVR GNU C Compiler" и далее по закладкам.
Сам средой не пользуюсь.
Так-же, если найдёте где, попробуйте включить "Link-time optimization" (-flto).
Можно еще ваши строки вынести во флэш память.
main.c
Спойлер

Код: Выделить всё

#include <avr/io.h>
#include <avr/pgmspace.h>
#include "ir.h"
#include "uart.h"

const char addrsz[] PROGMEM = {"addr="};
const char cmdsz [] PROGMEM = {", cmd="};
const char crlfsz[] PROGMEM = {"\r\n"};

int main(void)
{
	uint8_t addr, cmd;

	/* setup */
	IR_init();

	/* loop */
	while (1) {
		if (IR_read(&addr, &cmd) == IR_SUCCESS) {
			uart_puts_pgm(addrsz);
			uart_putu(addr);
			uart_puts_pgm(cmdsz);
			uart_putu(cmd);
			uart_puts_pgm(crlfsz);
		}
	}
}
uart.h
Спойлер

Код: Выделить всё

void uart_puts_pgm(const char *s);
uart.c
Спойлер

Код: Выделить всё

void uart_puts_pgm(const char *s)
{
	uint8_t c;
	while((c = pgm_read_byte(s++)) != 0)
		uart_putc(c);
}


Re: Atmel studio помогите с ошибкой

Добавлено: Пт май 06, 2022 15:39:01
PE4ENbKA_173
[uquote="Карбофос",url="/forum/viewtopic.php?p=4227587#p4227587"]
PE4ENbKA_173 писал(а):как же компилятору в свойства добавить команды
Очевидно, на 1-ой картинке зайти "AVR GNU C Compiler" и далее по закладкам.
Сам средой не пользуюсь.
Так-же, если найдёте где, попробуйте включить "Link-time optimization" (-flto).
Можно еще ваши строки вынести во флэш память.[/uquote]
кажись понимаю что делать, что ж. займусь этим уже во вторник, думаю у меня все получится.

Re: Atmel studio помогите с ошибкой

Добавлено: Пт май 06, 2022 18:39:15
ARV
мой совет, как большого любителя attiny13 - забудьте о режиме компиляции без оптимизации! там не так много памяти, чтобы расходовать её на "тупое следование стандарту Си". всегда использую оптимизацию -Os, и вам советую. режим Debug по умолчанию собирается без оптимизации вообще.

Re: Atmel studio помогите с ошибкой

Добавлено: Вт май 10, 2022 10:10:10
PE4ENbKA_173
Добавлено after 25 minutes 1 second:
[uquote="Карбофос",url="/forum/viewtopic.php?p=4227587#p4227587"][/code][/spoiler]
uart.c
Спойлер

Код: Выделить всё

void uart_puts_pgm(const char *s)
{
	uint8_t c;
	while((c = pgm_read_byte(s++)) != 0)
		uart_putc(c);
}

[/uquote]

у меня тут возникла проблема, указанной тут функции pgm_read_byte нет в стандартной библиотеке но есть такая: pgm_read_byte_near
Спойлер

Код: Выделить всё

void uart_puts_pgm(const char *s)
{
	uint8_t c;
	while((c = pgm_read_byte_near(s++)) != 0)
		uart_putc(c);
}
эти функции делают одно и то же или совершенно разные?