Люди кто нибудь сталкивался с такой штукой:
Есть большой проект, размер скомпилиной программы получается около 30 килобайт...
Я дописываю еще одну ф-ию и половина проги перестает работать напроч... :(
если в середину этой ф-ии воткнуть NOP() то вроде все начинает работать нормально,
но как только я добавляю еще что нибудь глюки появляются опять, но уже в других
местах... убираем NOP() глюки начинают появляться несколько реже, но в самых
неожиданных местах (которые были написаны и отлажены еще пол года назад)...
надо бы промолчать, но уже утомили сообщения подобного рода о баках компилятора, о багах кристалла, в
которых ни слова о том, чего делаем, как делаем, на чем делаем, чем делаем и пр. пр. пр.
1) можно ли без мата???
2) на чем делаем: MPLAB 7.00, HI-TECH PICC18 (v8.35 PL3), кристал PIC18F6620
3) что делаем: устройство проверки наших изделий (блоки индикации, датчики,
контроллеры табло и пр.)
4) как делаем: программа построена на принципе событий, т.е. нажали кнопку на
клавиатуре - вызываем функцию обработки события по указателю на нее...
например в прерывании опрашивается клавиатура и если кнопка нажата то выставляется
соответствующий флаг, а в основном цикле происходит проверка всех флагов
void MessageCheck()
{
if(Buttons[0][0].F_Cld) //проверка флага нажатия на верхнюю левую кнопку
{
while(Buttons[0][0].F_Click); //жднм пока ее отпустят
Buttons[0][0].F_Cld = 0;
if(OnDig1Click)OnDig1Click(); //вызываем обработчик
}
............. //их там много разных :)
}
Т.е. каждый кусок программы (обработчик) в общем-то не зависимый... и вот сдесь и
возникает вопрос, как изменение одного обработчика может влиять на другие??? и как
один NOP() может влиять на всю программу???
вот это:
"Я дописываю еще одну ф-ию и половина проги перестает работать напроч."
не симптом даже, а эмоции.
что значит перестает работать? как проявляется? что сделано для того, чтобы выявить
причину? на чем отлаживаемся? ну и т.д. и т.п. той информации, что предоставлена,
не то, чтобы не хватает - ее просто нет.
А вообще у меня очень похожие симптомы были в 18Ф452. Блин - почему то не передается
полностью слово конфигурации в программатор. Я думаю, что слово конфигурации написал - и все.
Но фитон ставит защиту табличного чтения (причем не на всю память). И получается - nop
ставишь - распределение другое - работает - иначе дохнет. От объема много зависит. В общем я
смотрю, чем больше у меня выпрямляются руки под Си, тем меньше глюков компилятора остается :))
)