После перехода на 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).
|