2013-05-10 4 views
0

Я хочу иметь доступ к массивам и переменным с указателями. Поэтому я сделал массив указателей на те массивы и переменные. Но он, похоже, не компилируется правильно. Где я ошибаюсь? (C++, atmel, avrstudio)Список указателей идет не так

volatile uint8_t lfo1Clock = 0; 
volatile uint8_t lfo2Clock = 0; 
volatile uint8_t lfo3Clock = 0; 
volatile uint8_t lfo4Clock = 0; 
volatile uint8_t lfo5Clock = 0; 
volatile uint8_t lfo6Clock = 0; 

uint8_t  lfo1[5]={4,0,0,0,0}; 
uint8_t  lfo2[5]={4,0,0,0,0}; 
uint8_t  lfo3[5]={4,0,0,0,0}; 
uint8_t  lfo4[5]={4,0,0,0,0}; 
uint8_t  lfo5[5]={4,0,0,0,0}; 
uint8_t  lfo6[5]={4,0,0,0,0}; 

uint16_t *lfoList [] = {lfo1,lfo2,lfo3,lfo4,lfo5,lfo6}; 
uint16_t *lfoClockList [] = {lfo1Clock,lfo2Clock,lfo3Clock,lfo4Clock,lfo5Clock,lfo6Clock}; 

Спасибо за любой совет.

+0

Вообще хорошая идея, чтобы отправить * ошибка * вы получаете, как ваш компилятор жалуется на свой код. Тем не менее, как вы ожидаете, что 'lfo1Clock',' uint8_t', будет совместим с 'uint16_t *'? Аналогично, ваши первые члены массива, которые являются базовыми адресами массивов 'uint8_t', но вы пытаетесь назначить их указателям' uint16_t * '. – WhozCraig

ответ

1

Ваш первый массив - это массив указателей uint16_t, но он указывает на массивы uint8_t. Это должно быть что-то вроде этого:

uint8_t *lfoList [] = {lfo1,lfo2,lfo3,lfo4,lfo5,lfo6}; 

Ваш второй массив также массив указателей неправильного типа, но она также содержит простые примеры uint8_t, которые не будут работать, даже если тип был правильным.

Если это просто означает, что массив экземпляров uint8_t, я подозреваю, что вы хотите:

uint8_t lfoClockList [] = {lfo1Clock,lfo2Clock,lfo3Clock,lfo4Clock,lfo5Clock,lfo6Clock}; 

Если вы на самом деле нужен второй массив представляет собой массив uint8_t указателей, то вам нужно взять адрес каждого из этих предметов. И я думаю, вам нужно использовать volatile в определении массива для типа, который будет совместим.

volatile uint8_t *lfoClockList [] = {&lfo1Clock,&lfo2Clock,&lfo3Clock,&lfo4Clock,&lfo5Clock,&lfo6Clock}; 
+0

Это решило мою первую проблему! Благодаря! Не видел этого, пока не сейчас! Остается то, что мой компилятор говорит: «* lfoClocklist: элемент initializer не является константным». Я не хочу, чтобы они тоже были, они будут меняться во время использования программного обеспечения. Есть ли советы по этому поводу? – user2371490

+0

Я неправильно прочитал ваш последний совет. Извините, это полностью решило мою проблему! – user2371490

0
volatile int lfo1Clock = 0; 

int lfo1[5]={4,0,0,0,0}; 

int (*lfoList[5])[] = {&lfo1}; // array of pointers to array of five integers 

volatile int *lfoClockList [] = {&lfo1Clock}; 

Примечание: При использовании uint16_t * указатель на вывод uint8_t данные

+0

Спасибо за примечание, но я привык использовать их. – user2371490

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

  • Нет связанных вопросов^_^