Как проще проверять логические условия? - Страница 2 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 3«123»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Как проще проверять логические условия? (Прошу совета)
Как проще проверять логические условия?
vladh Дата: Ср, 26.08.2015, 13:27  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Наверное тут выход, запретить прерывания перед строчкой
Спасибо, Иван. Нет, в данном случае, скорее здесь выход в том, чтобы эту инструкцию поместить в прерывании. Это еще и потому правильнее, что операцию T_i_p = T_i_p + 1 правильнее проделывать в момент прироста секунд(sek).

Добавлено (26.08.2015, 13:27)
---------------------------------------------
И еще мои размышления по поводу этой ситуации. Почему другие подобные проверки условий пока не замечены в срабатывании? Или может быть не замечены, потому, что специально не следил как в данном случае? Т.е. использование двух и более операторов Or, And, Xor нежелательно при наличии прерываний?

ЯНДЕКС Дата: 26.08.2015
dimvad Дата: Ср, 26.08.2015, 13:47  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 61
Репутация: 9   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline


Цитата
Т.е. использование двух и более операторов Or, And, Xor нежелательно при наличии прерываний?
Я ставил до 4-х операторов OR при наличии прерываний и все работало и было, что один оператор AND отказывался работать. Что-то не доработано с ними в протоне. Все же попробуйте поставить какой-нибудь более новый компилятор. У меня Ваш проект работает.
vladh Дата: Ср, 26.08.2015, 14:27  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 61
Репутация: 9   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата dimvad ()
тем более что в Вашем проекте нет переменных Word
Здесь я привел далеко не полный код. Если я использую АЦП(а я его часто использую) то я осуществляю либо 10 разрядное преобразование, либо 12-разрядное. В этом случае байтовые переменные не проходят. А вообще спасибо за участие.
ADMIN Дата: Чт, 27.08.2015, 05:04  |                                                                                                                Сообщение # 21
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ADMIN ()
Владимир, попробуйте так сделать:
Спасибо, Максим. Я такой вариант проверки условий уже делал. Сейчас я разместил ту проверку во время обработки прерываний и проблема пока снялась.
ADMIN Дата: Чт, 27.08.2015, 10:33  |                                                                                                                Сообщение # 23
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ADMIN ()
Так что проблема в этом. Если эта ошибка будет исправлена, все должно работать и вне прерывания
Может быть. Только к сожалению сие от нас не зависит cry В таких делах не так страшна сам глюк компилятора, как невыявление её на стадии отладки. Вот бы иметь хотя бы список ошибок, чтобы сразу их учитывать. даже без исправления Кронхиллом.

Сообщение отредактировал vladh - Чт, 27.08.2015, 11:12
ivan_fd Дата: Чт, 27.08.2015, 11:44  |                                                                                                                Сообщение # 25
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата ADMIN ()
Я заметил такой факт: при просмотре асм смотрим директиву Context Save:


 А Вы посмотрите внимательно на строчки после
       
Код
org 4


Пишу еще раз, по моему в прерывании, при обработке условия, выставляются, или сбрасываются, 
биты C, DC регистра STATUS.


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Чт, 27.08.2015, 11:56  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
Пишу еще раз, по моему в прерывании, при обработке условия, выставляются, или сбрасываются, биты C, DC регистра STATUS.
Иван, во первых это Ваша версия, а не однозначный факт. Во вторых, о чем это говорит? Т.е. чем это может помочь нам? Вариант писать этот кусок кода на АСМ'е мне не подходит.
dimvad Дата: Чт, 27.08.2015, 11:58  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 61
Репутация: 9   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Vladh, попробуйте hex, с моего компилятора. У меня то работает. Заодно и проверите предположение  от
ivan_fd.
Прикрепления: 2165023.rar(85Kb)
ivan_fd Дата: Чт, 27.08.2015, 12:09  |                                                                                                                Сообщение # 28
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 7   ±
Замечания:   ±
На сайте с 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
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Нет у меня одна версия. Скомпилировал в ней, все работает.

Меня все время преследуют умные мысли...но я быстрее!!!
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Как проще проверять логические условия? (Прошу совета)
Страница 2 из 3«123»
Поиск: