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

 
 
> Массив констант разместить во flash памяти.
Dan_Dima
сообщение Feb 14 2007, 22:35
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 18-01-07
Пользователь №: 24 530



Необходимо массив констант разместить во flash памяти. Как это сделать в C (компилятор IAR). Массив задаеться изначально и потом не меняеться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Serg_el
сообщение Jul 24 2008, 10:01
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Вот назрел вопрос...
Если я хочу записать константу по определенному адресу, то я пишу следующую строку:

const unsigned char x @ 0x01000 = 1;

Но, если я не использую "x" далее в программе, а обращаюсь к адресу 0x01000 другими способами, то компилятор не записывает 1 по этому адресу. Как это обойти?
Go to the top of the page
 
+Quote Post
msalov
сообщение Jul 24 2008, 12:27
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Serg_el @ Jul 24 2008, 13:01) *
Вот назрел вопрос...
Если я хочу записать константу по определенному адресу, то я пишу следующую строку:

const unsigned char x @ 0x01000 = 1;

Но, если я не использую "x" далее в программе, а обращаюсь к адресу 0x01000 другими способами, то компилятор не записывает 1 по этому адресу. Как это обойти?

Прошу прощения за любопытство, но зачем вам такая константа?
Если необходимо значение хранящееся во флеш по фиксированному адресу, я делаю так
Код
__no_init const unsigned int    PARAM        @  ADDRESS;
Go to the top of the page
 
+Quote Post
Serg_el
сообщение Jul 24 2008, 12:40
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Цитата(gotty @ Jul 24 2008, 16:27) *
Прошу прощения за любопытство, но зачем вам такая константа?
Если необходимо значение хранящееся во флеш по фиксированному адресу, я делаю так
Код
__no_init const unsigned int    PARAM        @  ADDRESS;


Я инициализирую устройство константами, затем во время работы они изменяются. Но обращаюсь я к ним не через имя константы.

Нужны известные фиксированные адреса, например, чтобы туда записывать серийный номер при программировании.

Сообщение отредактировал Serg_el - Jul 24 2008, 12:42
Go to the top of the page
 
+Quote Post
msalov
сообщение Jul 24 2008, 12:43
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Serg_el @ Jul 24 2008, 15:40) *
Я инициализирую устройство константами, затем во время работы они изменяются. Но обращаюсь я к ним не через имя константы.

В таком случае выражение вида
Код
const unsigned char x @ 0x01000 = 1;
в корне неверно, так как вы указываете, что ваша константа никоим образом не изменяется, компилятор конежно же такую константу из памяти выкидывает и заменяет её на значения.
Используйте обьявление которое я вам привёл и наслаждайтесь программированием.
Go to the top of the page
 
+Quote Post
Serg_el
сообщение Jul 24 2008, 12:52
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Цитата(gotty @ Jul 24 2008, 16:43) *
В таком случае выражение вида
Код
const unsigned char x @ 0x01000 = 1;
в корне неверно, так как вы указываете, что ваша константа никоим образом не изменяется, компилятор конежно же такую константу из памяти выкидывает и заменяет её на значения.
Используйте обьявление которое я вам привёл и наслаждайтесь программированием.


Ну почему же неверно? Я указываю, что ячейка flash памяти с адресом 0x1000 содержит значение 1. Компилятор понимает, что ее использовать в его нуждах нельзя.
Дальнейшее программирование этого сегмента памяти происходит косвенным способом.

Ваш способ не позволяет инициализировать данную ячейку памяти каким-либо значением. Это только лишь запрет для компилятора на ее использование.
Go to the top of the page
 
+Quote Post
msalov
сообщение Jul 24 2008, 12:58
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Serg_el @ Jul 24 2008, 15:52) *
Ну почему же неверно? Я указываю, что ячейка flash памяти с адресом 0x1000 содержит значение 1. Компилятор понимает, что ее использовать в его нуждах нельзя.
Дальнейшее программирование этого сегмента памяти происходит косвенным способом.

Ваш способ не позволяет инициализировать данную ячейку памяти каким-либо значением. Это только лишь запрет для компилятора на ее использование.


