Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ошибка в avr-gcc
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
ReAl
как это ни странно, в верхних двух десятках тем не нашёл подходящей ;-)

Странная ошибка в avr-gcc при занесении переменных в program memory в режиме компиляции C++
Сборки WinAVR-20081205 (4.3.2) и kgp-20081223/1227 (4.4.0) помещают переменные prog_uint8_t в .data

Код
#include <avr/pgmspace.h>

extern const prog_uint8_t runa1 = 0x04;

prog_uint8_t runa2 = 0x0A;


Код
  85                   .global    runa1
  86                       .section    .rodata.runa1,"a",@progbits
  89                   runa1:
  90 0000 04                .byte    4
  98                   .global    runa2
  99                       .section    .data.runa2,"aw",@progbits
101                   runa2:
102 0000 0A                .byte    10


В режиме компиляции С - всё нормально.
В режиме С++ никакие extern "C" не помогают.
Если же объявить так

Код
const uint8_t runa1 PROGMEM = 0x04;
const uint8_t runa2 PROGMEM = 0x0A;

то и в режиме С++ всё нормально.

В WinAVR-20071221 (4.2.2) этой ошибки нет
demiurg_spb
К сожалению, подсказать Вам мне нечего, но примерно пол-года назад проскакивала проблема с prog_char в С++ и её вроде как решили.
Может это на что-то вас наведёт...
SysRq
Описание бага уже было, но вот .c и .cpp не проверяли.

PS: если дописать static, то работает как надо.
ReAl
Цитата(SysRq @ Feb 4 2009, 01:37) *
Описание бага уже было, но вот .c и .cpp не проверяли
Вот в .c как раз-то всё нормально и в 4.2.2, и в 4.3.2 и в 4.4.0

Код
const prog_uint8_t runa12 = 0x04;
...
  84                   .global    runa12
  85                       .section    .progmem.data,"a",@progbits
  88                   runa12:
  89 0000 04                .byte    4



Цитата(SysRq @ Feb 4 2009, 01:37) *
PS: если дописать static, то работает как надо.

laughing.gif 4.4.0, 4.3.2:
Код
static const prog_uint8_t runa1 = 0x04;
...
1802                       .section    .rodata._ZL5runa1,"a",@progbits
1805                   _ZL5runa1:
1806 0000 04                .byte    4

Со static как раз начиналось, оно так было в файле объявлено и внутри него использовалось. Это уже когда отдельный файл соорудил для проверки ошибки - лень было обращение писать и там static убрал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.