Перейти к содержанию
    

Расположение нескольких массивов во внешней flash?

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

 

Или ткните в мануал, где это написано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Keil ARM

 

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

 

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

Когда-то делал подобное... Нужно использовать __attribute__(section ("name")) для каждой переменной, и секцию объявить в скаттер файле. Поищите на arm.com примеры. Если не найдёте, пишите, пороюсь завтра в старых проектах.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Массивов много и высчитывать каждый ....

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Зачем усложнять. Чуйка подсказывает, что можно проще, путем простого объявления сегмента

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Keil ARM

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

 

У кейла можно сделать это галками, в свойствах файла.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем усложнять. Чуйка подсказывает, что можно проще, путем простого объявления сегмента

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ну если вы программируешь через анус ... :laughing: то вы конечно супер-попель программер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У кейла можно сделать это галками, в свойствах файла.

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

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

 

сдается мне объявив массив 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)
  }
}

 

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

 

Всем ответившим огромное спасибо!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогло. Спасибо.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Незнаю, у меня работает. Наверное глюк компилятора ... :rolleyes:

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

 

Незнаю, у меня работает. Наверное глюк компилятора ... :rolleyes:

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

 

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

Настройки линкера минимальны

СПС!

Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...