Как проще проверять логические условия?
|
|
vladh |
Дата: Ср, 26.08.2015, 13:27 | Сообщение # 16 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd ( ) Наверное тут выход, запретить прерывания перед строчкой Спасибо, Иван. Нет, в данном случае, скорее здесь выход в том, чтобы эту инструкцию поместить в прерывании. Это еще и потому правильнее, что операцию T_i_p = T_i_p + 1 правильнее проделывать в момент прироста секунд(sek).Добавлено (26.08.2015, 13:27) --------------------------------------------- И еще мои размышления по поводу этой ситуации. Почему другие подобные проверки условий пока не замечены в срабатывании? Или может быть не замечены, потому, что специально не следил как в данном случае? Т.е. использование двух и более операторов Or, And, Xor нежелательно при наличии прерываний?
|
|
|
|
dimvad |
Дата: Ср, 26.08.2015, 13:47 | Сообщение # 17 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Цитата Т.е. использование двух и более операторов Or, And, Xor нежелательно при наличии прерываний? Я ставил до 4-х операторов OR при наличии прерываний и все работало и было, что один оператор AND отказывался работать. Что-то не доработано с ними в протоне. Все же попробуйте поставить какой-нибудь более новый компилятор. У меня Ваш проект работает.
|
|
|
|
vladh |
Дата: Ср, 26.08.2015, 14:27 | Сообщение # 18 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата dimvad ( ) Все же попробуйте поставить какой-нибудь более новый компилятор. У меня Ваш проект работает. Когда появилась первая версия 3.5.5 я создал здесь страницу: http://www.picbasic.ru/forum/5-1302-5 с тем чтобы люди высказались о ней. Но когда я узнал, что там глюки с переменными типа Word для 14 разрядных контроллеров(с которыми я чаще работаю), то решил снести её и поставить старую. Я слишком часто применяю такие переменные.
Сообщение отредактировал
vladh - Ср, 26.08.2015, 14:27
|
|
|
|
dimvad |
Дата: Ср, 26.08.2015, 15:18 | Сообщение # 19 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Ну мне кажется, что тут надо действовать по ситуации, тем более что в Вашем проекте нет переменных Word, пока во всяком случае. Поэтому я работаю в разных версиях компилятора. А то, что новый протон - глюковатый, то я здесь полностью согласен. А вот, что 3.5.2.7 сбоит - это для меня неожиданно. Мне он казался самым стабильным. Добавлено (26.08.2015, 15:18) --------------------------------------------- Неправильно указал версию протона, у меня 3.5.6.5
|
|
|
|
vladh |
Дата: Ср, 26.08.2015, 15:50 | Сообщение # 20 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата dimvad ( ) тем более что в Вашем проекте нет переменных Word Здесь я привел далеко не полный код. Если я использую АЦП(а я его часто использую) то я осуществляю либо 10 разрядное преобразование, либо 12-разрядное. В этом случае байтовые переменные не проходят. А вообще спасибо за участие.
|
|
|
|
ADMIN |
Дата: Чт, 27.08.2015, 05:04 | Сообщение # 21 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Владимир, попробуйте так сделать:
If Reg = 31 Or Reg = 32 Then testBit1 = 1 If Reg = 41 Or Reg = 42 Then testBit2 = 1 If testBit1 = 1 Or testBit2 = 1 Then If T_i_p >= T_imp Then INTCON.5 = 0: Inc Pusk testBit1 = 0 testBit2 = 0 EndIf
У меня версия 3.5.6.9 и в ней такой глюк с вашим вариантом отслеживается. Сделал так , как привел выше - глюк самоустранился
|
|
|
|
vladh |
Дата: Чт, 27.08.2015, 08:58 | Сообщение # 22 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ADMIN ( ) Владимир, попробуйте так сделать: Спасибо, Максим. Я такой вариант проверки условий уже делал. Сейчас я разместил ту проверку во время обработки прерываний и проблема пока снялась.
|
|
|
|
ADMIN |
Дата: Чт, 27.08.2015, 10:33 | Сообщение # 23 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я заметил такой факт: при просмотре асм смотрим директиву Context Save:
Prer ram_bank = 0 F1_000138 equ $ ; IN [PULT_1.BAS] CONTEXT SAVE ram_bank = 0 movf SP#P9,W movwf _High__Context_Store#0 <---------------------------Cохраняется только аккумулятор F1_000140 equ $ ; IN [PULT_1.BAS] IF INTCON.5 = 1 AND INTCON.2 = 1 THEN
В то время как восстанавливается и статус и аккумулятор: F1_000153 equ $ ; IN [PULT_1.BAS] CONTEXT RESTORE movf _High__Context_Store#0,W movwf SP#P9 movf PSAVE,W movwf PCLATH movf FSRSAVE,W movwf FSR movf SSAVE,W movwf STATUS swapf WSAVE,F swapf WSAVE,W retfie
Так что проблема в этом. Если эта ошибка будет исправлена, все должно работать и вне прерывания
|
|
|
|
vladh |
Дата: Чт, 27.08.2015, 11:11 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ADMIN ( ) Так что проблема в этом. Если эта ошибка будет исправлена, все должно работать и вне прерывания Может быть. Только к сожалению сие от нас не зависит В таких делах не так страшна сам глюк компилятора, как невыявление её на стадии отладки. Вот бы иметь хотя бы список ошибок, чтобы сразу их учитывать. даже без исправления Кронхиллом.
Сообщение отредактировал
vladh - Чт, 27.08.2015, 11:12
|
|
|
|
ivan_fd |
Дата: Чт, 27.08.2015, 11:44 | Сообщение # 25 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата ADMIN ( ) Я заметил такой факт: при просмотре асм смотрим директиву Context Save:
А Вы посмотрите внимательно на строчки после
Пишу еще раз, по моему в прерывании, при обработке условия, выставляются, или сбрасываются, биты C, DC регистра STATUS.
|
|
|
|
vladh |
Дата: Чт, 27.08.2015, 11:56 | Сообщение # 26 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd ( ) Пишу еще раз, по моему в прерывании, при обработке условия, выставляются, или сбрасываются, биты C, DC регистра STATUS. Иван, во первых это Ваша версия, а не однозначный факт. Во вторых, о чем это говорит? Т.е. чем это может помочь нам? Вариант писать этот кусок кода на АСМ'е мне не подходит.
|
|
|
|
dimvad |
Дата: Чт, 27.08.2015, 11:58 | Сообщение # 27 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Vladh, попробуйте hex, с моего компилятора. У меня то работает. Заодно и проверите предположение от ivan_fd.
|
|
|
|
ivan_fd |
Дата: Чт, 27.08.2015, 12:09 | Сообщение # 28 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата vladh ( ) Иван, во первых это Ваша версия, а не однозначный факт. А я, что разве не так написал
И еще, в версии Ver 3.5.7.1 У МЕНЯ!!!! все работает как и должно. То есть в строчку 245 не заходит!!!!!
И если посмотреть АСМ, то то разница только в этих строках: Код movf SP#P9,W movwf _High__Context_Store#0
Сообщение отредактировал
ivan_fd - Чт, 27.08.2015, 12:12
|
|
|
|
vladh |
Дата: Чт, 27.08.2015, 12:25 | Сообщение # 29 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
258
Замечания:
±
На сайте с 15.10.2007
Статус:
Offline
|
Цитата ivan_fd ( ) А я, что разве не так написалЦитата ivan_fd15833по моему Я и хотел сказать, что в этом еще надо разбираться. Что делает с регистром состояния компилятор при прерывании. Ну предположим мы выясним. Ну и что? Что это нам даст? По поводу последней версии dimvad писал(сообщение#15): "..Еще и прерывания начинали с ума сходить. долго я мучился и в конце концов оставил этот прект в 3.5.2.7". Да еще и раньше как то было выясняли по поводу новых версий (начиная с 3.5.5). Что Добавляя много нового Кронхилл добавили глюков. Поэтому я и не пользую их.Добавлено (27.08.2015, 12:25) --------------------------------------------- А у Вас Иван две версии стоят? Или Вы двумя комп-ми или двумя операц. или виртуальной машиной пользуетесь?
|
|
|
|
ivan_fd |
Дата: Чт, 27.08.2015, 12:32 | Сообщение # 30 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Нет у меня одна версия. Скомпилировал в ней, все работает.
|
|
|
|