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

 
 
> Сложная тема.AVR __io область как параметр функции, Нужно передать порт в функцию
dormouse
сообщение Mar 18 2005, 13:53
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980



После перехода на EC++ естественно
возникло желание передавать в конструктор информацию о порте
ввода/вывода с которым объект будет работать (если надо использовать
несколько устройств одного типа).

Иными словами - надо подключить, скажем 2 LCD.
class cLCD{ public: putchar(); ...};
cLCD LCD_A(PORTA), LCD_B(PORTB); // Можно пожертвовать читаемостью - 0x12, 0x1F
Каждый объект будет независимо работать на своём порту.

Попытки решить задачу (все безуспешные):
1. void foo(unsigned char byte){
unsigned char __io PORT_TO_WORK = @byte;//Имелось в виду @0x12
}
Неудачно, поскольку на стадии компиляции неизвестно значение byte
2. unsigned char __io * ptrPORT_TO_WORK = 0x12;
Неудачно, поскольку в IAR _НЕТ_ указателей на __io область вообще.
3. Пример из документации (стр 117)
Non-type template parameters
It is allowed to have a reference to a memory type as a template parameter, even if
pointers to that memory type are not allowed.
Example
extern int __io x;
template<__io int &y>
void foo()
{
y = 17;
}
void bar()
{
foo<x>();
}

Неудачно, компилятор говорит, что не может сделать экземплят foo,
который подходит к такому вызову...
Error[Pe304]: no instance of function template "foo" matches the argument list C:\DIY\Projects\001-IAR4-printf\main.c 77


Теперь осталось только ждать предложений, пока моя фантазия
истощена...



PS Очень нужен IAR AVR 4.10 A(B) Full (~100mb).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ZiB
сообщение Feb 20 2006, 11:58
Сообщение #2


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



всем, привет!
я решаю эту проблему вот так:
#define porta 0x3B
#define bit 1
........................
void Set_Port(Byte PortNumber, Byte BitNumber)
{
*((Byte*)PortNumber) |= BitNumber;
}

void Clr_Port(Byte PortNumber, Byte BitNumber)
{
*((Byte*)PortNumber) &= ~BitNumber;
}
.........................
Clr_Port(porta, bit);
Delay(1000);
Set_Port(porta, bit);
// можно и так
for(Byte i = 0; i<7; i++)
{
Set_Port(porta, _Bit(i));
}
Go to the top of the page
 
+Quote Post



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

 


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


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