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

 
 
 
Reply to this topicStart new topic
> EWARM Error[Be006], Не размещает массив с указателями во FLASH
Obam
сообщение Nov 21 2016, 13:16
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Любезное сообщество, вожусь с SAM3S1A в среде EWARM 6.40…

RO cекция в .icf файле объявлена:
Код
define region ROM_region     = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
place at end of ROM_region {ro data section BITMAPS};

Байтовые массивы (битмапы для ЖКМ) в секцию BITMAPS размещаются:
Код
const uint8_t BitMap_Digit_0[] @"BITMAPS" = {0x00, 0xFE, 0xFF, 0x01, 0x01, 0xFF, 0xFE, 0x00,//    0
                             0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00};
Ну и понятно, такие же массивы от BitMap_Digit_1 до BitMap_Blank.

Структуры, описывающие битмапы:
Код
const struct bitmap_t _Digit_0 @"BITMAPS" = {10, 8, (uint8_t *)&BitMap_Digit_0};
в эту же секцию тоже размещаются, нет вопросов. Соответственно такие же структуры от _Digit_1 до _Blank.

А вот массив с указателями на битмапы (точнее с указателями на структуры, описывающие битмапы):
Код
const struct bitmap_t *Nmbr10x8[] @"BITMAPS" = {&_Digit_0, &_Digit_1, &_Digit_2, &_Digit_3, &_Digit_4,
                       &_Digit_5, &_Digit_6, &_Digit_7, &_Digit_8, &_Digit_9,
                       &_DcmlPnt, &_MnsSign, &_Blank};
вызывает ошибку Error[Be006]: conflicting attributes for segment/section "BITMAPS".

В листинге это выглядит так:
Код
     41          #include    "Bitmaps_SAM3S1.h"

  const struct bitmap_t *Nmbr10x8[] @"BITMAPS" = {&_Digit_0, &_Digit_1, &_Digit_2, &_Digit_3, &_Digit_4,
                        ^
"D:\ARM\Bitmaps_SAM3S1.h",82  Error[Be006]: conflicting attributes for segment/section "BITMAPS"
- "не нравится" массив из указателей.
Какой атрибут с каким конфликтует, я мозг уже вывихнул. "IAR C/C++ Development Guide. Compiling and Linking" - да, читал и читаю wink.gif

Если из определения "const struct bitmap_t *Nmbr10x8[]" удалить @"BITMAPS", то массив размещается в ОЗУ, мне же надобно во flash.
На ассме вообще не вопрос, но нельзя (не поймут)…

Т.е. компилятор/линкер не могут определить и разместить во flash массив с указателями? Есть "лекарство" от "недуга"?



--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
novikovfb
сообщение Nov 21 2016, 13:23
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450



попробуйте
const struct bitmap_t * const Nmbr10x8[]
т.е. указать компилятору, что не только результат обращения по указателю - константа, но и сам указатель - тоже константа
Go to the top of the page
 
+Quote Post
Obam
сообщение Nov 21 2016, 14:00
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



"Доктор, вы кудесник!"

Благодарствуйте, сударь sm.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post

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

 


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


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