порядок операторов в СиКоде не соответсвует порядку на плате

В этот форум переносятся темы из форума "Новые" которые при рассмотрении модератором или автором признанны либо не верными, либо ошибочными.
Ответить
SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#1

Сообщение SirYorik » 25.02.2016{, 11:32}

пример:
0305971.jpg
преобразуетсся в 7 считываний, усреднение (с 0-ми, или старыми данными в последних 3х элементах массива), только потом еще три считывания.

приходится усреднение отселять на следующую плату.



Код: Выделить всё

_FLPArray156147530[0] =  (analogRead (2));
_FLPArray156147530[1] =  (analogRead (2));
_FLPArray156147530[2] =  (analogRead (2));
_FLPArray156147530[3] =  (analogRead (2));
_FLPArray156147530[4] =  (analogRead (2));
_FLPArray156147530[5] =  (analogRead (2));
_FLPArray156147530[6] =  (analogRead (2));
_SUETFLPA3 = 0;
for(_SUETFLPATemp = 0; _SUETFLPATemp < 10; _SUETFLPATemp = _SUETFLPATemp + 1){_SUETFLPA3 = _SUETFLPA3 + _FLPArray156147530[_SUETFLPATemp];}
_FLPArray156147530[7] =  (analogRead (2));
_FLPArray156147530[8] =  (analogRead (2));
_FLPArray156147530[9] =  (analogRead (2));
_gtv10 = (_SUETFLPA3)/(10);
Последний раз редактировалось SirYorik 25.02.2016{, 19:27}, всего редактировалось 1 раз.

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#2

Сообщение SirYorik » 25.02.2016{, 11:53}

второй пример:

Изображение

Код: Выделить всё

if(_gen2O) _count1P = (_gtv4); // ПРЕСЕТ счетчика по выходу Одновибратора. В первом цикле код Одновибратора еще не отрабатывал.

// КОД СЧЕТЧИКА
if (( (_gen1O) && (!(( ( _count1P  >=  (_gtv11)) && (!((_gtv2) == (2))) ))) && (( ((_gtv2) == (1)) || ((_gtv2) == (2)) )) ))
   {
   if (! _count1I)  
      {
        if (_trgr1) {_count1P = _count1P+1;} else {_count1P = _count1P-1;};
       _count1I = 1;
      }
   }
else
   {
   _count1I=0;
   }

// Здесь РЕСЕТ счетчика, если счетчик уехал в минуса (к делу отношения не имеет)
if ((_gtv4) < (0)) _count1P = 0;
// Здесь UP|DOWN счетчика (к делу отношения не имеет)
if((_gtv2) == (2)) _trgr1 = 0;
if((_gtv2) == (1)) _trgr1 = 1;

// а вот и ИСКОМЫЙ одновибратор, начнет влиять на счетчик только на втором цикле
if (1) {if (! _gen2I){_gen2I = 1; _gen2O = 1; _gen2P = millis();}} else { _gen2I = 0 ; _gen2O= 0; } if (_gen2I &&  _gen2O)   _gen2O = !( _isTimer( _gen2P , 5 ));

// ВЫХОД счетчика
_gtv4 = _count1P;
Вложения
4787134.jpg
Последний раз редактировалось SirYorik 25.02.2016{, 11:53}, всего редактировалось 1 раз.

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#3

Сообщение SirYorik » 25.02.2016{, 19:18}

убился искать почему шим в разнос идет, а оказалось пример №3:
1184077.jpg
декларации (tmp* - диагностические переменные)

СпойлерПоказать

Код: Выделить всё

...
int _gtv4 = 0; //PWM, рабочее значение ШИМ подаваемое в pin
...
int _gtv11 = 185; //PWM_upper_limit, Значение ШИМ выше которого ключ не реагирует на повышение
....
int _gtv9 = 6000; //Udestination, целевое напряжение для стабилизатора, mV
....
bool _gtv18 = 1; //is_fuse_on
...
bool _gtv21 = 0; //stUD
bool _gtv22 = 0; //stJUMP
bool _gtv23 = 0; //stTHICK
bool _gtv24 = 0; //stTHIN
int _gtv25 = 0; //tmp3
int _gtv26 = 0; //tmp4
int _gtv27 = 0; //tmp5
сам код Платы.
ПЕРВЫМ выполняется код Switch который управляется stJUMP, из середины откуда-ближе к концу.
в результате в pin пишется всякая чтопопала. снова нужно пилить плату на две.

