ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
35548 Топик полностью
VAI (16.07.2005 11:20, просмотров: 1) ответил rezident на ОК. Спасибо за совет. А что-то насчет глубины вложенности указателей в IAR можете сказать?
Ответ: У меня в циклическом буфере в функцию передается указатель на структуру которая содержит указатели на статический буфер в ОЗУ (указатели на буфер, на голову буфера, на хвост бкфера). В другом месте использую так (проще 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 не применял. За@#$ся разбираться... :-)