Ответ: У меня в циклическом буфере в функцию передается указатель на структуру которая содержит указатели на статический буфер в ОЗУ (указатели на буфер, на голову буфера, на хвост бкфера).
В другом месте использую так (проще copy-paste, чем словами):
typedef struct // Усеченый кольцевой буфер
{ unsigned int buf[DYNA]; // сам буфер
unsigned int *tail; // указатель на хвост буфера
} DYNA_buf;
typedef struct
{ unsigned int *end; // указатель за конец буфера
unsigned int **tail; // указатель на указатель на хвост буфера
} DYNA_ini;
static DYNA_buf dynabuf[flt_cnt];
DYNA_ini const dynaptr[flt_cnt] =
{ { &dynabuf[0].buf[DYNA], &dynabuf[0].tail },
{ &dynabuf[1].buf[DYNA], &dynabuf[1].tail },
{ &dynabuf[2].buf[DYNA], &dynabuf[2].tail },
{ &dynabuf[3].buf[DYNA], &dynabuf[3].tail }
};
/* --- dyna_ini() --------------------------- **
*
* ------------------------------------------ */
void dyna_ini( void )
{
int a;
for ( a = 0; a < flt_cnt; a++ ) // адрес начала буфера
*dynaptr[a].tail = &dynaptr[a].end[-DYNA];
}
/* --- dyna_putbuf() ------------------------- **
*
* ------------------------------------------- */
void dyna_putbuf( int channel, unsigned int val )
{
unsigned int *end = dynaptr[channel].end; // за конец буфера
// указатель на указатель на хвост буфера
unsigned int **ptail = dynaptr[channel].tail;
unsigned int *tail = *dynaptr[channel].tail; // на хвост буфера
*tail = val; // Положим значение в буфер
if ( ++tail == end )
tail = &end[-DYNA];
*ptail = tail;
}
конструкции ***pptr и с большим количеством * c MSP430 не применял. За@#$ся разбираться... :-)-
- Я имел в виду конструкции типа pbuf->pntr->data для вложенных структур с указателями. - rezident(16.07.2005 11:29,
)
- Я имел в виду конструкции типа pbuf->pntr->data для вложенных структур с указателями. - rezident(16.07.2005 11:29,