СпойлерПоказать

Код: Выделить всё

if(_gtv22) //stJUMP
{_swi3=(_gtv9)/(88);}
else
{_swi3=_swi5;} // ЗДЕСЬ ВТЫКАЕТСЯ НА ЗНАЧЕНИЕ swi5 ИЗ ПРЕДЫДУЩЕГО ЦИКЛА
if((_swi3) > (_gtv11))
{_swi4=_gtv11;}
else
{_swi4=_swi3;}
if(((_gtv4)+(_mux2)) <= (0)) // _swi5 РАСЧИТЫВАЕТСЯ ТОЛЬКО ЗДЕСЬ
{_swi5=0;}
else
{_swi5=(_gtv4)+(_mux2);}
_cd1 = 0; // КОД ПЛАТЫ ДОЛЖЕН НАЧИНАТЬСЯ ОТСЮДА !!!
if(( (_gtv24) && (_gtv21) )) {_cd1 =  1;}
if(( (_gtv24) && (!(_gtv21)) )) {_cd1 =  2;}
if(( (_gtv21) && (_gtv23) )) {_cd1 =  3;}
if(( (!(_gtv21)) && (_gtv23) )) {_cd1 =  4;}
if((_cd1) == 0) {_mux2 = 0;}
if((_cd1) == 1) {_mux2 = -1;}
if((_cd1) == 2) {_mux2 = 1;}
if((_cd1) == 3) {_mux2 = -5;}
if((_cd1) == 4) {_mux2 = 5;}
if(_gtv18)
{_swi6=_swi4;}
else
{_swi6=_gtv4;}
_gtv27 = _swi3;
_gtv25 = _mux2;
_gtv26 = (_gtv4)+(_mux2);
_gtv4 = _swi6;
в результате вместо сходимости ШИМ к 68 получаю адский разброс:

СпойлерПоказать

Код: Выделить всё

PWM:
....
78
78
62
62
79
79
57
57
79
79
52
52
84
84
47
47
89
89
42
42
94
94
37
37
99
99
32
32
104
104
27
27
109
109
...
осциллограмма вообще фееричная :).

но по сумме это жесть!

Добавлено (25.02.2016, 19:18)
---------------------------------------------
что и требовалось доказать, разделение платы на две немедленно нормализовало работу.

а вот правильный код от двух плат

СпойлерПоказать


Код: Выделить всё

_cd1 = 0;
if(( (_gtv24) && (_gtv21) )) {_cd1 =  1;}
if(( (_gtv24) && (!(_gtv21)) )) {_cd1 =  2;}
if(( (_gtv21) && (_gtv23) )) {_cd1 =  3;}
if(( (!(_gtv21)) && (_gtv23) )) {_cd1 =  4;}
if((_cd1) == 0) {_mux2 = 0;}
if((_cd1) == 1) {_mux2 = -1;}
if((_cd1) == 2) {_mux2 = 1;}
if((_cd1) == 3) {_mux2 = -5;}
if((_cd1) == 4) {_mux2 = 5;}
_gtv25 = (_gtv4)+(_mux2);
if(_gtv22)
{_swi3=(_gtv9)/(88);}
else
{_swi3=_swi5;}
if((_swi3) > (_gtv11))
{_swi4=_gtv11;}
else
{_swi4=_swi3;}
if((_gtv25) <= (0))
{_swi5=0;}
else
{_swi5=_gtv25;}
if(_gtv18)
{_swi6=_swi4;}
else
{_swi6=_gtv4;}
_gtv4 = _swi6;
Последний раз редактировалось SirYorik 25.02.2016{, 19:02}, всего редактировалось 1 раз.

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#4

