Использование адреса 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.


person Matheus Garbelini    schedule 09.12.2014    source источник
comment
Когда вы программируете микроконтроллеры, рекомендуется, чтобы вы прошли изучение языка C.   -  person harper    schedule 09.12.2014
comment
Вы действительно должны добавить тип, то есть unsigned int к этим битовым полям. 1-битное int — плохая идея.   -  person unwind    schedule 09.12.2014


Ответы (1)


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

s.port = &port;

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

Очевидно, вы хотите присвоить значение параметра:

s.port = port;
person harper    schedule 09.12.2014
comment
Если я просто исправлю эту строку, могу ли я использовать член s.port как исходный PORT? я имею в виду, могу ли я читать, писать ПОРТ, просто используя этот элемент? - person Matheus Garbelini; 09.12.2014
comment
Да, если вы исправили свой код, чем используете копию указателя. Пока ширина данных одинакова, все в порядке. - person harper; 09.12.2014
comment
большое спасибо, я исправил часть, но я понял, что моя проблема связана со структурой аргументо из функции mu, если вы посмотрите, моя функция получает структуру, которую я хочу отредактировать, но я думаю, что функция создает копию структуры проход к ней. Мне нужно каким-то образом передать указатель на исходную структуру, чтобы я мог редактировать каждую структуру, которую я помещал в функцию. Вы знаете, как я могу объявить функцию с указателем на структуру? - person Matheus Garbelini; 09.12.2014
comment
void Setup_input(Input *s, char *port, char pin, char active_state) -- Честно говоря, купите хорошую книгу C (stackoverflow.com/questions/562303/). Программировать микроконтроллеры гораздо интереснее, если вы можете отличить проблему языка C от проблемы микроконтроллера. - person harper; 09.12.2014