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

Размещение по определенному адресу во Flash

Добрый день.
Объявляю функцию, чтобы она выполнялась из RAM (__ramfunc). На этапе инициализации она копируется из какого-то места ROM.
В map файле это выглядит так:

Copy (__iar_copy_init3)
    1 source range, total size 0x124:
           0x805'cad8     0x124
    1 destination range, total size 0x124:
          0x2002'0000     0x124
...
  Initializer bytes   const     0x805'cad8     0x124  <for RamCode-1>

То есть, копируется из этого адреса - 0x805'cad8. Можно ли как-то повлиять на этот адрес (задать свой)?

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


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

2 часа назад, vit496 сказал:

То есть, копируется из этого адреса - 0x805'cad8. Можно ли как-то повлиять на этот адрес (задать свой)?

Можно. Курите командный файл компоновщика (*.icf).

2 часа назад, vit496 сказал:

ROM

PS: ROM != FLASH. Ежли что.

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


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

Методом проб и ошибок и файла EWARM_DevelopmentGuide.ENU.pdf вроде получилось сделать.
В .icf файл нужно добавить две секции - откуда и куда будет копирование.
Название секции во Flash, из которой будет происходить копирование, должно отличаться суффиксом "_init"  

define region sect_i_region = mem:[from 0x08070000 to 0x08077FFF];
place in sect_i_region { section sect_init };

define region sect_region = mem:[from 0x20020000 to 0x20027FFF];
place in sect_region { section sect };

initialize manually { section sect };

В коде нужно добавить функцию копирования:

#pragma section = "sect"
#pragma section = "sect_init"

void DoInit() {
  char * from = __section_begin("sect_init");
  char * to = __section_begin("sect");
  memcpy(to, from, __section_size("sect"));
}

void main () {
  DoInit();
  ....
}

#define slowrom  _Pragma("location=\"sect\"")

slowrom void some_func () {
  ....
}
slowrom const uint8_t str[] = "xxxxx";

Теперь, для всех функций и констант, при объявлении которых будет указано slowrom, будет применено копирование согласно заданным секциям.

Изменено пользователем vit496

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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