vit496 0 4 июля, 2023 Опубликовано 4 июля, 2023 · Жалоба Добрый день. Объявляю функцию, чтобы она выполнялась из 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. Можно ли как-то повлиять на этот адрес (задать свой)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 4 июля, 2023 Опубликовано 4 июля, 2023 · Жалоба 2 часа назад, vit496 сказал: То есть, копируется из этого адреса - 0x805'cad8. Можно ли как-то повлиять на этот адрес (задать свой)? Можно. Курите командный файл компоновщика (*.icf). 2 часа назад, vit496 сказал: ROM PS: ROM != FLASH. Ежли что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vit496 0 5 июля, 2023 Опубликовано 5 июля, 2023 (изменено) · Жалоба Методом проб и ошибок и файла 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, будет применено копирование согласно заданным секциям. Изменено 5 июля, 2023 пользователем vit496 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться