2014-12-09 5 views
0

Я пытался передать адрес PORTs через структуру с помощью функции, я не знаю, как исправить работу с указателями. Вот код моей структуры и функции:Использование адреса PIC PORT в структуре

typedef struct { 
read:1; 
last_read:1; 
changed:1; 
unsigned short *port; //Here the declaration of the pointer that will receive the address 
pin:1; 
active_state:1; 
} Input; 

void Setup_input(Input s,char *port, char pin, char active_state){ 
s.port = &port;  //HERE I TRY TO PASS THE ADDRESS OF THE PORT TO THE POINTER OBJECT 
s.pin = pin; 
s.active_state = active_state; 

Оказывается, что я делаю это не правильно, и я не в состоянии читать или управления правильно порта. Я использую компиляторы Mikroelectronic PRO. Благодаря

+0

При программировании микроконтроллеров, рекомендуется, чтобы вы прошли изучение языка C. – harper

+0

Вы должны действительно добавить тип, т. Е. 'Unsigned int', к этим битовым полям. 1-бит «int» - плохая идея. – unwind

ответ

0

Эта строка кода

s.port = &port; 

хранит адрес параметра в элемент port. Когда вы разыщите указатель в структуре, вы получите доступ к памяти стека, где параметр port был при вызове Setup_input(). Это вызывает неопределенное поведение.

То, что вы, очевидно, хотите, чтобы assigne значение параметра:

s.port = port; 
+0

Если я просто исправлю эту строку, могу ли я использовать член s.port в качестве исходного ПОРТА? Я имею в виду, мог ли я читать, писать PORT только с помощью этого участника? –

+0

Да, если вы исправили свой код, чем используете копию указателя. Пока ширина данных одинакова, все в порядке. – harper

+0

Большое спасибо, я исправил часть, но я понял, что моя проблема связана с struct argumento от mu-функции, если вы посмотрите, моя функция получает структуру, которую я хочу редактировать, но я думаю, что функция создает копию структуры a pass к ней. Мне нужно каким-то образом передать указатель на оригинальную структуру, поэтому я могу редактировать каждую структуру, которую я положил в funcion. знаете ли вы, как я могу объявить функцию со указателем struct? –

 Смежные вопросы

  • Нет связанных вопросов^_^