Оптимизация кода

Dima85
Offline
Зарегистрирован: 07.01.2013
//Первый вариант
if (potPinVal1 < 600 && potPinVal1 < potPinVal2+100 && VZ == 0 && ((millis()-VTimeZ)/1000)/60 > 20) { 
*** 
} else if (rtc[2] > 6 && rtc[2] < 12 && potPinVal1 > 400 && VZ == 2 && ((millis()-VTimeZ)/1000)/60 > 20) {
***
 } 
//Второй вариант
 if ((millis()-VTimeZaluzijas)/1000)/60 > 20) {
   if (potPinVal1 < 600 && potPinVal1 < potPinVal2+100 && VZaluzijas == 0){
 ***
    } else if (rtc[2] > 6 && rtc[2] < 12 && potPinVal1 > 400 && VZaluzijas == 2) {
 ***
    }
}

 

Появился такой вопрос. Как лучще писать код. Вот выше я написал 2 варианта кода, они делают одно и тоже. Но конструкция разная. Подскажите какой из них быстрее будит работать и менее грузить Arduino?

krikus
Offline
Зарегистрирован: 22.07.2011

Наверное второй будет немного быстрее. (чуть-чуть)

Так как операций деления там происходит меньше, чем в первом; а деления, умножения - тормозят сильнее, чем сложение/вычитание.

Dima85
Offline
Зарегистрирован: 07.01.2013

Спасибо, а вот еще такой вариант:

// Первый вариант
if (((millis()-TimePIRval)) = 600 {
// Второй вариант
if (((millis()-TimePIRval)) > 599) {

Я могу использовать и = и > для моей программы нет разницы. Но влияет ли это как-то на загруженность и скорость Arduino

 

Так же расскажите пожалуйста в чем разница между этими 1 равно и двумя, пример:

if (((millis()-TimePIRval)/1000) = 60) {

if (((millis()-TimePIRval)/1000) == 60) {

 

krikus
Offline
Зарегистрирован: 22.07.2011

 

// Первый вариант
2 if (((millis()-TimePIRval)) = 600 {
3 // Второй вариант
4

if (((millis()-TimePIRval)) > 599) {

В первом ошибка, второй вариант верен. См.ниже. 

if (((millis()-TimePIRval)/1000) = 60) {

А вот тут - грубейшая ошибка. Один "=" - это оператор присваивания. У вас попросту, условие будет выполняться всегда. 

if (((millis()-TimePIRval)/1000) == 60) {

Здесь все в порядке. Да "==" - оператор сравнения.

vdk
Offline
Зарегистрирован: 14.04.2013

= - это операция присваивания

== - это операция сравнения

 

vdk
Offline
Зарегистрирован: 14.04.2013

А вот код типа

if (((millis()-TimePIRval)) == 600 {

я бы не рекомендовал. millis постоянно меняется и точного совпадения можно и не поймать

Dima85
Offline
Зарегистрирован: 07.01.2013

Хорошо, спасибо. А вот еще пример:

// Первый пример
if (((millis()-VT1)/1000) == 86400)


//Второй пример
if ((millis()-VT)/1000 == 86400)

Оба работают. Что лучше?

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

оба одинаковы, компилятор лишние скобки опустит

Dima85
Offline
Зарегистрирован: 07.01.2013

Подскажите пожалуйста в чем разница и как лучше?

 

if (ATimeAutoOff > 0) {

// или

if (ATimeAutoOff >= 0) {

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

Dima85 пишет:

Подскажите пожалуйста в чем разница и как лучше?

if (ATimeAutoOff > 0) {

// или

if (ATimeAutoOff >= 0) {

разница большая. а как лучше, это только вам известно.

Geronimo
Offline
Зарегистрирован: 06.05.2013

Dima85 пишет:

Подскажите пожалуйста в чем разница и как лучше?

 

if (ATimeAutoOff > 0) {

// или

if (ATimeAutoOff >= 0) {

 

 

первый иф выполнится только когда переменная больше 0

второй когда больше или равнв