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

 
 
> Запись константы по нужному адресу во FLASH, IAR for ARM 6.40.2
MackNill
сообщение Oct 8 2012, 04:19
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843



В моем контроллере отсутсвует EEPROM, поэтому вынужден использовать flash для хранения параметров.
Могу конечно изменить скомпилированный HEX-файл, но это уж как то не по научному.
Помогите под как, что и где писать.
Нужно записать 27 32-битных переменных начиная с адреса 0x00007e00.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MackNill
сообщение Oct 8 2012, 07:00
Сообщение #2





Группа: Участник
Сообщений: 13
Регистрация: 8-10-12
Пользователь №: 73 843



Зачем тогда форумы?
Решил сделать цикл в программе отвечающий, за запись первоначальных значений, осталось только зарезервировать память.
Как записывать с помощью программы я разобрался,и как считывать тоже. А как резервировать и писать во флеш с помощью компилятора я не разобрался. Поэтому сюда и написал, ибо нужна помощь.
Этот app note я уже читал, и к сожалению не нашел там ответа. к нему еще прилагается сам пример, его я тоже просмотрел.

Сообщение отредактировал MackNill - Oct 8 2012, 07:01
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 13:59
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(MackNill @ Oct 8 2012, 10:00) *
Как записывать с помощью программы я разобрался,и как считывать тоже. А как резервировать и писать во флеш с помощью компилятора я не разобрался. Поэтому сюда и написал, ибо нужна помощь.

Так в IARARM не получается делать:
Код
volatile uint32_t Settings[27] @ 0x00007e00;

?
Go to the top of the page
 
+Quote Post
SSerge
сообщение Oct 8 2012, 15:57
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(_Артём_ @ Oct 8 2012, 20:59) *
Так в IARARM не получается делать:
?

А у меня получается. Наверное дело в том, что указание адреса через @ это не предусмотренное стандартом расширение языка.
Чтобы его можно было применять нужно разрешить компилятору использовать расширения (выбрать (*)Standard with IAR extensions).

Если же хочется стандарта, можно это сделать через #pragma и описание дополнительных секций линкеру. И то и другое описано в документации.
Впрочем, простейший способ ничего такого не требует, кроме как прочитать в учебнике о преобразовании типов, а именно целых литералов к типу указатель.

uint32_t *ptr = (uint32_t*) 0x00007e00;
и через этот указатель и работать.
Нужно только позаботиться чтобы эта память кому-нибудь ещё не досталась. Проще всего использовать страницы в конце флэша, а линкеру соответственно уменьшить размер доступной памяти, чтобы он там ничего не смог разместить.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 19:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(SSerge @ Oct 8 2012, 18:57) *
А у меня получается. Наверное дело в том, что указание адреса через @ это не предусмотренное стандартом расширение языка.
Чтобы его можно было применять нужно разрешить компилятору использовать расширения (выбрать (*)Standard with IAR extensions).

Через @ можно объявить __no_init массив , но не получается задать значения элементов.

Получается, что делать через скрипт линкера самое правильное решение.
Go to the top of the page
 
+Quote Post



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

 


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


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