Любезное сообщество, вожусь с 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" - да, читал и читаю

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