Сообщение SirYorik » 27.02.2016{, 21:30}

четвертая серия, эпизод первый:
7024888.jpg
кусок схемы обведенный красным никогда не выполнится, потому что компилируется в два if:


Код: Выделить всё

if (( ((_gtv15) >= ((_gtv13)/(-1))) && ((_gtv15) <= ((_gtv13)/(-2))) && (_gtv28) && (_gtv27) && (_gtv18) && (!(_gtv29)) )) {
_gtv28 = 0;
}
if (( ((_gtv15) >= ((_gtv13)/(-1))) && ((_gtv15) <= ((_gtv13)/(-2))) && (_gtv28) && (_gtv27) && (_gtv18) && (!(_gtv29)) )) {
_gtv9 = _gtv30;
}
условия-то одинаковые, правда выполняются МК дважды (типа зря),  первое выполнение меняет переменную из условия, в результате второе уже не сработает.
приходится подбирать костыль, им оказался Rtrig:
6967996.jpg


Код: Выделить всё

if (( ((_gtv15) >= ((_gtv13)/(-1))) && ((_gtv15) <= ((_gtv13)/(-2))) && (_gtv28) && (_gtv27) && (_gtv18) && (!(_gtv29)) )) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (( ((_gtv15) >= ((_gtv13)/(-1))) && ((_gtv15) <= ((_gtv13)/(-2))) && (_gtv28) && (_gtv27) && (_gtv18) && (!(_gtv29)) )) {
_gtv9 = _gtv30;
}
if (_trgrt3) {
_gtv28 = 0;
}
с костылём задуманное работает.

эпизод второй:
5200990.jpg
схема дурацкая, почему-то глядя на описание решил что это сработает защелкой, проникся когда глянул на код в поисках глюка.



Код: Выделить всё

if(( ((_mux2) > (0)) && (!(_gtv28)) )) _trgs1 = 1;
if(0) _trgs1 = 0; // <------- if(0) !!!
Последний раз редактировалось SirYorik 27.02.2016{, 21:30}, всего редактировалось 1 раз.

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

порядок операторов в СиКоде не соответсвует порядку на плате

#5

Сообщение support » 27.02.2016{, 22:11}

Прокомментирую.
Эпизод 1.
Всё таки это программа, и надо учитывать что она выполняется последовательно. Могу вместо костыля с R-тригером предложить положить значения после блока And в переменную (тогда логика будет вычисляться один раз) , а затем её уже использовать в качестве команды на запись. Тогда это не будет костылём. Вообще нежелательно использовать такие методы когда в одной логической цепочке результат её исполнения меняет входные данные. Лучше использовать промежуточные переменные, и разбивать на несколько цепочек.
Эпизод 2
А что Вы ожидали увидеть? Стандартный код для тригера. Вы поставили константу false(0) на вход триггера, и удивляетесь почему 0..... Поставили бы туда константу true(1) увидели бы еденицу. Я не отслеживаю что подаётся на вход - константа или выход другого блока. В принципе это можно было - бы сделать, но на вижу необходимости. Я не понимаю зачем может понадобится на вход триггера подавать константу. Он один раз сработает и больше никогда не сброситься. Может Вы мне объясните необходимость такой ситуации. Сброс то по любому когда то должен произойти (в Вашей схеме для сброса триггера в 0 потребуется перезапуск контроллера - то же бред по моему)
Автор программы FLProg.

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#6

Сообщение SirYorik » 28.02.2016{, 22:16}

support писал(а):Лучше использовать промежуточные переменные, и разбивать на несколько цепочек.
ок.


Всё таки это программа, и надо учитывать что она выполняется последовательно.
просто ожидалось мною, что две переменные на одном проводе изменятся одновременно, а входные условия повторно проверятся только на следующей итерации луп().
факт что условия на плате могут сработать дважды за один цикл - неожиданен.
support писал(а):Может Вы мне объясните необходимость такой ситуации.
да просто косяк.

