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

Обсуждаем контроллеры компании Atmel.
Ответить
PE4ENbKA_173
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср фев 23, 2022 15:40:56

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

Сообщение 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 включена.
Вложения
Безымянный.png
Иллюстрация ошибки
(3.58 КБ) 58 скачиваний
Реклама
Аватара пользователя
Карбофос
Опытный кот
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

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

Сообщение Карбофос »

Если всё правильно понимаю, у вас отладочная информация не влезает во флэш ATtiny13.
А что там отлаживать?
Загружайте Release в мк.
Если-б выложили исходный текст программы, возможно, кто-то мог подсказать, как её сократить.
Ну, и, можно к опциям компилятора добавить: -ffunction-sections -fdata-sections, если таких опций нет.
Реклама
PE4ENbKA_173
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср фев 23, 2022 15:40:56

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

Сообщение PE4ENbKA_173 »

[uquote="Карбофос",url="/forum/viewtopic.php?p=4227193#p4227193"]Если-б выложили исходный текст программы, возможно, кто-то мог подсказать, как её сократить.
Ну, и, можно к опциям компилятора добавить: -ffunction-sections -fdata-sections, если таких опций нет.[/uquote]
Я могу выложить код но он в нескольких файлах, разделен на библиотеки и файлы кода.
Скажите как добавить в опции компилятора добавить эти команды? У меня Microchip studio (он же атмел). В их настройках черт ногу сломит.
Приложил в файлы архив проекта. Просто не хочу засорять вставками сообщение, ибо потом еще хуже выловить отсюда смысл кода будет.
Вложения
opticir.zip
Проект приема ИК сигналов
(50.37 КБ) 105 скачиваний
Аватара пользователя
Карбофос
Опытный кот
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

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

Сообщение Карбофос »

Я бы предложил вот-так написать функцию 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++);
}
Реклама
Эиком - электронные компоненты и радиодетали
PE4ENbKA_173
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср фев 23, 2022 15:40:56

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

Сообщение 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]
Выполнил замену не помогло. Пробовал и так и этак, не поменялся результат. Полез в настройки оптимизации еще раз, один раз скомпилировалось а второй раз уже нет. скорее просто не отобразилось сообщение. В прочем ладно с этим. Я сейчас думаю как же компилятору в свойства добавить команды. Все облазил, не вижу.
Вот такое меню настроек проекта
Изображение
А вторая картинка это настройки билдера, вообще не густо
Изображение
Реклама
Аватара пользователя
Карбофос
Опытный кот
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

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

Сообщение Карбофос »

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);
}

Вложения
3files.rar
(3.3 КБ) 90 скачиваний
Реклама
PE4ENbKA_173
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср фев 23, 2022 15:40:56

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

Сообщение PE4ENbKA_173 »

[uquote="Карбофос",url="/forum/viewtopic.php?p=4227587#p4227587"]
PE4ENbKA_173 писал(а):как же компилятору в свойства добавить команды
Очевидно, на 1-ой картинке зайти "AVR GNU C Compiler" и далее по закладкам.
Сам средой не пользуюсь.
Так-же, если найдёте где, попробуйте включить "Link-time optimization" (-flto).
Можно еще ваши строки вынести во флэш память.[/uquote]
кажись понимаю что делать, что ж. займусь этим уже во вторник, думаю у меня все получится.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
PE4ENbKA_173
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср фев 23, 2022 15:40:56

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

Сообщение 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);
}
эти функции делают одно и то же или совершенно разные?
Ответить

Вернуться в «AVR»