|
Эмуляция EEPROM в первых двух секторах STM32F4, Старт программы с предопределённого адреса |
|
|
|
Aug 28 2013, 04:48
|

Участник

Группа: Участник
Сообщений: 15
Регистрация: 2-05-11
Пользователь №: 64 731

|
Всем добрый день. Для камня STM32F407 взял эмулятор EEPROM с сайта st. Вложил в свой проект с оригинальными настройками как в примере. Всё вроде как работает нормально. Но там EEPROM эмулируется во втором и третьем секторах FLASH памяти (которые по 16к). Я в своём проекте перенёс эмуляцию EEPROM в первые два сектора и соответственно сдвинул таблицу векторов прерывания на второй сектор: Код define symbol __ICFEDIT_intvec_start__ = 0x08008000; (в stm32f4xx_flash.icf) #define VECT_TAB_OFFSET 0x8000 (в system_stm32f4xx.c) Необходимые изменения внёс в eeprom.h. В своём проекте в начале вставил пример записи трёх переменных в память. Всё как бы работает, НО только с отладчиком из IAR контроллер стартует как надо. Если сделать сброс кнопкой, то уже не стартует. Я пока перенёс эмуляцию EEPROM в последние два сектора, но они по 128к и откусывать пол флеша как-то не охота. В такой конфигурации всё работает как надо. Чувствую, что надо указать в прерывании сброса откуда стартовать программе. Помогите разобраться с проблемкой. Спасибо.
--------------------
Александр, UT4UBL
|
|
|
|
|
 |
Ответов
|
Oct 7 2014, 06:41
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
Цитата(AlexUT4 @ Aug 28 2013, 22:40)  Большое спасибо за наводку.... сделал по такому примеру, всё работает, но есть следующий вопрос: При такой записи регион с дырой получается, но есть одно НО, вектора прерываний разместятся с адреса 0x08000000, а код весь будет размещён после выделенных регионом под EEPROM. Т.е. такой записи (где используются сектора 1 и 2) код разместится с адреса 0x0800c000, а если назначить для эмуляции EEPROM сектора 2 и 3, то код разместится уже по адресу 0x08010000. Т.о. получается, если делать дыру во флеши для EEPROM надо использовать всегда сектора начиная с 1-го иначе будет потеря секторов флеши. И также 0 сектор тоже практически будет потерян по памяти, т.к. в нём кроме таблицы прерываний ничего не размещается (т.е. для эмуляции EEPROM будут потеряны 3 сектора, 2 сектора на EEPROM, а один будет гулять практически пустым). Можно ли это как то обойти, может ещё нужно в линкере чего-то прописывать? Прибивать ф-ции или массивы констант по конкретным адресам желания нет. В данном проект памяти хватает и потеря 3-х секторов по 16К не критична, но на будущее хочется уметь использовать всю память
Сообщение отредактировал IgorKossak - Oct 7 2014, 14:11
Причина редактирования: избыточное цитирование
|
|
|
|
|
Oct 7 2014, 10:14
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Rash @ Oct 7 2014, 10:41)  Можно ли это как то обойти, может ещё нужно в линкере чего-то прописывать? Прибивать ф-ции или массивы констант по конкретным адресам желания нет. ИМХО, такой фичи нет. Цитата(Rash @ Oct 7 2014, 10:41)  В данном проект памяти хватает и потеря 3-х секторов по 16К не критична, но на будущее хочется уметь использовать всю память Ну так и не надо дёргаться раньше времени. Страшный день, когда кончится память, скорее всего никогда не наступит. Кроме того, как известно, "преждевременная оптимизация - корень всех зол". А если когда-нибудь действительно припрёт, то ручками разложить секции не так уж и сложно.
|
|
|
|
Сообщений в этой теме
AlexUT4 Эмуляция EEPROM в первых двух секторах STM32F4 Aug 28 2013, 04:48 Сергей Борщ QUOTE (AlexUT4 @ Aug 28 2013, 06:48) Чувс... Aug 28 2013, 05:40 scifi Цитата(AlexUT4 @ Aug 28 2013, 08:48) Но т... Aug 28 2013, 07:02 AlexUT4 Цитата(Сергей Борщ @ Aug 28 2013, 08:40) ... Aug 28 2013, 08:04 scifi Цитата(AlexUT4 @ Aug 28 2013, 12:04) есть... Aug 28 2013, 08:56 Сергей Борщ QUOTE (AlexUT4 @ Aug 28 2013, 10:04) То е... Aug 28 2013, 09:18  scifi Цитата(Сергей Борщ @ Aug 28 2013, 13:18) ... Aug 28 2013, 09:33 toweroff Цитата(AlexUT4 @ Aug 28 2013, 12:04) есть... Aug 28 2013, 09:26 AlexUT4 Цитата(Сергей Борщ @ Aug 28 2013, 12:18) ... Aug 28 2013, 09:45 scifi Цитата(AlexUT4 @ Aug 28 2013, 13:45) Но к... Aug 28 2013, 11:48 toweroff Я с Кейлом бы помог, но наверняка Ваш линкер имеет... Aug 28 2013, 10:11 AlexUT4 Цитата(scifi @ Aug 28 2013, 14:48) В ... Aug 28 2013, 19:40 scifi Цитата(AlexUT4 @ Aug 28 2013, 23:40) Но т... Aug 29 2013, 07:20 AlexUT4 Цитата(scifi @ Aug 29 2013, 10:20) Наверн... Aug 29 2013, 08:16 vlad_new Я тут то же ковырялся с дырой для флеша в кейле. Н... Aug 30 2013, 10:18 scifi Цитата(vlad_new @ Aug 30 2013, 14:18) Я т... Aug 30 2013, 12:03 A. Fig Lee С огнем играете. Сколько там циклов перезаписи?
У ... Aug 30 2013, 10:39 Сергей Борщ Цитата(Rash @ Oct 7 2014, 09:41) И также ... Oct 7 2014, 09:34  adnega Цитата(Сергей Борщ @ Oct 7 2014, 13:34) А... Oct 7 2014, 09:48  kolobok0 Цитата(Сергей Борщ @ Oct 7 2014, 13:34) .... Oct 7 2014, 17:58 Rash не много не по секторам, но про эмуляцию.
Модерни... Oct 8 2014, 14:17
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|