хотя необходимость сделать разовую операцию за всё время работы МК есть, а вот способ не очевиден. теперь буду знать что можно криво заюзать RSтриггер для этого.

Naladchik
Капитан
Сообщения: 822
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 151
Откуда: Новосибирск
Имя: Павел

порядок операторов в СиКоде не соответсвует порядку на плате

#7

Сообщение Naladchik » 29.02.2016{, 08:11}

SirYorik писал(а):хотя необходимость сделать разовую операцию за всё время работы МК есть, а вот способ не очевиден. теперь буду знать что можно криво заюзать RSтриггер для этого.
Какой смысл юзать для этого триггер если можно использовать вход En у переменной подав туда импульс и константу на вход (лично я это постоянно использую, очень удобно) или же заранее ей задать необходимое значение при объявлении?
А использование входа En у переменных в большинстве случаев отменяет необходимость использования RS триггера да и работа программы намного логичнее становится, проще баги отлавливать Понятно когда и почему изменилось состояние переменной.
Последний раз редактировалось Naladchik 29.02.2016{, 08:20}, всего редактировалось 1 раз.
Win10-64. FLProg Portable.
Изображение

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

порядок операторов в СиКоде не соответсвует порядку на плате

#8

Сообщение Слимпер » 29.02.2016{, 09:13}

support писал(а):Всё таки это программа, и надо учитывать что она выполняется последовательно
Все хотел спросить, в какой последовательности обрабатываются блоки на плате:

Сверху вниз слева направо  (столбцами)

Или 

Слева направо сверху вниз (строками)

И по какому краю блока это определяется 

Вообще то, во многих средах указывается индексы рядом с блоками, указывающий последовательность их обработки (а в некоторых вообще его можно вручную задавать, но это уже лишнее)

Naladchik
Капитан
Сообщения: 822
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 151
Откуда: Новосибирск
Имя: Павел

порядок операторов в СиКоде не соответсвует порядку на плате

#9

Сообщение Naladchik » 29.02.2016{, 09:21}

Слимпер писал(а):Все хотел спросить, в какой последовательности обрабатываются блоки на плате:
Поддерживаю, интересный вопрос.
Win10-64. FLProg Portable.
Изображение

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#10

Сообщение SirYorik » 29.02.2016{, 09:42}

Naladchik писал(а):вход En у переменной подав туда импульс
вот чтото не нравится мне использовать импульсы (одновибратор, он же таймер).
а не в курсе как выставить импульс длительностью не более одного цикла loop(). а от фонаря 1мс на десяток-сотню циклов дёргать одну переменную....

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

порядок операторов в СиКоде не соответсвует порядку на плате

#11

Сообщение support » 29.02.2016{, 09:51}

SirYorik писал(а):а не в курсе как выставить импульс длительностью не более одного цикла loop(). а от фонаря 1мс на десяток-сотню циклов дёргать одну переменную....
Для этого служит R-триггер. Это блок выделения переднего фронта. При переходе сигнала на входе с 0 на 1 на выходе формируется импульс длинной в один цикл программы.
Автор программы FLProg.

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

порядок операторов в СиКоде не соответсвует порядку на плате

#12

Сообщение support » 29.02.2016{, 11:37}

Слимпер писал(а):Все хотел спросить, в какой последовательности обрабатываются блоки на плате:
Блоки в плате могут быть трёх видов. Расчитываемые, оконечные, и логические. 
В первую очередь обрабатываются расчитываеммые блоки. Это триггеры, таймеры, генераторы, сенсоры и т.д.
Затем обрабатываются оконечные блоки. Это в основном блоки которые не имеют выходов. Например вывод на дисплей, вывод на UART, запись в переменные.
Порядок обработки блоков внутри групп организован следующим образом.  Первым обрабатывается блок наиболее близкий по прямой (пришлось вспоминать расчёт гипотенузы в прямоугольном треугольнике) к правому верхнему углу платы. Последним соответственно самый дальний.
Логические блоки  (например AND, OR, входы, математика) не рассчитываются. При обработке блоков других типов запрашивается состояние выходов таких блоков. Они в ответ выдают логические выражения (готовый код С) соответствующие своей логике.  Такое решение принято для экономии памяти контроллера. Не хорошо было бы для каждого логического или математического действия создавать переменную. В большинстве случаев в этом нет необходимости.
Ну где то так. Это очень упрощённо, на самом деле логика компилятора намного сложнее. Я даже не очень представляю как её описать подробно. На это потребуется много времени и сил.
Автор программы FLProg.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

