Obam 37 21 ноября, 2016 Опубликовано 21 ноября, 2016 · Жалоба Любезное сообщество, вожусь с 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 массив с указателями? Есть "лекарство" от "недуга"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 18 21 ноября, 2016 Опубликовано 21 ноября, 2016 · Жалоба попробуйте const struct bitmap_t * const Nmbr10x8[] т.е. указать компилятору, что не только результат обращения по указателю - константа, но и сам указатель - тоже константа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 21 ноября, 2016 Опубликовано 21 ноября, 2016 · Жалоба "Доктор, вы кудесник!" Благодарствуйте, сударь :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться