ZSN1 0 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Keil ARM Чет ума не приложу как объявить сегмент при расположении массивов? Нашел только __at (0x80000000) Для второго и последующего делаю пока так const double __at(0x80000000) Tabl_acos[10000] = { ..... }; const double __at(0x80000000) Tabl_asin[10000 + 10000*8] = { ..... }; и т.д. Массивов много и высчитывать каждый .... Как вставить объявление секции LR_ROM1 из scater файла в программу? ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x00000000 0x00080000 { ; load region size_region ER_IROM1 0x00000000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x40000000 0x00010000 { ; RW data .ANY (+RW +ZI) } } LR_ROM1 0x80000000 0x00400000 { ER_ROM1 0x80000000 0x00400000 { ; load address = execution address .ANY (+RO) } } Или ткните в мануал, где это написано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bugdesigner 0 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Keil ARM Чет ума не приложу как объявить сегмент при расположении массивов? Нашел только __at (0x80000000) Когда-то делал подобное... Нужно использовать __attribute__(section ("name")) для каждой переменной, и секцию объявить в скаттер файле. Поищите на arm.com примеры. Если не найдёте, пишите, пороюсь завтра в старых проектах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Массивов много и высчитывать каждый .... Говорят, что кроме массивов существуют "структуры". Настоятельно рекомендую познакомиться, как и вообще с языком 'C' - ну хоть немного! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZSN1 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Говорят, что кроме массивов существуют "структуры". Настоятельно рекомендую познакомиться, как и вообще с языком 'C' - ну хоть немного! Зачем усложнять. Чуйка подсказывает, что можно проще, путем простого объявления сегмента Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Keil ARM Чет ума не приложу как объявить сегмент при расположении массивов? У кейла можно сделать это галками, в свойствах файла. Естественное ограничение - в эту область памяти переедет всё содержимое файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба Зачем усложнять. Чуйка подсказывает, что можно проще, путем простого объявления сегмента "Усложнять"??? Ну если для Вас простой путь проходит через анус, то тогда, конечно.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZSN1 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба "Усложнять"??? Ну если для Вас простой путь проходит через анус, то тогда, конечно.... Ну если вы программируешь через анус ... :laughing: то вы конечно супер-попель программер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба сдается мне объявив массив const он сам поедет в секцию ROM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZSN1 0 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба У кейла можно сделать это галками, в свойствах файла. Естественное ограничение - в эту область памяти переедет всё содержимое файла. Тоже выход. Спасибо! сдается мне объявив массив const он сам поедет в секцию ROM Не едет суко. Остается в процессорной flash. Чтоб поехал - надо пинка дать :laughing: Когда-то делал подобное... Нужно использовать __attribute__(section ("name")) для каждой переменной, и секцию объявить в скаттер файле. Поищите на arm.com примеры. Если не найдёте, пишите, пороюсь завтра в старых проектах. Помогло. Спасибо. __attribute__((section ("LR_ROM1"))) const unsigned short array[104312] = { ...... }; Скаттер ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x00000000 0x00080000 { ; load region size_region ER_IROM1 0x00000000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x40000000 0x00010000 { ; RW data .ANY (+RW +ZI) } } LR_ROM1 0x80000000 0x00400000 { ER_ROM1 0x80000000 0x00400000 { ; load address = execution address .ANY (+RO) } } + немного поправить настройки линкера ... Всем ответившим огромное спасибо!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bugdesigner 0 25 августа, 2015 Опубликовано 25 августа, 2015 (изменено) · Жалоба Помогло. Спасибо. Не знаю, как у Вас получилось :-/ LR_ROM1 - это load region, а не имя секции. Имя секции (например extrom) нужно объявить в этом регионе. Правильно будет так (поправил Ваш пример): __attribute__((section ("extrom"))) const unsigned short array[104312] = { ...... }; Скаттер LR_IROM1 0x00000000 0x00080000 { ; load region size_region ER_IROM1 0x00000000 0x00080000 {; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x40000000 0x00010000 {; RW data .ANY (+RW +ZI) } } LR_ROM1 0x80000000 0x00400000 { ER_ROM1 0x80000000 0x00400000 {; load address = execution address *(extrom) } } PS: И адреса проверьте, точно ли они соответствуют физической карте адресов Вашего ARM Изменено 25 августа, 2015 пользователем bugdesigner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZSN1 0 25 августа, 2015 Опубликовано 25 августа, 2015 (изменено) · Жалоба Незнаю, у меня работает. Наверное глюк компилятора ... :rolleyes: Может линкер взял LR_ROM1 как адрес 0x80000000 и все? или я переубедил его настройками линкера, которые основательно перекопал ... Незнаю, у меня работает. Наверное глюк компилятора ... :rolleyes: Может линкер взял LR_ROM1 как адрес 0x80000000 и все? или я переубедил его настройками линкера, которые основательно перекопал ... Попробовал по вашему - обновление экрана возросло в разы! Настройки линкера минимальны СПС! Изменено 25 августа, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться