Обсуждаем контроллеры компании Atmel.
Ответить

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

Чт май 05, 2022 16:37:13

У меня проблема при компиляции проекта в режиме 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 KiB) Скачиваний: 42

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

Чт май 05, 2022 19:53:06

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

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

Пт май 06, 2022 12:54:21

Если-б выложили исходный текст программы, возможно, кто-то мог подсказать, как её сократить.
Ну, и, можно к опциям компилятора добавить: -ffunction-sections -fdata-sections, если таких опций нет.

Я могу выложить код но он в нескольких файлах, разделен на библиотеки и файлы кода.
Скажите как добавить в опции компилятора добавить эти команды? У меня Microchip studio (он же атмел). В их настройках черт ногу сломит.
Приложил в файлы архив проекта. Просто не хочу засорять вставками сообщение, ибо потом еще хуже выловить отсюда смысл кода будет.
Вложения
opticir.zip
Проект приема ИК сигналов
(50.37 KiB) Скачиваний: 80

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

Спойлер
Код:
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 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);
}

Вложения
3files.rar
(3.3 KiB) Скачиваний: 70

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

Пт май 06, 2022 15:39:01

PE4ENbKA_173 писал(а):как же компилятору в свойства добавить команды

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

кажись понимаю что делать, что ж. займусь этим уже во вторник, думаю у меня все получится.

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

Пт май 06, 2022 18:39:15

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

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

Вт май 10, 2022 10:10:10

Добавлено after 25 minutes 1 second:
[/code][/spoiler]
uart.c
Спойлер
Код:
void uart_puts_pgm(const char *s)
{
   uint8_t c;
   while((c = pgm_read_byte(s++)) != 0)
      uart_putc(c);
}



у меня тут возникла проблема, указанной тут функции 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);
}

эти функции делают одно и то же или совершенно разные?
Ответить