порядок операторов в СиКоде не соответсвует порядку на плате

#13

Сообщение Слимпер » 29.02.2016{, 12:14}

support писал(а):Блоки в плате могут быть трёх видов. Расчитываемые, оконечные, и логические.
  Теперь я понял почему у меня довольно часто получается не то, что я хотел.
Думал, что есть строгая последовательность обработки блоков, как принято в FBD.
Будем учитывать.

Хотя я так до конца и не понял порядок  (из одной группы), по длине гипотенузы от верхнего левого угла платы? Чем короче тем раньше, чем длиннее тем позже?

А сложно сделать вывод индекса последовательности обработке  блока на плате ?

Добавлено (29.02.2016, 12:14)
---------------------------------------------
А пользовательские блоки и какой группе относятся?

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 787
Откуда: Астрахань
Имя: Сергей
Контактная информация:

порядок операторов в СиКоде не соответсвует порядку на плате

#14

Сообщение support » 29.02.2016{, 12:33}

Слимпер писал(а):Хотя я так до конца и не понял порядок (из одной группы), по длине гипотенузы от верхнего левого угла платы? Чем короче тем раньше, чем длиннее тем позже?
Совершенно верно,  только не левого а правого
Слимпер писал(а):А сложно сделать вывод индекса последовательности обработке блока на плате ?
Порядок  обработки рассчитывается в момент компиляции. Если делать это на лету при отрисовке - программа начнёт тормозить (Вы передвинули блок - порядок изменился).
Слимпер писал(а):А пользовательские блоки и какой группе относятся?
Рассчитываемые
Автор программы FLProg.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

порядок операторов в СиКоде не соответсвует порядку на плате

#15

Сообщение Слимпер » 29.02.2016{, 15:34}

support писал(а):Порядок обработки блоков внутри групп организован следующим образом.  Первым обрабатывается блок наиболее близкий по прямой (пришлось вспоминать расчёт гипотенузы в прямоугольном треугольнике) к правому верхнему углу платы. Последним соответственно самый дальний.
4566520.png
Правильно нарисовал?  Изображение Изображение или все же так
4643946.png
support писал(а):Порядок  обработки рассчитывается в момент компиляции. Если делать это на лету при отрисовке - программа начнёт тормозить (Вы передвинули блок - порядок изменился).
Я так и предполагал, жаль. Чтобы не тормозила все время можно было бы сделать так:
1. нажал на кнопку на панели
2. для текущей платы рассчитать индексы,
3. отобразились над блоками, посмотрел,
4. сдвинул блок (или отжал кнопку)
5. индексы пропали.
Но это так размышления.

А вот в каком порядке идёт расчёт на плате, надо обязательно где нибудь подробно написать.
Последний раз редактировалось Слимпер 29.02.2016{, 15:35}, всего редактировалось 1 раз.

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#16

Сообщение SirYorik » 29.02.2016{, 16:08}

правый верхний - ни за что бы не догадался.

ну ОК. но тогда я не понял всё равно, с какой радости отмеченный switch вставился в код первым:
0175072.jpg
или почему  вот этот банальный линейный порядок переставился местами:
3995921.jpg
Добавлено (29.02.2016, 16:08)
---------------------------------------------
Слимпер писал(а):Чтобы не тормозила все время можно было бы сделать так:1. нажал на кнопку на панели
имело-бы смысл привязать эту фишку к кнопке "проверить проект", и галку в настройки (вкл\выкл)

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#17

Сообщение SirYorik » 01.03.2016{, 14:44}

