реклама на сайте
подробности

 
 
> непонятки с массивами., eclipse, gcc, codesourcery
-Игорь-
сообщение Apr 27 2012, 16:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 8-10-11
Пользователь №: 67 615



Что-то не понимаю в чем проблема.
В циклах заполняю один и тот же массив разными значениями. Один цикл компилится с предупреждением, что индекс выходит за пределы массива.
Первый случай:
Код
      for (int n=ADC_FIRST;n<ADC_SECOND;n++)
        {

здесь делаю всякие вещи, последним действием кидаю значения в массив

          dac1_array[n-ADC_FIRST]=adc_array[n-FILTER_COUNT];
        }

"-ADC_FIRST" - убираю смещение, которое необходимо для массива adc_array.
Второй случай:
Код
      for (int n=ADC_SECOND;n<ADC_LAST;n++)
        {

здесь делаю тоже всякие вещи и также последним действием кидаю значения в тот же массив.

          dac1_array[n-ADC_SECOND]=adc_array[n-FILTER_COUNT];
        }

"-ADC_SECOND" - убираю смещение, которое необходимо для массива adc_array.
Т.е. как я понимаю относительно массива dac_array действия одинаковы - заполняю массив от 0 и выше.
Но во втором случае компилятор ругается - interrupt_dma2_ch4_5.c:172:21: warning: array subscript is above array bounds [-Warray-bounds]
Если переписываю последнюю строчку - dac1_array[n-(ADC_SECOND-1)] компилятор проглатывает, хотя по сути я должен вылезти за верхнюю границу.
Ругается точно на переполнение индекса dac1_array. так как adc_array[] я менял на 0.

Ой, забыл написать просьбу - "Братцы, помогите разобраться".

хех... немного локализовал проблему. Поленился убрать скобки, когда убирал "-1" и компилятор проглотил вот такую строку - "dac1_array[n-(ADC_SECOND)]=adc_array[n-FILTER_COUNT];"
Макросы, которые вычисляются необходимо закрывать в скобки, что ли?
Да. Конечно. Сам дурак. Забыл, что макрос это просто подставление текста. Вот блин sad.gif
Было задано так - #define ADC_SECOND ADC_FIRST+(ADC_COUNT/2)
Сделал так и покатило - #define ADC_SECOND (ADC_FIRST+(ADC_COUNT/2))
Славно, что на таком легком месте споткнулся.
Спасибо за внимание.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
MrYuran
сообщение Apr 28 2012, 04:11
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(-Игорь- @ Apr 27 2012, 20:14) *
Да. Конечно. Сам дурак. Забыл, что макрос это просто подставление текста. Вот блин sad.gif
Было задано так - #define ADC_SECOND ADC_FIRST+(ADC_COUNT/2)
Сделал так и покатило - #define ADC_SECOND (ADC_FIRST+(ADC_COUNT/2))
Славно, что на таком легком месте споткнулся.
Спасибо за внимание.

Вообще-то, это прописные истины.
Все арифметические выражения в макросах берутся в скобки, а действия - в скобки do{}while(0)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01332 секунд с 7
ELECTRONIX ©2004-2016