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

 
 
> С++. Обмен с внешней памятью.
AlexOr
сообщение Jun 25 2005, 02:49
Сообщение #1


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

Группа: Свой
Сообщений: 89
Регистрация: 30-12-04
Из: Санкт-Петербург
Пользователь №: 1 754



Возможности компилятора IAR:
uint8 __eeprom * p; //указатель на EEPROM
__eeprom uint8 a=1; //переменная в EEPROM
uint8 b=2; //переменная в RAM
Далее можно свободно творить такое:
*p = a + b;
Т.е. синтаксис как для обычных переменных без домыслов об их расположении.
Притом вместо uint8 может быть даже любой определенный typedef тип, например огромная структура.

ВОПРОС
Есть вот такие функции для взаимодействия с энергонезависимой памятью (FRAM):
void f24write(uint16 adr, void* p, uint8 num)
void f24read(void* p, uint16 adr, uint8 num)
где
adr – адрес в FRAM
p - указатель на RAM самого МК
num – количество байт.
Возможно ли реализовать с помощью C++ взаимодействие аналогичное по синтаксису с __eeprom?
Т.е. чтоб в итоге можно было писать, что типа того:
uint8 __fram * p; //указатель на FRAM
__fram uint8 a=1; //переменная в FRAM
uint8 b=2; //переменная в RAM
*p = a + b;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AndyBig
сообщение Jun 25 2005, 12:43
Сообщение #2


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Можно сделать класс работы с FRAM и переопределить для него операторы =, +, -, * и т.д.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 25 2005, 14:27
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(AndyBig @ Jun 25 2005, 15:43)
Можно сделать класс работы с FRAM и переопределить для него операторы =, +, -, * и т.д.

и ещё оператор(ы) приведения к int (char, ... по необходимости).
Это нужно как раз для

uint8_t a, b;
uint8_fram c;
b = a + c; // вот тут нужен uint8_fram::operator int()

Но это пишется легко и быстро, при необходимости расширяется
блокировками обращения к I2C (на случай вытесняющей многозадачки).

Там с другим придётся повозиться - с распределением памяти (адресов) в самой fram. Чтобы и писать свободно и чтобы при этом при линковке из разных файлов оно собиралось как надо.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 25 2005, 14:33
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ReAl @ Jun 25 2005, 17:27)
Цитата(AndyBig @ Jun 25 2005, 15:43)
Можно сделать класс работы с FRAM и переопределить для него операторы =, +, -, * и т.д.

и ещё оператор(ы) приведения к int (char, ... по необходимости).

Тьху, не "а ещё", а просто нужны
operator=(const T&) или operator =(T)
operator T()
где T - это int8/uint8/int16/... для fram_int8/fram_uint8/fram_int/...
(и вообще - template fram<T> :-) )
а вот +-/* - это пусть уже в "нормальных" типах делается.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:46
Рейтинг@Mail.ru


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