оказывается разделение плат для "пример 3" не особо то помогло.
смотрю логи, ШИМ снова идет в разнос, такое впечатление что коррекция отстает на несколько циклов. полез в код. опять нашел косяк последовательности. он был и в прошлый раз, не стал разглядывать особо, поскольку адские биения вроде ушли, а мелкие не сразу разглядел.

Цитата200?'200px':''+(this.scrollHeight+5)+'px');">if(_gtv22) // свич управляемый stJUMP, второй по порядку в схеме если слева, и третий если справа
{_swi10=(_gtv9)/(88);}
else
{_swi10=_swi4;} // в результате свича фигурирует переменная из предыдущего цикла, а не текущего.
if((_swi10) > (_gtv11))
{_swi3=_gtv11;}
else
{_swi3=_swi10;}
if((_gtv25) <= (0)) // этот свич должен первым идти
{_swi4=0;}
else
{_swi4=_gtv25;}
if(_gtv18)
{_swi5=_swi3;}
else
{_swi5=_gtv4;}
_gtv4 = _swi5;
проставил цифры на схеме, в каком порядке на самом деле выполняет код нарисованную схему:
Вложения
7233063.jpg

SirYorik
Сержант
Сообщения: 124
Зарегистрирован: 04.10.2015{, 10:01}
Репутация: 0
Откуда: Томск

порядок операторов в СиКоде не соответсвует порядку на плате

#18

Сообщение SirYorik » 01.03.2016{, 15:04}

при попытке отселить кусок схемы на дополнительную плату, FLprog скрашился пару раз. На третий раз сохранялся каждый ход.
теперь верный порядок:


Код: Выделить всё

if((_gtv25) <= (0))
{_swi1=0;}
else
{_swi1=_gtv25;}
_gtv32 = _swi1;
if(_gtv22)
{_swi10=(_gtv9)/(88);}
else
{_swi10=_gtv32;}
if((_swi10) > (_gtv11))
{_swi3=_gtv11;}
else
{_swi3=_swi10;}
if(_gtv18)
{_swi5=_swi3;}
else
{_swi5=_gtv4;}
_gtv4 = _swi5;
7032888.jpg
фиг с ними с доп. платами, но поиск такого глюка выжирает кучу времени.

и глядя на большие схемы в форуме, возникает вопрос - это у меня одного такие приколы, или в тех схемах порядок вычислкний не имет значения?
Последний раз редактировалось SirYorik 01.03.2016{, 15:05}, всего редактировалось 1 раз.

Аватара пользователя
Олег
Полковник
Сообщения: 1532
Зарегистрирован: 13.10.2015{, 16:47}
Репутация: 63
Контактная информация:

порядок операторов в СиКоде не соответсвует порядку на плате

#19

Сообщение Олег » 01.03.2016{, 15:55}

Несколько раз было такое что схема стопроцентно рабочая с точки зрения схемотехники и работающая в Zelio не шли здесь, я просто менял логику работы, так-как о том как это компилируется в Си даже не задумывался, да и толку задумываться, если Си не знаю.

Аватара пользователя
VirSpy
Рядовой
Сообщения: 62
Зарегистрирован: 03.12.2015{, 22:40}
Репутация: 3
Откуда: Минск, РБ

порядок операторов в СиКоде не соответсвует порядку на плате

#20

Сообщение VirSpy » 01.03.2016{, 18:53}

Не знаток С. На простых примерах сравнивал разницу. От сюда возникает главный вопрос (особенно для новичков): Как правильно структуировать свою будующую программу ( в какой очередности выстраивть "платы" кнопок, сравнения, часов, индикации и т.д.; возможны ли комбинации разного в одной "плате" (здесь сравнил А с Б - вывел, здесь умножил С на К - вывел), либо: принял-записалпеременную - поигралсяпеременной - вывелпеременную)??
Последний раз редактировалось VirSpy 01.03.2016{, 18:58}, всего редактировалось 1 раз.

Ответить

Вернуться в «Не принятые»