Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=3695863#p3695863"]это меняет все[/uquote]Ну так показывай, будем посмотреть высасывание проблемы из пальца.
Реклама
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

Прошу принять во внимание мой статус новичка. Ученик, я совсем не профессионал в этом деле, как Вы. Все замечания постараюсь исправить. txt файл это потому что код вставляется криво почти так же как и текстовом файле. Варнинги как раз читаю. В компиляторе синтаксические ошибки выделяются красной подсветкой. И я посматриваю в низ окна компилятора. Да и кнопка BILD не активна в этом случае.

Добавлено after 6 minutes 23 seconds:
PORTB.В1+0 опечатка . Пин выключается этой командой PORTB.В1=0

Добавлено after 30 minutes 53 seconds:
Не пойму как вставить в текст код.

Добавлено after 26 minutes 5 seconds:
while(!PIND.B1&&i<20&&t)
{ Delay_ms 800; // первое звено цепочки событий
if(i<18)
{
t=0 ;
goto mesto_1;
}
Delay_ms(100) ;i++;
}
Здесь мне не понятно -фигурные скобки после while и с ними компилируется и без них---- с ними else начинается после скобок, без них в следущей строке после while так?

Добавлено after 6 minutes 5 seconds:
Исправил. Добавил скобки. По замыслу работать должно с ними.

Добавлено after 1 hour 12 minutes 40 seconds:
С учетом замечаний Простону6 добавил опрос PINB.B0 после каждого "звена цепочки событий" компилится без ошибок. Поеду на железе проверять
Вложения
исправл с пин Б 0 .c
(3.36 КБ) 256 скачиваний
NewUnit.c
(3.01 КБ) 282 скачивания
NewUnit.c
(3.04 КБ) 265 скачиваний
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

И что, на if(t=1) тебе компилятор никакого варнинга не написал?

[uquote="Billi34",url="/forum/viewtopic.php?p=3695995#p3695995"]Здесь мне не понятно -фигурные скобки после while и с ними компилируется и без них[/uquote]Компилируется всё что синтаксически верно записано. Только со скобками и без это будет разный алгоритм.
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

может я не вижу. будьте снисходительны. Или это демо версия компилятора такая?
Вложения
инговнет.PNG
(70.63 КБ) 280 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

Компилятор, однозначно, в топку. Вот на такой код

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

  if(data=255)
    SPI_Tx<uint16_t>(data);
  else
    SPI_Tx<uint8_t>(data);
должно выдаваться что-то типа

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

Warning[Pe187]: use of "=" where "==" may have been intended 
И я в третий раз спрашиваю вместо компилятора, ты правда хотел написать if(t=0) или всё же if(t==0)? Или тебе всё равно, лишь бы компилировалось?
Реклама
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Billi34, мда, это Вам не GCC. У MikroC мозгов намного меньше и о таких косяках он предупреждать не умеет.
Реклама
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

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

Добавлено after 1 minute 15 seconds:
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Напишите просто if(t)
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3696163#p3696163"]Billi34, мда, это Вам не GCC. У MikroC мозгов намного меньше и о таких косяках он предупреждать не умеет.[/uquote]
:shock:
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3696168#p3696168"]Напишите просто if(t)[/uquote]Думаешь это поможет пониманию? :)
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3696160#p3696160"]Компилятор, однозначно, в топку.[/uquote]
Что мне скачать ? AVR Studio я ставил для другого проекта- для меня слишком сложная среда разработки. Я еще не умею так разрабатывать.

Добавлено after 2 minutes 54 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3696174#p3696174"][uquote="ПростоНуб",url="/forum/viewtopic.php?p=3696168#p3696168"]Напишите просто if(t)[/uquote]Думаешь это поможет пониманию? :)[/uquote]
Я понимаю что знак равно совсем не равно. Только компилятор "прожевал" это и никто не скажет что так нельзя.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="Billi34",url="/forum/viewtopic.php?p=3696177#p3696177"]Только компилятор "прожевал" это и никто не скажет что так нельзя.[/uquote]Почему же нельзя? Можно! В ногу себе стрелять, в принципе, тоже можно...
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3696174#p3696174"][uquote="ПростоНуб",url="/forum/viewtopic.php?p=3696168#p3696168"]Напишите просто if(t)[/uquote]Думаешь это поможет пониманию? :)[/uquote]
Возможно. В любом случае, для приведенного кода это правильно )

Добавлено after 9 minutes 34 seconds:
[uquote="Billi34",url="/forum/viewtopic.php?p=3696177#p3696177"]Я понимаю что знак равно совсем не равно. Только компилятор "прожевал" это и никто не скажет что так нельзя.[/uquote]
В том то и дело, что так можно. Результат операции присваивания определен и равен присваиваемому значению.
Например, выражение:

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

  uint8_t i,j,l,k;
  i=((k=3),((j=k*12)+(l=k*3+1)));
совершенно корректно: сначала k будет присвоено значение 3, потом j значение 36 и l значение 10, а затем уже i - значение 46.

Вот только выражение t==1 принимает значение ложь, если t не равно единице, а выражение t=1 - всегда истинно.
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

таким образом : if(t==1)
{A}
B

если t равно единице выполняется А
если t равно нулю выполняется В

в моем случае

(t=1) при любом значении t выполняется А
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="Billi34",url="/forum/viewtopic.php?p=3696263#p3696263"]таким образом : if(t==1)
{A}
B[/uquote]

если t равно единице, то выполняется А, затем B и всё что дальше.
если t равно нулю, то В и всё что дальше.
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

:)
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

Чуть чуть переделал. Теперь по ходу выполнения кода на строке 43 выполняется задержка 0.25 сек. Далее (строка 45) ожидается фронт по PIND.B1 для выполнения фиг. скобок следующих за этим условием: if(PIND.B1&&t). Но по факту фронт на PIND.B1 придет примерно через 0.25 сек. Естественно МК "пролетает" это условие. Как заставить МК ожидать фронт?
Вложения
NewUnit.c
(3.26 КБ) 279 скачиваний
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="Billi34",url="/forum/viewtopic.php?p=3696923#p3696923"]Как заставить МК ...[/uquote]Поменять подход к реализации алгоритма.

Почитай про конечные автоматы. Запусти таймер и с определённой частотой анализируй состояние системы. Это тебе позволит точнее с временем работать. А состояния конечного автомата хорошо ложатся на оператор switch. Тебе останется только прописать условия перехода из каждого состояния в другое и соответствующие действия. Поверь, это куда проще отлаживать, чем блуждания по твоим goto с кучей неинформативных переменных-флагов. И не надо спорить, лучше день потерять, потом за 5 минут долететь. Ты и так уже на эту лабуду столько времени убил.
Аватара пользователя
Billi34
Открыл глаза
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Re: Вопросы по С/С++ (СИ)

Сообщение Billi34 »

Ну я же учусь. goto уже не используются, если вы заметили. switch тоже весьма загадочный оператор, для меня.


1.4.6. Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.

очень интересная инфа. Чем то напоминает так не любимый вами goto. Это на самом деле так?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

[uquote="Billi34",url="/forum/viewtopic.php?p=3697111#p3697111"]Чем то напоминает так не любимый вами goto. Это на самом деле так?[/uquote]это на самом деле так, это по сути псевдоним оператора goto, как и оператор continue. :) у программистов всегда так: если что-то считается плохим, его можно или обозвать иначе, или прописать с стандарте, как хорошее - и проблема автоматически исчезает :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «Разные вопросы по МК»