Цитата(XsanyaX @ Nov 27 2006, 16:38)

Возможно ли как нибудь передать в функцию адрес порта? Насколько мне известно, IAR не поддерживает указатели в __io области и при компиляции такого кода:
Error[Ta034]: __io pointer/reference is not allowed.
т.е. указатели на __io переменные не разрешенны
Есть ли механизмы обхода этого ограничения? (кроме макросов ..... ). Поделитесь опытом.... плизз....

Вообще-то, все можно. Не знаю, про какой проц идет речь, для AVR еще с версий 2.2х можно было. Хоть указатели, хоть ссылки.
Код
#include <iom128.h>
typedef unsigned char byte;
typedef byte volatile __tiny IO_REG;
void f(IO_REG* r, byte mask)
{
*r |= mask;
}
// --------------------------------------------------------------------------
void main(void)
{
f(&PORTB, 0x55);
}
// --------------------------------------------------------------------------
Или со ссылками (только тут обязательно включить ++, т.к. в простом С ссылок никаких нет):
Код
#include <iom128.h>
typedef unsigned char byte;
typedef byte volatile __tiny IO_REG;
void f(IO_REG& r, byte mask)
{
r |= mask;
}
// --------------------------------------------------------------------------
void main(void)
{
f(PORTB, 0x55);
}
// --------------------------------------------------------------------------
Все работает.
Цитата(rezident @ Nov 27 2006, 17:45)

Извиняюсь, что не совсем по теме, но мне интересно, а каков смысл передачи в функцию указателя на порт, а не собственно самого значения для порта?
Иногда это бывает полезным - например, если хочется сделать библиотеку, которая что-то делает с портом. При использовании указывается адрес порта и вуаля. Ну, и еще есть пара случаев. Почти всегда такие финты оказываются более оверхедными - на AVR есть спец. инструкции для доступа в IO область, а при косвенном обращении придется как в обычную память лезть, что несклько медленнее. Но если это некритично, то почему бы и нет.
Добавление. На более "прямой" и "правильной" архитектуре MSP430 никаких таких извратов не требуется.

Я когда с MSP430 начал работать, так просто отдыхал после финтов ушами типа вышеописанного или подобных, где завязки на __flash.
«Отыщи всему начало, и ты многое поймёшь» К. Прутков