Вопросы по С/С++ (СИ)
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3695863#p3695863"]это меняет все[/uquote]Ну так показывай, будем посмотреть высасывание проблемы из пальца.
- Реклама
Re: Вопросы по С/С++ (СИ)
Прошу принять во внимание мой статус новичка. Ученик, я совсем не профессионал в этом деле, как Вы. Все замечания постараюсь исправить. 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 после каждого "звена цепочки событий" компилится без ошибок. Поеду на железе проверять
Добавлено 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: Вопросы по С/С++ (СИ)
И что, на if(t=1) тебе компилятор никакого варнинга не написал?
[uquote="Billi34",url="/forum/viewtopic.php?p=3695995#p3695995"]Здесь мне не понятно -фигурные скобки после while и с ними компилируется и без них[/uquote]Компилируется всё что синтаксически верно записано. Только со скобками и без это будет разный алгоритм.
[uquote="Billi34",url="/forum/viewtopic.php?p=3695995#p3695995"]Здесь мне не понятно -фигурные скобки после while и с ними компилируется и без них[/uquote]Компилируется всё что синтаксически верно записано. Только со скобками и без это будет разный алгоритм.
Re: Вопросы по С/С++ (СИ)
может я не вижу. будьте снисходительны. Или это демо версия компилятора такая?
- Вложения
-
- инговнет.PNG
- (70.63 КБ) 280 скачиваний
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Компилятор, однозначно, в топку. Вот на такой коддолжно выдаваться что-то типа
И я в третий раз спрашиваю вместо компилятора, ты правда хотел написать if(t=0) или всё же if(t==0)? Или тебе всё равно, лишь бы компилировалось?
Код: Выделить всё
if(data=255)
SPI_Tx<uint16_t>(data);
else
SPI_Tx<uint8_t>(data);
Код: Выделить всё
Warning[Pe187]: use of "=" where "==" may have been intended - Реклама
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
Billi34, мда, это Вам не GCC. У MikroC мозгов намного меньше и о таких косяках он предупреждать не умеет.
Re: Вопросы по С/С++ (СИ)
В этой строке я хочу: если переменная t все еще равна 1 (т.е. не была сброшена в ноль в пред идущих строках) управление перешло к mesto_2:
возможно я не правильно записал свою мысль в компиляторе.
Добавлено after 1 minute 15 seconds:
возможно я не правильно записал свою мысль в компиляторе.
Добавлено after 1 minute 15 seconds:
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
Напишите просто if(t)
Re: Вопросы по С/С++ (СИ)
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3696163#p3696163"]Billi34, мда, это Вам не GCC. У MikroC мозгов намного меньше и о таких косяках он предупреждать не умеет.[/uquote]

- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3696168#p3696168"]Напишите просто if(t)[/uquote]Думаешь это поможет пониманию? 
Re: Вопросы по С/С++ (СИ)
[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]
Я понимаю что знак равно совсем не равно. Только компилятор "прожевал" это и никто не скажет что так нельзя.
Что мне скачать ? 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]Думаешь это поможет пониманию?
Я понимаю что знак равно совсем не равно. Только компилятор "прожевал" это и никто не скажет что так нельзя.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
[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]
В том то и дело, что так можно. Результат операции присваивания определен и равен присваиваемому значению.
Например, выражение:
совершенно корректно: сначала k будет присвоено значение 3, потом j значение 36 и l значение 10, а затем уже i - значение 46.
Вот только выражение t==1 принимает значение ложь, если t не равно единице, а выражение t=1 - всегда истинно.
Возможно. В любом случае, для приведенного кода это правильно )
Добавлено 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)));
Вот только выражение t==1 принимает значение ложь, если t не равно единице, а выражение t=1 - всегда истинно.
Re: Вопросы по С/С++ (СИ)
таким образом : if(t==1)
{A}
B
если t равно единице выполняется А
если t равно нулю выполняется В
в моем случае
(t=1) при любом значении t выполняется А
{A}
B
если t равно единице выполняется А
если t равно нулю выполняется В
в моем случае
(t=1) при любом значении t выполняется А
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
[uquote="Billi34",url="/forum/viewtopic.php?p=3696263#p3696263"]таким образом : if(t==1)
{A}
B[/uquote]
если t равно единице, то выполняется А, затем B и всё что дальше.
если t равно нулю, то В и всё что дальше.
{A}
B[/uquote]
если t равно единице, то выполняется А, затем B и всё что дальше.
если t равно нулю, то В и всё что дальше.
Re: Вопросы по С/С++ (СИ)
Чуть чуть переделал. Теперь по ходу выполнения кода на строке 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: Вопросы по С/С++ (СИ)
[uquote="Billi34",url="/forum/viewtopic.php?p=3696923#p3696923"]Как заставить МК ...[/uquote]Поменять подход к реализации алгоритма.
Почитай про конечные автоматы. Запусти таймер и с определённой частотой анализируй состояние системы. Это тебе позволит точнее с временем работать. А состояния конечного автомата хорошо ложатся на оператор switch. Тебе останется только прописать условия перехода из каждого состояния в другое и соответствующие действия. Поверь, это куда проще отлаживать, чем блуждания по твоим goto с кучей неинформативных переменных-флагов. И не надо спорить, лучше день потерять, потом за 5 минут долететь. Ты и так уже на эту лабуду столько времени убил.
Почитай про конечные автоматы. Запусти таймер и с определённой частотой анализируй состояние системы. Это тебе позволит точнее с временем работать. А состояния конечного автомата хорошо ложатся на оператор switch. Тебе останется только прописать условия перехода из каждого состояния в другое и соответствующие действия. Поверь, это куда проще отлаживать, чем блуждания по твоим goto с кучей неинформативных переменных-флагов. И не надо спорить, лучше день потерять, потом за 5 минут долететь. Ты и так уже на эту лабуду столько времени убил.
Re: Вопросы по С/С++ (СИ)
Ну я же учусь. goto уже не используются, если вы заметили. switch тоже весьма загадочный оператор, для меня.
1.4.6. Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.
очень интересная инфа. Чем то напоминает так не любимый вами goto. Это на самом деле так?
1.4.6. Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.
очень интересная инфа. Чем то напоминает так не любимый вами goto. Это на самом деле так?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="Billi34",url="/forum/viewtopic.php?p=3697111#p3697111"]Чем то напоминает так не любимый вами goto. Это на самом деле так?[/uquote]это на самом деле так, это по сути псевдоним оператора goto, как и оператор continue.
у программистов всегда так: если что-то считается плохим, его можно или обозвать иначе, или прописать с стандарте, как хорошее - и проблема автоматически исчезает 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


