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

 
 
> Как заставить линкер расположить обьект класса в ПЗУ?
scout
сообщение Mar 9 2007, 10:05
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837



Хочется чтобы класс имеющий только константные члены распологался в ПЗУ.
Линкер же упорно распологает объект такого класса в ОЗУ.
Как объяснить линкеру Иара мое пожелание?


--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью.
Конфуций
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex03
сообщение Mar 11 2007, 10:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(scout @ Mar 9 2007, 12:05) *
Хочется чтобы класс имеющий только константные члены распологался в ПЗУ.
Линкер же упорно распологает объект такого класса в ОЗУ.
Как объяснить линкеру Иара мое пожелание?

Попробуйте эти константные члены объявить ещё и как static.
Они ж у Вас общие для всех объектов? Да и объект то поди один?
Да и методы можно все static-ом объявить, и экземпляр не создавать вообще! smile.gif

Не очень понимаю зачем оно надо, чего Вы хотите в результате? smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 11 2007, 15:59
Сообщение #3


Гуру
******

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



Цитата(Alex03 @ Mar 11 2007, 09:31) *
Они ж у Вас общие для всех объектов? Да и объект то поди один?
Ну зачем же так жестоко smile.gif Навскидку:
Код
class pin_t
{
public:
   pin_t(uint8_t volatile *const port, uint8_t bit) : Port(port), Mask(1 << pin) {}
   void set();
   void clear();
   void toggle();
   bool state();
private:
   uint8_t volatile *const Port;
   uint8_t const Mask;
};
pin_t LED(PORTA,4);
Логично предположить что в процессе работы программы светодиод висит на одной и той же ножке, все члены константны.
Что касается единственных экземпляров у которых все статик - да, и работает и правильно, но как же некрасиво. В глазах пестрит от обилия static и объявление одного экземпляра класса выливается не в одну строчку static class_t obj, как для обычных экземпляров, а в нудное объявление всех статических членов класса. Бррр. Как когда-то сказал уважаемый ReAl, "Страдает мое чувство эстетического" чего-то там.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alex03
сообщение Mar 12 2007, 12:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(Сергей Борщ @ Mar 11 2007, 17:59) *
Ну зачем же так жестоко smile.gif Навскидку:
....
Логично предположить что в процессе работы программы светодиод висит на одной и той же ножке, все члены константны.

Ок. Понятно. Но и то что оно в РАМ-е вполне логично, ибо инициализируется в конструкторе.
А типа если выкинуть конструктор и члены сделать пабликами то
const pin_t LED = {PORTA, 4};
прокатит и во ФЛЭШ попадёт, но не красиво?
Go to the top of the page
 
+Quote Post



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

 


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


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