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

 
 
 
Reply to this topicStart new topic
ZSN1
сообщение Aug 24 2015, 05:47
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-15
Пользователь №: 88 062



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)
  }
}


Или ткните в мануал, где это написано?
Go to the top of the page
 
+Quote Post
bugdesigner
сообщение Aug 24 2015, 18:57
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 12-06-15
Из: Земля
Пользователь №: 87 133



Цитата(ZSN1 @ Aug 24 2015, 08:47) *
Keil ARM

Чет ума не приложу как объявить сегмент при расположении массивов?

Нашел только __at (0x80000000)

Когда-то делал подобное... Нужно использовать __attribute__(section ("name")) для каждой переменной, и секцию объявить в скаттер файле. Поищите на arm.com примеры. Если не найдёте, пишите, пороюсь завтра в старых проектах.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 24 2015, 21:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ZSN1 @ Aug 24 2015, 08:47) *
Массивов много и высчитывать каждый ....

Говорят, что кроме массивов существуют "структуры". Настоятельно рекомендую познакомиться, как и вообще с языком 'C' - ну хоть немного!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ZSN1
сообщение Aug 25 2015, 04:55
Сообщение #4





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-15
Пользователь №: 88 062



Цитата(zltigo @ Aug 24 2015, 22:23) *
Говорят, что кроме массивов существуют "структуры". Настоятельно рекомендую познакомиться, как и вообще с языком 'C' - ну хоть немного!

Зачем усложнять. Чуйка подсказывает, что можно проще, путем простого объявления сегмента
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 25 2015, 05:14
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(ZSN1 @ Aug 24 2015, 08:47) *
Keil ARM
Чет ума не приложу как объявить сегмент при расположении массивов?


У кейла можно сделать это галками, в свойствах файла.
Естественное ограничение - в эту область памяти переедет всё содержимое файла.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2015, 05:14
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ZSN1 @ Aug 25 2015, 07:55) *
Зачем усложнять. Чуйка подсказывает, что можно проще, путем простого объявления сегмента

"Усложнять"??? Ну если для Вас простой путь проходит через анус, то тогда, конечно....



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ZSN1
сообщение Aug 25 2015, 05:29
Сообщение #7





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-15
Пользователь №: 88 062



Цитата(zltigo @ Aug 25 2015, 06:14) *
"Усложнять"??? Ну если для Вас простой путь проходит через анус, то тогда, конечно....

Ну если вы программируешь через анус ... laughing.gif то вы конечно супер-попель программер
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 25 2015, 05:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



сдается мне объявив массив const он сам поедет в секцию ROM
Go to the top of the page
 
+Quote Post
ZSN1
сообщение Aug 25 2015, 05:43
Сообщение #9





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-15
Пользователь №: 88 062



Цитата(esaulenka @ Aug 25 2015, 06:14) *
У кейла можно сделать это галками, в свойствах файла.
Естественное ограничение - в эту область памяти переедет всё содержимое файла.

Тоже выход. Спасибо!

Цитата(Golikov A. @ Aug 25 2015, 06:31) *
сдается мне объявив массив const он сам поедет в секцию ROM

Не едет суко. Остается в процессорной flash. Чтоб поехал - надо пинка дать laughing.gif

Цитата(bugdesigner @ Aug 24 2015, 19:57) *
Когда-то делал подобное... Нужно использовать __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)
  }
}


+ немного поправить настройки линкера ...

Всем ответившим огромное спасибо!!!
Go to the top of the page
 
+Quote Post
bugdesigner
сообщение Aug 25 2015, 07:49
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 12-06-15
Из: Земля
Пользователь №: 87 133



Цитата(ZSN1 @ Aug 25 2015, 08:43) *
Помогло. Спасибо.

Не знаю, как у Вас получилось :-/ 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

Сообщение отредактировал bugdesigner - Aug 25 2015, 07:51
Go to the top of the page
 
+Quote Post
ZSN1
сообщение Aug 25 2015, 11:56
Сообщение #11





Группа: Новичок
Сообщений: 9
Регистрация: 20-08-15
Пользователь №: 88 062



Незнаю, у меня работает. Наверное глюк компилятора ... rolleyes.gif
Может линкер взял LR_ROM1 как адрес 0x80000000 и все? или я переубедил его настройками линкера, которые основательно перекопал ...

Незнаю, у меня работает. Наверное глюк компилятора ... rolleyes.gif
Может линкер взял LR_ROM1 как адрес 0x80000000 и все? или я переубедил его настройками линкера, которые основательно перекопал ...

Попробовал по вашему - обновление экрана возросло в разы!
Настройки линкера минимальны
СПС!

Сообщение отредактировал IgorKossak - Aug 25 2015, 17:40
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 11:37
Рейтинг@Mail.ru


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