Вы же сами написали что значение будет время от времени изменяться. А как Вы планируете это делать? Так вот тем же самым способом и инициализируются константы.
P.S. И не забывайте про контроль целостности констант.
Go to the top of the page
 
+Quote Post
Serg_el
сообщение Jul 24 2008, 13:07
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Цитата(gotty @ Jul 24 2008, 16:58) *
Вы же сами написали что значение будет время от времени изменяться. А как Вы планируете это делать? Так вот тем же самым способом и инициализируются константы.
P.S. И не забывайте про контроль целостности констант.


Запись flash:
#define SEGMENT_D 0x1000
...

write_flash(SEGMENT_D + offset, data);

offset соответственно определяет смещение относительно начала сегмента,
т.е. для x - offset =0; для y - offset = 1 и т.д.

Т.е. нет смысла при записи использовать какие-либо имена, имея фиксированные адреса.

Производить инициализацию при первом включении по условию задачи нельзя.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 24 2008, 13:31
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Serg_el @ Jul 24 2008, 19:07) *
Производить инициализацию при первом включении по условию задачи нельзя.
Речь о IAR идет? Если да, то выделите в xcl-файле свой собственный сегмент для констант и используйте себе на здоровье в программе его адрес как значение указателя. Без вашей санкции компилятор в выделенном вами сегменте ничего размещать не будет.
Для того, чтобы определить дефолтные значения этих констант еще на этапе программирования кристалла, "пристегните" к прошивке отдельный файл с этими значениями. В последних версиях IAR есть такая опция.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Serg_el
сообщение Jul 24 2008, 13:56
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Цитата(rezident @ Jul 24 2008, 17:31) *
Речь о IAR идет? Если да, то выделите в xcl-файле свой собственный сегмент для констант и используйте себе на здоровье в программе его адрес как значение указателя. Без вашей санкции компилятор в выделенном вами сегменте ничего размещать не будет.
Для того, чтобы определить дефолтные значения этих констант еще на этапе программирования кристалла, "пристегните" к прошивке отдельный файл с этими значениями. В последних версиях IAR есть такая опция.


Спасибо. Это уже намного интереснее!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dan_Dima   Массив констант разместить во flash памяти.   Feb 14 2007, 22:35
- - jorikdima   const int arr[10]   Feb 14 2007, 22:44
|- - Dan_Dima   Цитата(jorikdima @ Feb 14 2007, 22:44) co...   Feb 14 2007, 23:13
|- - rezident   Цитата(Dan_Dima @ Feb 15 2007, 01:13) Цит...   Feb 14 2007, 23:43
- - Alex11   Есть еще прямой модификатор __flash. Я только не п...   Feb 15 2007, 01:19
|- - rezident   Цитата(Alex11 @ Feb 15 2007, 03:19) Есть ...   Feb 15 2007, 02:07
- - VAI   Цитата(Dan_Dima @ Feb 15 2007, 00:13) Цит...   Feb 15 2007, 07:26
- - rvk   const word mnday @0xС600 = {....} размещает по за...   Feb 15 2007, 08:44
- - jorikdima   вы все таки наверно хотели спрость/сказать следующ...   Feb 15 2007, 10:08
- - VAI   да не переписывается он в РАМ и читается из флэшь,...   Feb 15 2007, 10:48
- - Dan_Dima   Все спасибо за помощь. Все правильно мой глюк м...   Feb 15 2007, 15:31
|- - rezident   Цитата(Dan_Dima @ Feb 15 2007, 17:31) чер...   Feb 15 2007, 15:42
|- - Dan_Dima   Цитата(rezident @ Feb 15 2007, 15:42) Цит...   Feb 15 2007, 17:03
|- - gotty   Цитата(Serg_el @ Jul 24 2008, 16:07) Запи...   Jul 24 2008, 13:12
||- - Serg_el   Цитата(gotty @ Jul 24 2008, 17:12) А в чё...   Jul 24 2008, 13:17
- - VAI   ну и обратитесь где нибудь к нему, как к "х...   Jul 24 2008, 11:08
- - Serg_el   Цитата(VAI @ Jul 24 2008, 15:08) ну и обр...   Jul 24 2008, 11:43


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

 


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


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