Ответ: У меня в циклическом буфере в функцию передается указатель на структуру которая содержит указатели на статический буфер в ОЗУ (указатели на буфер, на голову буфера, на хвост бкфера).
В другом месте использую так (проще 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, )