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

 
 
> Пользуемся указателями на порты и другие регистры, PIC18F2320, HITECH С
torik
сообщение Jun 22 2009, 12:47
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Всем привет. Что-то я затупил...

Создаю структуру:

Код
typedef struct {
    unsigned int* VS;
} fz_hard;


Инициализирую:

Код
    fz_hard fz;                                                //создаем FZ
    fz.VS = &PORTB;


Получаем предупреждение компилятора:
Цитата
Warning [359] D:\project\kvs_28\kvs_28.c; 61.15 illegal conversion between pointer types


Смотрю на симуляторе. Вместо адреса порта 0x0f81 видим адрес 0x0081, т.е. потеряли старший байт.

Как устранить и как вообще передать в функцию в качестве параметра ссылку, указатель на порт?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
xemul
сообщение Jun 22 2009, 13:50
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(torik @ Jun 22 2009, 16:47) *
Всем привет. Что-то я затупил...

Компилятору в хидере сказано, что:
Код
volatile near unsigned char    PORTB        @ 0xF81;

, и он огорчается на несоответствие типов.
Цитата
Смотрю на симуляторе. Вместо адреса порта 0x0f81 видим адрес 0x0081, т.е. потеряли старший байт.

Обзовите VS правильно, и все получится.
Цитата
Как устранить и как вообще передать в функцию в качестве параметра ссылку, указатель на порт?

как обычно
Код
void foo(volatile near unsigned char *);
typedef struct {
   volatile near unsigned char *VS;
} fz_hard;

fz_hard fz;
fz.VS = &PORTB;
foo(fz.VS);
Go to the top of the page
 
+Quote Post
torik
сообщение Jun 23 2009, 05:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Да, ругаться перестал. Но значение fz.VS остается 0х0081 вместо 0х0f81. Результат чтения *fz.VS, соответственно = 0, хотя в PORTB записано значение... Компилятор автоматически сыграет банками? Но тогда почему результат неверный?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 17:47
Рейтинг@Mail.ru


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