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

 
 
> Вываливание из цикла, Сбой в работе программы на Си
MakSV
сообщение Dec 19 2005, 12:10
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 28-11-05
Из: Krasnodar
Пользователь №: 11 473



Программа измерения написанная на асе работает как часы проводя постоянное считывание данных от ацп к мк без сбоев c F=50 Hz, но написанный эквивалент на Си начал вываливаться из безконечного цикла с различной переодичностью от 3 до 20 секунд, при этом сорожевик на мк откл, используется 1 прерывание, но оно жёстко контролируется, причём передачей данных и съёмом руководит МК (mega 64), стек не переполняется, для хранение данных и используем 1 переменную типа long, Кто сталкивался с этой дилемой подскажите пожалуйста smile3046.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
Rash
сообщение Dec 19 2005, 12:35
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



у меня тажа история только с внутри какой либо функции происходила, я полез в General Opion-System и увеличил в 2 раза CSTACK (я понял это стек) и RSTACK (я понял это стек по возвращению из подпрограмм) и всё заработало. Отсюда вопрос, как можно это дело определить теоретически (я имею виду стек в общем) не лазия по дизасемблеру, ведь хто его знает как компилятор оптимизирует программу, ведь ошибок по переполнению стека он не выдаёт?
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Dec 19 2005, 12:36
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



Как-то информации маловато, может поподробнее - кусок программы к примеру или хотя бы русскими словами как МК к АЦП приделано, что в прерывании делается и т.п.
Программа чисто сишная или часть на ассемблере ?
Чтоб ответ получить надо вопрос задать.
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 19 2005, 12:45
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



А откуда уверенность, что стек и переменная не переполняются?


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
MakSV
сообщение Dec 19 2005, 13:29
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 28-11-05
Из: Krasnodar
Пользователь №: 11 473



Потому что просматривал пошагово в AVRstud, новот на счёт стека сомневаюсь, скорее всего вы правы, но ведь на асе всё тип-топ

Исходник в txtПрикрепленный файл  ______init__ADC.txt ( 23.62 килобайт ) Кол-во скачиваний: 276
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 19 2005, 13:30
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



А в чем проявляется вываливание из цикла? И как устроено зацикливание?


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
MakSV
сообщение Dec 19 2005, 13:33
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 28-11-05
Из: Krasnodar
Пользователь №: 11 473



цикл на while (1){} - условие истинности, в верхнем программировании работало
Go to the top of the page
 
+Quote Post
Rash
сообщение Dec 19 2005, 14:03
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Цитата(MakSV @ Dec 19 2005, 17:33) *
цикл на while (1){} - условие истинности, в верхнем программировании работало

рекомендация на бесконечный цикл
Код
for(;;)
{
     ....
}
Go to the top of the page
 
+Quote Post
MakSV
сообщение Dec 19 2005, 14:10
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 28-11-05
Из: Krasnodar
Пользователь №: 11 473



Сейчас попробую и скажу как вышло

Стабильные 20 сек работы, а потом МК замолкает, скорее всего Георгий прав это скек, CENSORED

Сообщение отредактировал IgorKossak - Dec 19 2005, 14:45
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 20 2005, 07:46
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



К сожалению, прогон в Студии не всегда позволяет отметить переполнение стека или выход его в зону данных. Потому как в реальном исполнениии прилетают всякие прерывания, таймеры суетятся. Я буквально вчера с этим еще раз столкнулся столкнулся. Если читаю буфер одним способом, все хорошо, если сначала прочитаю ДРУГОй буфер , а потом прочитаю первый, то в первом два последних байта стабильно запорчены. Оказалось, что другой буфер я читал по прерыванию, и стек успевал заехать в первый буфер, хотя подсчет возможного размера стека с карандашиком в руках говорил, что места хватает.

Сообщение отредактировал Георгий - Dec 20 2005, 07:47


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
MakSV
сообщение Dec 22 2005, 05:22
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 35
Регистрация: 28-11-05
Из: Krasnodar
Пользователь №: 11 473



Вываливание из цикла переборол, увеличив объём стека, но когда втюхиваю в свой блок вычислений и инициализациии, блок напарника , всё возвращается на круги своя. Но теперь это уже наша головня, Всем спасибо , а я побрёл кромсать дальше. smile3046.gif

Для Igor Kossak, спасибо, тему можно закрыть. С Ув. MakS
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:05
Рейтинг@Mail.ru


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