|
Разместить переменную во flash без модификатора const, Как? |
|
|
|
Nov 6 2009, 15:18
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154

|
Здравствуйте. Хочу разместить переменную во flash, а не в ОЗУ. Сделал следующее: 1. В icf-файл линкера написал следующее: Код place at address mem: 0x0001000 { readonly section ConstSection1 }; 2. Объявил переменную: Код typedef struct { int array[5]; int value2; }TEST;
#pragma location = "ConstSection1" __root const TEST test = {{0,1,2,3,4},100}; В результате она все равно размещается в rw-data: (из мап-файла:) Цитата ConstSection1 inited 0x400049f8 0x18 THROUGHPUT.o [1] .............. test 0x400049f8 0x18 Data Gb THROUGHPUT.o [1] Если объявить test как const TEST test, то тогда размещается так, как я хочу: Цитата Section Kind Address Size Object ------- ---- ------- ---- ------ "A1": 0x3c .intvec ro code 0x00000000 0x3c cstartup.o [4] - 0x0000003c 0x3c
"A2": 0x18 ConstSection1 const 0x00001000 0x18 THROUGHPUT.o [1] - 0x00001018 0x18 .................................................................... test 0x00001000 0x18 Data Gb THROUGHPUT.o [1] Компилятор : IAR ARM 5.0. Мне бы очень хотелось, чтобы во флаш можно было размещать переменные без модификатора соnst, это сильно упростило бы мне жизнь. Такое возможно?
--------------------
Все врут (с) /M.D.House/
|
|
|
|
|
 |
Ответов
|
Nov 9 2009, 14:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
Цитата(Dreamer @ Nov 7 2009, 01:18)  Здравствуйте. Хочу разместить переменную во flash, а не в ОЗУ.
Мне бы очень хотелось, чтобы во флаш можно было размещать переменные без модификатора соnst, это сильно упростило бы мне жизнь. Такое возможно? Это смотря для какого процессора. Почему-то здесь не обсуждают способы доступа к флэшу, как будто программируют в винде какой-нибудь. Если конкретный микроконтроллер позволяет обеспечить доступ к флэшу, аналогичный доступу к ОЗУ, то и на Си для этого контроллера наверняка его можно организовать. Например, в семействе avr (не xmega) доступ к флэшу идет довольно сложно: надо записать в адресные регистры адрес переменной, в управляющий регистр дать строб чтения (если надо прочитать), и потом считать регистр данных. Не думаю, что в Си для такого контроллера можно просто разместить данные во флэше и манипулировать ими так же, как в ОЗУ. В xmega есть memory-mapped режим доступа к флэшу, переменные легко разместить в сегменте ESEG (для ассемблера) и адресоваться к ним для чтения как к простой ячейке памяти просто (со смещением адреса на 0x1000). На Си это тоже реализовать должно быть легко, возможно, уже реализовано. При записи несколько сложнее, т.к. при записи в ячейку, принадлежащую области EEPROM, фактически данные пишутся в буферную память и переписываются во флэш командой записи. Плюс имеется ограничение на объем страницы для записи, так что в компиляторе Си вряд ли кто с этим будет заморачиваться.
Сообщение отредактировал V_G - Nov 9 2009, 14:29
|
|
|
|
Сообщений в этой теме
Dreamer Разместить переменную во flash без модификатора const Nov 6 2009, 15:18 zltigo Цитата(Dreamer @ Nov 6 2009, 18:18) Такое... Nov 6 2009, 17:43 Dreamer ЦитатаЭ.... ЗАЧЕМ!??? Думаете, что ее сможете ... Nov 9 2009, 08:20 GetSmart Цитата(Dreamer @ Nov 9 2009, 14:20) Мне ж... Nov 9 2009, 08:30 HARMHARM Гуглите const correctness. Нормально написанная фу... Nov 9 2009, 08:35  zltigo Цитата(HARMHARM @ Nov 9 2009, 11:35) Норм... Nov 9 2009, 09:03 Dreamer GetSmart, с принудительным преобразованием типов п... Nov 9 2009, 11:22 zltigo Цитата(Dreamer @ Nov 9 2009, 14:22) А выс... Nov 9 2009, 11:50 Dreamer zltigo,
Почему вы считаете, что если по вашему мн... Nov 9 2009, 13:07 zltigo Цитата(Dreamer @ Nov 9 2009, 16:07) счита... Nov 9 2009, 13:33 KRS А чего вы хотите? Как линкер может разместить данн... Nov 9 2009, 13:17 Dreamer ЦитатаКак линкер может разместить данные которые м... Nov 9 2009, 13:33 Dreamer ЦитатаДа, Ваши "желания" это показывают ... Nov 9 2009, 13:50 zltigo Цитата(Dreamer @ Nov 9 2009, 16:50) Какое... Nov 9 2009, 14:21 Сергей Борщ Цитата(V_G @ Nov 9 2009, 16:26) В xmega е... Nov 9 2009, 16:49 defunct Цитата(V_G @ Nov 9 2009, 16:26) Например,... Nov 13 2009, 13:26  V_G Цитата(defunct @ Nov 13 2009, 23:26) Таки... Nov 13 2009, 15:00   zltigo Цитата(V_G @ Nov 13 2009, 18:00) К Вашему... Nov 13 2009, 15:31    V_G Согласен, есть определенная путаница с терминологи... Nov 14 2009, 00:44     zltigo Цитата(V_G @ Nov 14 2009, 03:44) Заглянит... Nov 14 2009, 01:22      V_G Цитата(zltigo @ Nov 14 2009, 11:22) А это... Nov 14 2009, 01:56     Сергей Борщ Цитата(V_G @ Nov 14 2009, 02:44) В расшир... Nov 14 2009, 13:58      V_G Цитата(Сергей Борщ @ Nov 14 2009, 23:58) ... Nov 15 2009, 00:16       defunct Цитата(V_G @ Nov 15 2009, 02:16) Хотя есл... Nov 15 2009, 00:34       Сергей Борщ Цитата(V_G @ Nov 15 2009, 02:16) Вопрос т... Nov 15 2009, 17:56        zltigo Цитата(Сергей Борщ @ Nov 15 2009, 20:56) ... Nov 15 2009, 18:03         Сергей Борщ Цитата(zltigo @ Nov 15 2009, 20:03) потом... Nov 16 2009, 11:37          zltigo Цитата(Сергей Борщ @ Nov 16 2009, 14:37) ... Nov 16 2009, 11:43   defunct Цитата(V_G @ Nov 13 2009, 17:00) К Вашему... Nov 13 2009, 15:33 Dreamer Итить, опять двадцать пять.
Опять "трансформ... Nov 9 2009, 14:52 zltigo Цитата(Dreamer @ Nov 9 2009, 17:37) В тем... Nov 9 2009, 14:54 Dreamer Цитатаа не используете "свои другие решения... Nov 9 2009, 15:16 HARMHARM Цитата(Dreamer @ Nov 9 2009, 17:16) Но эт... Nov 9 2009, 16:38 Dreamer Сергей Борщ, я сначала специально не давал дальней... Nov 9 2009, 17:14 KRS да можно это сделать в IAR, можно! Просто надо... Nov 9 2009, 21:19 Dreamer Сергей Борщ. Вы абсолютно правильно меня поняли.
... Nov 17 2009, 10:57 zltigo Цитата(Dreamer @ Nov 17 2009, 13:57) Серг... Nov 17 2009, 11:16 sigmaN Не понял.
Если НЕ НУЖНО, то чего бы там const не ... Nov 17 2009, 13:59
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|