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

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


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexUT4
сообщение Aug 28 2013, 09:45
Сообщение #2


Участник
*

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



Цитата(Сергей Борщ @ Aug 28 2013, 12:18) *
В целом - да. Фактически в нулевом секторе вам надо расположить два первых элемента таблицы (указатель стека и адрес вектора сброса). А в основной программе все равно надо будет иметь полную таблицу векторов и в процессе запуска программы записать ее адрес в регистр VTOR. Но ради чего все это городить? Почему не выделить под EEPROM последние сектора? Тогда вам достаточно будет в скрипте линкера уменьшить доступный программе объем флеша.


Два последних сектора по 128к. А это половина памяти МК. Не выгодно. Первые четыре сектора по 16к.

Цитата(toweroff @ Aug 28 2013, 12:26) *
вариантов месколько. Можно линковщику сказать, что флеш располагается тут и тут, а еепром-сектора обойти


также при эмуляции eeprom можно на получившийся адрес накладывать маску, которая позволит не "выпрыгнуть" за диапазон отведенных секторов



и loadregion разбивать не придется. Честно говоря, даже и не пробовал никогда собирать с "дырками"


хотя... эту область также можно в loadregion включить и получится без разрывов, только код в ней не размещать



Я сейчас линковщику указал что доступная память начиная с 0x0800C000 это Sector 3.
Код
define symbol __ICFEDIT_region_ROM_start__    = 0x0800C000

Вектора по умолчанию в начало флеша. В настройках эмулятора EEPROM
Код
#define EEPROM_START_ADDRESS  ((uint32_t)0x08004000)

это Sector 1.

В памяти основной код лёг с 0x0800C000. Основная таблица прерываний легла с 0x08000000.
По адресу 4 указатель на вектор прерывания, который расположен выше 0x0800C000. А там дальше SystemInit и стар основной программы.
Пока всё завелось и работает. Тестирую….

Но как-то не выгодно с этими секторами – получается, что первый сектор в 16к «гуляет почти свободным». Там сейчас всего не более 512 байт записано. Не рационально))))

Как указать линковщику, что бы он ничего не располагал с адреса 0x08004000 по 0x0800BFFF ? Тогда память будет выгоднее использоваться.


--------------------
Александр, UT4UBL
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 28 2013, 11:48
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(AlexUT4 @ Aug 28 2013, 13:45) *
Но как-то не выгодно с этими секторами – получается, что первый сектор в 16к «гуляет почти свободным». Там сейчас всего не более 512 байт записано. Не рационально))))

В "старом" яровском линкере (XLINK) можно было сказать линкеру, чтобы размещал в разных кусках памяти, типа так: -Z(CODE)CODE=0x08000000-0x08003FFF, 0x0800C000-0x0807FFFF. И ведь реально работало.
В "новом" линкере (ILINK) я не разбирался, но думаю, что он тоже это умеет (заглядывал в мануал). Попробуйте подправить файл конфигурации линкера:
define region ROM_region = mem:[from 0x08000000 to 0x08003FFF] mem:[from 0x0800C000 to 0x0807FFFF];
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - 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   Цитата(AlexUT4 @ Aug 28 2013, 22:40) Боль...   Oct 7 2014, 06:41
|- - Сергей Борщ   Цитата(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
|- - scifi   Цитата(Rash @ Oct 7 2014, 10:41) Можно ли...   Oct 7 2014, 10:14
- - Rash   не много не по секторам, но про эмуляцию. Модерни...   Oct 8 2014, 14:17


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 10:57
Рейтинг@Mail.ru


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