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

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

|
Цитата(Сергей Борщ @ Nov 14 2009, 23:58)  Вот только с точностью до наоборот. EEPROM = Electricaly Erasable Programmable Read Only Memory. То есть флешь является одной из разновидностей общего понятия EEPROM, а не наоборот, как пытаетесь доказать нам вы.
Вопрос был совсем о другом. Вопрос топикстартера:Мне бы очень хотелось, чтобы во флаш можно было размещать переменные без модификатора соnst, это сильно упростило бы мне жизнь. Такое возможно? Ответ zltigo по поводу возможности написания функции доступа к EEPROM любого контроллера как к ячейке памяти:Почему не касаться? Уже существующие позволяют, а уж в C++ и сами можете написать функции и перегрузить нужные операторы. Чем не ответ на вопрос? Особенно, если спрашивающему все-таки (случайно) удобнее держать константы на во флэше программ, а в EEPROM данных. Хотя если задача состоит не в том, чтобы ответить на вопрос (может быть, даже начинающего), а пофлеймить, уличить участника в глупости и помериться ммм... интеллектами, то на здоровье!
Сообщение отредактировал V_G - Nov 15 2009, 00:20
|
|
|
|
|
Nov 15 2009, 00:34
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(V_G @ Nov 15 2009, 02:16)  Хотя если задача состоит не в том, чтобы ответить на вопрос ... уличить участника Да никто не хочет уличивать участника специально. Просто бывает некоторые участники пишут небрежно, неточно, что не соответвует действительности и может сбить с толку особенно начинающего. Думайте перед тем как постить, проверяйте то, что Вы собрались запостить с документацией (или хотя бы с информацией с wiki) если действительно хотите помочь. Цитата Чем не ответ на вопрос? Сейчас Вы демонстрируете, только то, что не в теме заданного автором топика вопроса. Потому что Цитата Особенно, если спрашивающему все-таки (случайно) удобнее держать константы на во флэше программ, а в EEPROM данных. A. у контроллера который пользует автор топика нет EEPROM. B. спрашивающего удивляет тот факт что линкер не хочет класть данные объявленные как Read-Write (RW), в ReadOnly (RO) память. Изначальный вопрос автора - как заставить компилятор положить RW данные в RO регион памяти. Ответ - никак.
|
|
|
|
|
Nov 15 2009, 17:56
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(V_G @ Nov 15 2009, 02:16)  Вопрос топикстартера: Мне бы очень хотелось, чтобы во флаш можно было размещать переменные без модификатора соnst, это сильно упростило бы мне жизнь. Такое возможно? Ну и где здесь про необходимость модифицировать данные, размещенные во флешь? Вы ветку читали, или только первое и последнее сообщение? Автору надо передать в функцию указатель на данные, размещенные во флешь. Функция ингода (в зависимости от других параметров) может модифицировать передаваемые ей по указателю данные (поэтому автор не может объявить параметр как указатель на константу), но в моменты вызова функции с указателем на флешь другие параметры не допускают такой модификации. Привет ассемблерщикам.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 15 2009, 18:03
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Сергей Борщ @ Nov 15 2009, 20:56)  Функция ингода (в зависимости от других параметров) может модифицировать передаваемые ей по указателю данные Лично я такого не понял. Цитата (поэтому автор не может объявить параметр как указатель на константу) Просто не догадался, потом наконец-то так сделал, отписал: "сейчас так и сделано", но продолжил наводить тень на плетень как "сделать, как я хочу" и "вопрос-то был не в том".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 16 2009, 11:43
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Сергей Борщ @ Nov 16 2009, 14:37)  Я так понял, что это относилось к явному приведению константного указателя к неконстантному перед вызовом функции. Не знаю, я об этом: Цитата Ваша функция ( как это правильно сделано во всех библиотечных функциях), должна работать и соответственно в нее передаваться указатели на const. При этом любые передаваемые указатели будут преобразовываться к const * молча, бо сие безопасно. Реакция: Цитата Да согласен 10 раз с этим, более того, сейчас так и сделано, но вопрос-то был не в том. Впрочем, ввиду мутности "идеи" гадать можно долго.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 17 2009, 10:57
|
Участник

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

|
Сергей Борщ. Вы абсолютно правильно меня поняли. Цитата Автору надо передать в функцию указатель на данные, размещенные во флешь. Функция ингода (в зависимости от других параметров) может модифицировать передаваемые ей по указателю данные (поэтому автор не может объявить параметр как указатель на константу), но в моменты вызова функции с указателем на флешь другие параметры не допускают такой модификации. Модифицировать эти данные мне действительно не нужно. Цитата Просто не догадался, потом наконец-то так сделал, отписал: "сейчас так и сделано" Сначала (до поднятия темы на форуме) было сделано так: 1. Функции принимали значения на НЕ КОНСТАНТЫ, так как в зависимости от других параметров в ней возможна модификация. 2. Были объявлены дефолтные значения структур как const . 3. Перед вызовом функции делалось следующее - в стеке создавался экземпляр структуры НЕ константной, с помощью memcpy в него копировалось значение константной структуры, и вызывалась пресловутая функция. Во многих местах, как выяснилось, мне оказалось достаточным дефолтных значений структуры, и создавать лишний объект в стеке (или в хипе) только лишь ради корректного приведения указателей мне показалось лишним, я хотел соптимизировать этот момент, перебрал несколько идей - в том чиле и этот пост, так как повторюсь, в Кейле для 51 процессоров, с которыми я работал до этого процессора, это прокатывало. Приведение указателя "конст" к "не конст" с помощью круглых скобок при вызове функции мне не показалось лучшим решением. Но на данный момент я оставил это место как есть и иду дальше, так как сроки проекта короткие, и если вдаваться в глубокие рассуждения на тему "кто круче, а кто дурак" - то так я точно в сроки не уложусь. Пусть лучше считают дураком, но при этом делается мое дело. А обсуждать что-либо на форуме больше не хочу. Перехожу обратно в разряд читателей.
--------------------
Все врут (с) /M.D.House/
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|