реклама на сайте
подробности

 
 
> ошибка в avr-gcc
ReAl
сообщение Feb 3 2009, 18:50
Сообщение #1


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



как это ни странно, в верхних двух десятках тем не нашёл подходящей ;-)

Странная ошибка в 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) этой ошибки нет


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
demiurg_spb
сообщение Feb 3 2009, 20:50
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



К сожалению, подсказать Вам мне нечего, но примерно пол-года назад проскакивала проблема с prog_char в С++ и её вроде как решили.
Может это на что-то вас наведёт...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
SysRq
сообщение Feb 3 2009, 23:37
Сообщение #3


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Описание бага уже было, но вот .c и .cpp не проверяли.

PS: если дописать static, то работает как надо.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 4 2009, 07:15
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(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 убрал.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.02339 секунд с 7
ELECTRONIX ©2004-2016