2013-07-11 3 views
0

У меня есть указатель который передается в функцию, как так:Передача адресный указатель на глобальную переменную

unsigned char globalvar; 

int functionexp(unsigned char *buff){ 
    globalvar = buff; 
    //start interrupt 
    //wait for end of interrupt 
    //pass original pointer back with updated results 
} 

void __attribute__((interrupt, no_auto_psv)) _DMA2Interrupt(void) { 
    globalvar = somedata; 
} 

И у меня есть прерывание, которое собирает данные, которые мне нужно передать в указанный указатель. То, что я хочу сделать, это создать глобальную фиктивную переменную и скопировать исходный указатель (bufF) в эту глобальную переменную, поэтому, когда я записываю данные в глобальную переменную, к которой я могу получить доступ в прерывании (поскольку я не могу передать оригинал указатель на прерывание), он также обновляет значения в исходном указателе.

В моем примере показана основа того, что я хочу сделать, но без синтаксиса указателя. Может кто-нибудь, пожалуйста, покажите мне, как это сделать, пожалуйста!

+0

ли указатели и 'ИНТ 'того же размера на вашей платформе (возможно, тупой вопрос с моей стороны, но должен был спросить). – WhozCraig

+0

Да, извините. Пример был быстро написан, чтобы показать, что я пытаюсь сделать. – ritchie888

+0

@ ritchie888 Как работает 'globalvar = buff? '? Почему бы не указатель. –

ответ

2

Ваш вопрос еще не совсем ясен. Моя первая интерпретация того, что я думал, что вы пытаетесь сделать, это было бы что-то вроде этого:

unsigned char **buffptr; 

int functionexp(unsigned char *buff){ 
    buffptr = &buff; 
    //start interrupt 
    //wait for end of interrupt 
    //pass original pointer back with updated results 
    // after this point, the value of buffptr is completely useless, 
    // since buff doesn't exist any more! 
} 

void __attribute__((interrupt, no_auto_psv)) _DMA2Interrupt(void) { 
    *buffptr = somedata; 
    // this changes the 'buff' variable in functionexp 
} 

С другой стороны, вы могли бы просто значит:

unsigned char *globalbuff; 

int functionexp(unsigned char *buff){ 
    globalbuff = buff; 
    //start interrupt 
    //wait for end of interrupt 
    //pass original pointer back with updated results 
} 

void __attribute__((interrupt, no_auto_psv)) _DMA2Interrupt(void) { 
    globalbuff[0] = somedata; 
    // this changes data inside the buffer pointed to by the 'buff' 
    // variable in functionexp 
} 
+0

Большое спасибо. Я попробовал оба, и второй пример - тот, который работал. Не знал, что это может быть так просто. Еще раз спасибо. – ritchie888

+0

Первый пример неверен. Вы указываете данные указателю. Но, возможно, это то, чего хотел ОП. –

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