Ардуино циклический опрос и масивы
- Войдите на сайт для отправки комментариев
Ср, 29/12/2021 - 14:49
Доброго времени суток . написал код и не пройму что творится!! для ардуино мега. если закоментировать 32 строку (подписана как эту строку) контроллер каждий раз перезагружается. Вчем причина не могу понять
Строка 63 приводит в выходу за границу массива
timing[10] = millis();
Строка 63 приводит в выходу за границу массива
timing[10] = millis();
но почему когда добовляещ temp1=Douts[11]; в код работат наченае нормально?
Строка 63 приводит в выходу за границу массива
timing[10] = millis();
но почему когда добовляещ temp1=Douts[11]; в код работат наченае нормально?
я специално добавил в код temp при настройки устанавливаю 1, и при конце первом цикле устанавливаю 0.
если закоментировать строчку где temp1=Douts[11]; и просмотреть порте temp оотается всегда 1. значить каждый раз все выполняется с нуля
но почему когда добовляещ temp1=Douts[11]; в код работат наченае нормально?
Трагическая случайность.
Как предположение - пока не было присвоения переменной temp1, компилятор не отводил под нее место (она у Вас на используется больше нигде) и промах массива попадал в что то значимое. Когда стали присваивать, выделил место и теперь при промахе попадаета в эту переменную, а ей все по фигу.
Как предположение - пока не было присвоения переменной temp1, компилятор не отводил под нее место (она у Вас на используется больше нигде) и промах массива попадал в что то значимое. Когда стали присваивать, выделил место и теперь при промахе попадаета в эту переменную, а ей все по фигу.
Не катит.
Переменная объявлена глобально, ее не обязательно сразу инициализировать, память под нее выделится
Не обязательно. Если она не используется, ее выкинут из таблицы глобалов.
Как предположение - пока не было присвоения переменной temp1, компилятор не отводил под нее место (она у Вас на используется больше нигде) и промах массива попадал в что то значимое. Когда стали присваивать, выделил место и теперь при промахе попадаета в эту переменную, а ей все по фигу.
Строка 63 приводит в выходу за границу массива
timing[10] = millis();
но почему когда добовляещ temp1=Douts[11]; в код работат наченае нормально?
я специално добавил в код temp при настройки устанавливаю 1, и при конце первом цикле устанавливаю 0.
если закоментировать строчку где temp1=Douts[11]; и просмотреть порте temp оотается всегда 1. значить каждый раз все выполняется с нуля
Строка 63 приводит в выходу за границу массива
timing[10] = millis();
но почему когда добовляещ temp1=Douts[11]; в код работат наченае нормально?
я специално добавил в код temp при настройки устанавливаю 1, и при конце первом цикле устанавливаю 0.
если закоментировать строчку где temp1=Douts[11]; и просмотреть порте temp оотается всегда 1. значить каждый раз все выполняется с нуля
if ((millis() - timing[9])>=500){. заработала. прокоментировайте чтобы эту ошибку не повторять
прокоментировайте чтобы эту ошибку не повторять
ну что тут комментировать-то? Учебник по Си вообще не читал? Нумерация элементов в массиве начинается нуля.
Если обьявлен массив a[10] из десяти элементов, то элементы имеют индексы от a[0] до a[9], элемента a[10]не существует!!!
прокоментировайте чтобы эту ошибку не повторять
ну что тут комментировать-то? Учебник по Си вообще не читал? Нумерация элементов в массиве начинается нуля.
Если обьявлен массив a[10] из десяти элементов, то элементы имеют индексы от a[0] до a[9], элемента a[10]не существует!!!