Здравствуйте! Как создать тип переменной в CVAVR2, чтобы при обращении к переменной этого типа, находящейся в микросхеме памяти, по интерфейсу SPI (или TWI), компилятор сам "понимал", что переменная не в его ОЗУ или Flash? То есть при компиляции, встречая в тексте программы переменную этого типа, компилятор должен использовать соответственно команды чтения/записи по SPI (TWI). Как прописать такой тип?
Обращение к переменной по интерфейсу SPI (TWI),создание типа
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
[Всем большое спасибо. ТЕМА ЗАКРЫТА!]
Здравствуйте! Как создать тип переменной в CVAVR2, чтобы при обращении к переменной этого типа, находящейся в микросхеме памяти, по интерфейсу SPI (или TWI), компилятор сам "понимал", что переменная не в его ОЗУ или Flash? То есть при компиляции, встречая в тексте программы переменную этого типа, компилятор должен использовать соответственно команды чтения/записи по SPI (TWI). Как прописать такой тип?
Здравствуйте! Как создать тип переменной в CVAVR2, чтобы при обращении к переменной этого типа, находящейся в микросхеме памяти, по интерфейсу SPI (или TWI), компилятор сам "понимал", что переменная не в его ОЗУ или Flash? То есть при компиляции, встречая в тексте программы переменную этого типа, компилятор должен использовать соответственно команды чтения/записи по SPI (TWI). Как прописать такой тип?
Последний раз редактировалось kotbimigot Чт сен 29, 2011 17:38:00, всего редактировалось 1 раз.
- Реклама
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
если мы чего-то не знаем - не значит, что этого не существует
- Сообщения: 703
- Зарегистрирован: Вс янв 18, 2009 21:12:49
Можно через __declspec, если компилятор это поддерживает. Сомневаюсь.
Или через классы и "operator". В конструкторе задаются параметры переменной. Реализации обращений к SPI TWI нужно дописать.
Что то типа такого:
Подобное работает в IAR-е. Для CV не проверялось 
Или через классы и "operator". В конструкторе задаются параметры переменной. Реализации обращений к SPI TWI нужно дописать.
Что то типа такого:
Код: Выделить всё
class MySpi
{
private:
int address;
public:
//write
void operator = ( char data )
{
//...
SPDR = address;
//...
SPDR = data;
}
//read
operator char ()
{
//...
SPDR = address;
//...
return SPDR;
}
public:
MySpi( int adr ) { address = adr; }
~MySpi() { /* тут, например, остановить SPI TWI */ }
};
void main( void )
{
MySpi var( 50 );
var = 5;
PORTB = var;
}
а CV уже С++ поддерживает?!
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
- Сообщения: 1800
- Зарегистрирован: Вт окт 05, 2010 01:08:57
а вообще где можно почитать как работать с внешней еепром памятью??
KIT
Ещё раз: такое невозможно. Память, подключаемая через SPI или TWI (I2C), с точки зрения процессора является не памятью, а внешним устройством. К ячейкам такой памяти он обращаться не умеет в принципе, поскольку этих ячеек с точки зрения процессора попросту не существует. Кроме того, у разных типов памяти, подключаемых по одному интерфейсу, могут быть разные принципы работы (например, к SPI можно подключить и микросхему DataFlash, и SD-карту, однако программно работа с ними выполняется совершенно по-разному). Наконец, встроенные в один тип МК контроллеры SPI и I2C могут отличаться от таковых у другого типа МК даже одного производителя (а уж разных производителей -- и подавно, что в полной мере проявляется у ARMов), и учесть все эти нюансы в компиляторе попросту невозможно.kotbimigot писал(а):если мы чего-то не знаем - не значит, что этого не существует
Единственный способ сымитировать работу с такими устройствами -- это создать класс, который благодаря перегрузке операторов может "прикидываться" массивом, и объявить переменную такого типа. Однако это -- отнюдь не простая задача, не говоря уже о том, что это -- извращение.
В общем, лучше хорошенько изучите, что такое SPI и I2C, как работают с их контроллерами (напрямую, а не через созданные кем-то библиотеки), что из себя представляют микросхемы памяти, подключаемые через эти интерфейсы, ну а в первую очередь -- ассемблер. Не разобравшись с этими вещами, Вы просто не будете понимать, как в действительности работает "железо" и какая связь между программой, написанной на языке высокого уровня (например, на Си), и реальным кодом, выполняемым процессором.
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
ах, спасибо, хорошо, положите на комодSII писал(а):лучше хорошенько изучите, что такое SPI и I2C, как работают с их контроллерами (напрямую, а не через созданные кем-то библиотеки), что из себя представляют микросхемы памяти, подключаемые через эти интерфейсы, ну а в первую очередь -- ассемблер. Не разобравшись с этими вещами, Вы просто не будете понимать, как в действительности работает "железо" и какая связь между программой, написанной на языке высокого уровня (например, на Си), и реальным кодом, выполняемым процессором.
что-то вы мне в протеусе посимулить не посоветовали, тоже пониманию хорошо помогает
kotbimigot, я бы на Вашем месте тон подопустил немного и прислушался бы к тому, что Вам говорят.ах, спасибо, хорошо, положите на комод
Уверены в том, что это реально - факты в студию. А слова типа - "это возможно и идите все на ...", оставьте при себе.
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
Всем спасибо
Уже курю даташит на предмет подключения External SRAM
Уже курю даташит на предмет подключения External SRAM
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
сорри, не моё!Аlex писал(а): идите все на ..."
- Сообщения: 703
- Зарегистрирован: Вс янв 18, 2009 21:12:49
А ты наблюдательный )kotbimigot писал(а):про IAR нагуглилось, да
Ну гугли, пиздобол неблагодарный.
Найдёшь подобное - изменю мнение.
- Сообщения: 27
- Зарегистрирован: Чт июл 01, 2010 19:48:52
обалдеть просто, зачем столько агрессииasteroid7 писал(а): пиздобол неблагодарный.
- Сообщения: 703
- Зарегистрирован: Вс янв 18, 2009 21:12:49
Опа!kotbimigot писал(а):обалдеть просто, зачем столько агрессии
А на какую реакцию ты рассчитывал, съязвив, что гугл - наше всё?


