Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вываливание из цикла
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
MakSV
Программа измерения написанная на асе работает как часы проводя постоянное считывание данных от ацп к мк без сбоев c F=50 Hz, но написанный эквивалент на Си начал вываливаться из безконечного цикла с различной переодичностью от 3 до 20 секунд, при этом сорожевик на мк откл, используется 1 прерывание, но оно жёстко контролируется, причём передачей данных и съёмом руководит МК (mega 64), стек не переполняется, для хранение данных и используем 1 переменную типа long, Кто сталкивался с этой дилемой подскажите пожалуйста smile3046.gif
Rash
у меня тажа история только с внутри какой либо функции происходила, я полез в General Opion-System и увеличил в 2 раза CSTACK (я понял это стек) и RSTACK (я понял это стек по возвращению из подпрограмм) и всё заработало. Отсюда вопрос, как можно это дело определить теоретически (я имею виду стек в общем) не лазия по дизасемблеру, ведь хто его знает как компилятор оптимизирует программу, ведь ошибок по переполнению стека он не выдаёт?
Aleks17
Как-то информации маловато, может поподробнее - кусок программы к примеру или хотя бы русскими словами как МК к АЦП приделано, что в прерывании делается и т.п.
Программа чисто сишная или часть на ассемблере ?
Чтоб ответ получить надо вопрос задать.
Георгий
А откуда уверенность, что стек и переменная не переполняются?
MakSV
Потому что просматривал пошагово в AVRstud, новот на счёт стека сомневаюсь, скорее всего вы правы, но ведь на асе всё тип-топ

Исходник в txtНажмите для просмотра прикрепленного файла
Георгий
А в чем проявляется вываливание из цикла? И как устроено зацикливание?
MakSV
цикл на while (1){} - условие истинности, в верхнем программировании работало
Rash
Цитата(MakSV @ Dec 19 2005, 17:33) *
цикл на while (1){} - условие истинности, в верхнем программировании работало

рекомендация на бесконечный цикл
Код
for(;;)
{
     ....
}
MakSV
Сейчас попробую и скажу как вышло

Стабильные 20 сек работы, а потом МК замолкает, скорее всего Георгий прав это скек, CENSORED
Георгий
К сожалению, прогон в Студии не всегда позволяет отметить переполнение стека или выход его в зону данных. Потому как в реальном исполнениии прилетают всякие прерывания, таймеры суетятся. Я буквально вчера с этим еще раз столкнулся столкнулся. Если читаю буфер одним способом, все хорошо, если сначала прочитаю ДРУГОй буфер , а потом прочитаю первый, то в первом два последних байта стабильно запорчены. Оказалось, что другой буфер я читал по прерыванию, и стек успевал заехать в первый буфер, хотя подсчет возможного размера стека с карандашиком в руках говорил, что места хватает.
MakSV
Вываливание из цикла переборол, увеличив объём стека, но когда втюхиваю в свой блок вычислений и инициализациии, блок напарника , всё возвращается на круги своя. Но теперь это уже наша головня, Всем спасибо , а я побрёл кромсать дальше. smile3046.gif

Для Igor Kossak, спасибо, тему можно закрыть. С Ув. MakS
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.