Столкнулся с проблемой. Сразу отмечу, что понимаю её корни и вижу несколько способов решения, но мне непонятно почему компилятор так поступает. Кто объяснит.
Смысл следующий. Я размещаю несколько массивов типа
Код
const uint8_t __rom Roll0[] =
{
0xDA, 0x54, 0x00, 0x00, 0x01, 0x60, 0xea, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x31, 0x5E, //
0xF7, 0x5E, 0x3A, 0x5E, 0xEC, 0x2E, 0x5E, 0xF1, 0x00, 0xDA, 0x54, 0x00, 0x00, 0x01, 0x60, 0xEA, //
0x08, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x23, 0x31, 0x5E, 0xC4, 0x2E, 0x5E, 0xCC, 0x2E, 0x5E, 0xC3, //
0x00, 0xDA, 0x45, 0x5F, 0xEA //
};
const uint8_t __rom Roll1[] =
{
0xDA, 0x54, 0x00, 0x00, 0x01, 0x70, 0x17, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x23, 0x43, 0x01, //
0x23, 0x31, 0x5E, 0xF7, 0x5E, 0x3A, 0x5E, 0xEC, 0x2E, 0x23, 0x43, 0x03, 0x5E, 0xF1, 0x00, 0xDA, //
0x54, 0x00, 0x00, 0x01, 0x60, 0xEA, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x23, 0x31, 0x23, 0x43, //
0x01, 0x5E, 0xC4, 0x2E, 0x5E, 0xCC, 0x2E, 0x5E, 0xC3, 0x00, 0xDA, 0x45, 0x5F, 0xEA //
};
и так далее ...
Потом объявляю массив ...
Код
const uint8_t __rom * const __rom AdrRoll[] =
{
(const uint8_t __rom *)&Roll0, (const uint8_t __rom *)&Roll1, (const uint8_t __rom *)&Roll2,
(const uint8_t __rom *)&Roll3, (const uint8_t __rom *)&Roll4, (const uint8_t __rom *)&Roll5,
(const uint8_t __rom *)&Roll6, (const uint8_t __rom *)&Roll7
};
Поскольку массивы идут попорядку, то я ожидал, что компилятор их и разместит попорядку во флэши. Причём в результирующем HEXе для AVR так и происходит. А для ARM7 компилятор разбрасывает массивы как хочет.
Почему это происходит?
Я бы хотел, чтобы они шли подряд. Как вариант вижу объединить их в структуру. Но непонятен мотив компилятора. Он что так место пытается экономить? Типа дырки забивает - так вроде не видно...
Кто подскажет?
PS: Проблема несколько сложнее чем показалось с первого взгляда. Размеры массивов разные и объединить их в структуру не очень удобно. Придётся явно объявлять их длину. А мне это делать очень неудобно. Они будут меняться от реализации к реализации. Высчитывать - нет желания. Хотелось бы простое и крассивое решение. Как компилятор заставить распологать массивы по порядку?