И снова цикл...

Dimitry
Offline
Зарегистрирован: 10.06.2018

Доброго времени суток!

Вступление.

Я студент (4 курс, колледж). Делаю робота.
Думаю, что лучше уровень моих знаний считать не очень высоким.
Изюминка робота в возможности управления при помощи HC-05 и NRF24L01.
Проект состоит из -
1) собственно платформы (ДАЛЕЕ "ОСНОВА") с сервами, ардуиной и т.д.
2) двух шилдов, на каждом из которых собрана схема с НС-05 и НРФ24Л01 соответственно.
Суть в чем - я беру основу, ставлю в нее шилд, подаю питание, подаю сигнал управления,
после которого робот выполняет действие в зависимости от полученного сигнала.
Действия два - идти вперед или стать в стойку.
Поскольку, как вы уже поняли, я меняю шилди в зависимости от выбраного канала управления, было бы неплохо весь необходимый код иметь в одном скетче, что бы не перепрошивать.
Такой код есть.
Код, отвечающий за стойку и движение вперед, записан в две отдельные функции.
Вся магия происходить (точнее должна) в loop(). Ниже представлен код, который на
данный момент работает хоть как-то.

void loop()
{
  if (Serial.available() > 0)
  {
    buttonNum = (char) Serial.read(); 
    if (buttonNum == '0')
    {
      forward();
    }
    else if (buttonNum == '1')
    {
      stance();
    }
  }
  else if (radio.available() > 0)
   {
    radio.read(ReceivedMessage, 1);
                                           
    if (ReceivedMessage[0] == 1)
    {
      forward();
    }
     else if (ReceivedMessage[0] == 0)
    {
      stance();
    }
  }
}

 

Пояснение к коду.
В строке 3 делается опрос последовательного порта на наличие данных с НС-05.
В строке 15 делается опрос радиомодуля на наличие данных.
Далее, в обеих случаях, пришедшие данные записываются в переменные,
которые в свою очередь "работают" в цикле дальше. Часть, отвечающая за радиомодуль (со строки 15), работает так, как я и хочу. Нажал кнопку "Вперед" - робот идет
(до тех пор, пока не подан сигнал стaть в "Стойку"), нажал кнопку "Стойка" - стал в стойку. А вот при работе с НС-05 есть проблема. При нажатии на кнопку Вперед робот начинает идти вперед,
но делает это не бесконечно (до тех пор, пока не будет подан сигнал стать в стойку, как в случае с радиомодулем),
а делает один полный цикл движения всеми лапами (то есть получается что функция "вперед()", в которой записан массив шагов,
выполняется один раз). Что бы робот шел вперед, мне необходимо постоянно нажимать кнопку "Вперед".
Проще говоря, часть цикла loop(), отвечающая за радиомодуль, работает ожидаемо, а в части с НС-05 отсутствует постоянное движение.

ПОПЫТКИ РЕШЕНИЯ
Я предполагаю (точнее очень надеюсь), что проблема состоит в неправильности кода в loop().
Точнее, проблема в ммм... "цикличности". Или цикл else...if нужно поменять на другой, или нужно записать его правильно.
Интересность - если части функции loop() поменять местами, то перестает работать все.

С нетерпением ожидаю вопросы, ответы и т.д.

P.S. Я пробовал сделать цикли while и switch, но они не заработали. P.S.S. Дичайше извиняюсь за форматирование текста и ошибки.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Dimitry пишет:

Я предполагаю (точнее очень надеюсь), что проблема состоит в неправильности кода в loop().

И как ты догадался? Шаман, однако!

Dimitry пишет:

Или цикл else...if нужно поменять на другой, или нужно записать его правильно.

Это да. Или нужно поменять на цикл switch, или, наконец, написать хоть что-нибудь правильно.

Dimitry пишет:

Интересность - если части функции loop() поменять местами, то перестает работать все.

Да, действительно, интересно девки пляшут, по четыре штуки в ряд!

Dimitry пишет:

пробовал сделать цикли while и switch, но они не заработали.

Попрбуй цилкл return - должен заработать.

Dimitry пишет:

Я студент (4 курс, колледж). 

Специальность? Ботаника? История балета?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dimitry пишет:
Часть, отвечающая за радиомодуль (со строки 15), работает так, как я и хочу. Нажал кнопку "Вперед" - робот идет

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

Dimitry
Offline
Зарегистрирован: 10.06.2018

Специальность - Компьютерная инженерия. Направление - Обслуживание компьютерных систем и сетей.

Мне не очень понятен ваш сарказм. Думаю что без него можно обойтись.
Задам уточняющий вопрос - в данном случае, какой цикл подойдет лучше?

Сейчас попробую сделать на return.

Dimitry
Offline
Зарегистрирован: 10.06.2018

ЕвгенийП пишет:

Dimitry пишет:
Часть, отвечающая за радиомодуль (со строки 15), работает так, как я и хочу. Нажал кнопку "Вперед" - робот идет

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

Можно, пожалуйста, поподробней про этот resume(). Оно относиться к библиотеке RF24 или что? В код вставить?

Dimitry
Offline
Зарегистрирован: 10.06.2018

Насчет return. Никак не пойму как его использовать.
Возможно кто-нибудь подскажет (а лучше покажет)?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Dimitry пишет:
Специальность - Компьютерная инженерия. Направление - Обслуживание компьютерных систем и сетей.

Мне не очень понятен ваш сарказм. Думаю что без него можно обойтись.
Задам уточняющий вопрос - в данном случае, какой цикл подойдет лучше?

Сейчас попробую сделать на return.

Извините, но я с ужасом представляю если вы влезете например в обслуживание моей компьютерной локальной сети.
Я например не понимаю как с помощью ардуино обслуживать компьютерные сети - бегите от этой специальности.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Dimitry пишет:

Насчет return. Никак не пойму как его использовать.
Возможно кто-нибудь подскажет (а лучше покажет)?

Юным падаванам нельзя сразу приступать к изучению таинства цикла "return"!

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

И, только освоив эти премудрости, можно приступать к циклу "return".

Dimitry
Offline
Зарегистрирован: 10.06.2018

Вот робота не сделаю и побегу (точнее меня попросят))) А серьезно - ребят, давайте по сути дела.
Давайте будем считать что я обнаглел, и прошу у вас код (например как с return).

Dimitry
Offline
Зарегистрирован: 10.06.2018

wdrakula, то есть учите матчасть! Правильно?))
В какую сторону еще можно покопать?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Понимаете ли....то ваш код что выше это вообще не о чем, вы бы хоть для приличия взяли бы с интернета или с форума рабочий и хоть как то попытались его до ума довести, резюме - читать литературу или платить. Тут не любят халявщиков и это правильно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Dimitry пишет:

Давайте будем считать что я обнаглел, и прошу у вас код .

Давай, конечно!

Мой ответ - иди в жопу! Подробности нужны?

--------------

Ну, чтобы не выглядеть законченным хамом поясню позицию:

Никак и никогда не следует помогать студентам делать контрольные задания любого вида. Это плохая услуга и студенту и обществу. Понятно?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:

 иди в жопу! Подробности нужны?

А то! 

Dimitry пишет:

пожалуйста, поподробней ... В какую сторону еще можно покопать?

Dimitry
Offline
Зарегистрирован: 10.06.2018

Все же соглашусь с некоторыми в своей обнаглевшости. Видимо мне стоит поубавить пил.
Так же сделаю уточнение - я прошу не дать мне готовый код, а примеры (ссылки, скрини), которые помогут понять как выглядят то что вы советуете.
Но грубостями отвечать - себя не уважать. Предлагаю все же отвечать по делу (или вовсе не отвечать).

По факту, на данный момент, имеем след. вопросы:
1) второе сообщение (по поводу resume) - что за зверь, и где его искать?
2) в каком направлении вы бы двигались, что бы заставить код в loop() работать
(использовать другой цикл, или он тут вообще не нужен)?
3) в чем кроме кода в loop() может быть проблема?

Думаю для начала стоит разобраться с resume, поэтому будем считать этот вопрос приоритетным.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Dimitry пишет:
Вот робота не сделаю и побегу (точнее меня попросят))) А серьезно - ребят, давайте по сути дела.

Ну, во-первых, здесь собрались ребята, которые, минимум, в два, а чаще - в три раза старше Вас.

Цитата:

Давайте будем считать что я обнаглел, и прошу у вас код (например как с return).

А во вторых, Вам с такими заявками прямой путь в раздел "Ищу исполнителя".

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Dimitry пишет:

1) второе сообщение (по поводу resume) - что за зверь, и где его искать?

В сообщении №2 совершенно недвусмысленно сказано, что resume должен быть обращен к радиомодулю. Соответственно, в библиотеке радиомодуля его и следует искать.

Цитата:

2) в каком направлении вы бы двигались, что бы заставить код в loop() работать (использовать другой цикл, или он тут вообще не нужен)?

Начал бы с того, что убрал оттуда все лишнее.

Цитата:

3) в чем кроме кода в loop() может быть проблема? Думаю для начала стоит разобраться с resume, поэтому будем считать этот вопрос приоритетным.

Проблема совсем не в loop, прблема в том, что Вы, по всей видимости, неправильно выбрали специальность. Не следует выбирать профессию, которая Вас совершенно не интересует.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dimitry пишет:

Предлагаю все же отвечать по делу

Хорошо, отвечу абсолютно по делу. И ничего кроме дела.

Dimitry пишет:

примеры (ссылки, скрини), которые помогут понять как выглядят то что вы советуете.

Это невозможно. Вы не владеете предметом абсолютно, вы не знаете терминологии. А когда человек не знает, что означают слова - он не может понять никакого объяснения.

Вы даже не поняли, что "цикл return" - это просто троллинг, т.к. в природе не существует никаких циклов return, также, как и упоминаемых Вами циклов else if, loop и switch. Нет таких циклов, потому над Вам и начали просто издеваться с циклом return.

Dimitry пишет:

resume - что за зверь, и где его искать?

Там же, где и всё остальное, связанное с радиомодулем.

Dimitry пишет:

в каком направлении вы бы двигались

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

Dimitry пишет:

в чем кроме кода в loop() может быть проблема?

В полном и абсолютном отсутствии у Вас каких-либо знаний о программировании. И ни в чём другом. Других проблем просто нет.

-------------------

Это было достаточно по делу?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Продолжу Евгения (абсолютно с ним согласен): В данном конкретном случае (4-й курс компьютерная инженерия), если Вас и "попросят", то это для Вас же станет Благом. Ибо Вам придется сходить в Армию, и там Вас хорошо и быстро научат читать даташиты, которые уже более-менее внятно читает мой пацан в свои 12 лет. С яндекс-переводчиком на пару, но практически уже читает.

И да, как вариант, можете скинуть ему ТЗ, возможно он Вам поможет, если захочет .. помнится он 1500руб. просил на какую-то там приблуду. Мыло: arhat109 собака мейл точка ру.

Но не обещаю, что он - возьмется.

VicSan
Offline
Зарегистрирован: 27.04.2017

Опять двадцать пять. Обосрать ближнего, хотя сам дебил. Уберите нафиг else if. Только if. Можно switch case. Во вторых, естественно, постоянно не будет работать, как у Вас написано. Отправил символ - сделал действие. Ставьте флаги. И пока флаг true- выполняется функция одна. Флаг изменился на false- другая. Но порты читать нужно постоянно. И особое пожелание Евгений П. Ну сам-то ВЫ от ардуино не ушли никуда. Я вам уже сегодня в другой ветке написал. Не могу понять, то-ли Вы выжрали больше , чем нужно, то-ли реально у Вас с мозгами херово. Не знаете, ну ху-ли советы кидать.И ДА- return существует!!! Просто Вы о нем не слыхали, не читали, не смотрели. Жгите дальше дома светодиоды, повторяйте чужие проекты. Это=Ваш максимум.  И теперь автору темы. Дима, помогу чем могу, безвозмездно. Пиши в личку или на почту. И совет тебе - на этом портале готовся услышать о себе много нехорошего, но по делу- ни хе-ра. У меня вагон проектов. На заказ и для семьи. Но здесь не выложил ни одного из-за таких как Евгений. Ну а вопросы здесь задавать противопоказано. Одни, мля, умники сидят. Светодиодики дома зажигают. 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Здря Вы тут флагами размахались .. впрочем, не Вы первый, не Вы последний(сам такой был).

Просто Вы ещё не разобрались, что это форум преподавателей ДЛЯ студентов. Все эти "поможите мы не местные" - это студенты недоучки, которым эти преподы суют одни и теже задания "в разнообразии" и часто (года 1.5 назад так было - точно) те самые "новые проекты, что тут выкладывают такие вот "сторонние посетители". Ещё не надоело пачками читать одни и те же темы, с обострением к сессии, особенно ближе к её завершению?

Так шта .. помогать горе-студьезусам, да ещё и "бесплатно" .. ну-ну .. потом такие вот недоучки придут к Вам же работать, и тыкать Вас же "как надо делать". Или не к Вам, без разницы. Или на военное производство и будут пихать дуньки куда попало... Вы точно такого хотите? (Благими намерениями, дорога в Ад вымощена).

И движок тут корявый исключительно по этой причине: что студенты сумели, то и наваяли .. а теперь это "выкинуть" жалко, а переделывать .. уже некому. Только мелкие правки.

P.S. Года 2 уже назад, в качестве "тренировки восстановить язык" накатал левой-задней небольшую библиотечку .. тот же ЕвгенийП тут же приводил её переделку от .. "своего студента" .. вот с тех пор, я сильно уверен, что он сам (и мн. другие тут) самостоятельно НЕ сделали НИ ОДНОГО проекта, хотя часто выступают тут в качестве "гуру".

Не берите в голову, обычные препод-студент разборки.. (сам повзал, сам же и обосрал).. тут это часто.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Писатель деления в дефайнах без скобок, поддержал адепта цикла return. Отличная компания!

VicSan
Offline
Зарегистрирован: 27.04.2017

Вообще не понял, к чему это

VicSan
Offline
Зарегистрирован: 27.04.2017

Да все просто- хочешь помочь -ответь. Не хочешь- проигнорируй. 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

VicSan пишет:

Вообще не понял, к чему это

Панималка не выросла? Поясню. Один любитель лички написал, что цикл return существует, а другой фанат писать в дефайнах деления без скобок, его поддержал. Хорошая компания грамотных ребят.

VicSan пишет:

хочешь помочь -ответь. Не хочешь- проигнорируй. 

Помочь - это посоветовать книгу, а не сделать за дурака. А сам-то чё не помог? Про личку какую-то стал трындеть, которой на этом форуме отродясь не было.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ворота пишет:

 а другой фанат писать в дефайнах деления без скобок,

Ну а чо - норм, работает же :) Там что-то типа такого было (а то я пропустил десерт, видимо):

#define DIV(x,y) x/y

Угадал дичь?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Нет не угадал. Там было константное приведение частоты к частоте процессора, для ПРЕпроцессора. Просто некоторые идиоты, что сами никогда и ничего не писали, очень хорошо запоминают чужие ляпы, что завсегда выдает в таком дебиле .. "учителя". Это тот который сам не умеет, значит учит. На вору шапка всегда горит. И пофиг что ляп там был "сильно условный", ибо нужен был исключительно для препроцессора, но его пытались применить к вычислению переменной. Мартышки-с, чего взять-то. Очки и те надеть не сумеют. :)

Впрочем, я на таких дебилов внимания уже давно не обращаю. Они сами себя выдают: ибо "сила дурака в молчании". :)

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

DIYMan пишет:

Ну а чо - норм, работает же :) Там что-то типа такого было (а то я пропустил десерт, видимо):

#define DIV(x,y) x/y

Угадал дичь?

Ещё хлеще, там делитель запросто оказывался больше делимого и вообще всегда ноль получался.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Arhat109-2 пишет:
очень хорошо запоминают чужие ляпы

Сначала все и подумали, что это случайный ляп, типа описки, но ты кинулся до усрачки доказывать, что там всё правильно и так можно (носом ткнуть?). Ну, а раз "всё правильно", значит это был не ляп, и не описка, а твоя, прости Господи, квалификация. Чего с прогера взять?

И, да, память у меня хорошая, в отличие от тебя. Забыл уже, как ты недавно писал, как местные дураки фаэтона обсирали, пока тебя не ткнули носом, что сам же ты его первым и обсирал?

Не надоело ещё, что в тебя в твоё собственное дерьмо макают постоянно? Может поумеришь пыл и перестанешь на людей кидаться? Тебя ведь в этой теме никто не трогал - сам, по своей воле говномёт расчёхлил. Обтекай теперь.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Расписал новичку уровень этого форума. Не больше. Что, задело? Ну так таких как Вы тут есть некоторое количество с хорошей памятью, что сами ничего ни написали ни сделали. Преподы, бл. Кто сам не умеет, тот учит.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Я никого ничему не учу - это ты там кружки ведёшь. Только вот меня удивляет, если ты сам дефайн написать не можешь, чтобы срача на весь форум не устроить, то как и чему ты можешь научить? Впрочем, мне пофиг - это твои тараканы.

arduino328
Offline
Зарегистрирован: 01.09.2016

Ворота пишет:

Впрочем, мне пофиг - это твои тараканы.

Тараканы Arhat109-2 захватывают мир :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Де'биллам, забывшим тот спор посвящается: http://arduino.ru/forum/programmirovanie/biblioteka-dlya-tsifrovogo-vykhoda#comment-191802

------------------

"Это макропродстановка и в нормальном выражении он будет выглядеть так:

int time = 100*TSC_PERIOD; что после разворачивания макроса даст

int time = 100*(1000/1024); что после предвычисления компилятором константы даст 97,65625 что после преобразования компилятором к целой константе даст 97, что и требовалось. :)"

и далее: "Похоже "улучшил" макрос когда переносил в файл." сказано про добавленные СКОБКИ и только.

Так что не поняли до сих пор. И "брехло" - тут только Вы.

---------------------

Макрос TSC_PERIOD был сделан ИСКЛЮЧИТЕЛЬНО для того, чтобы не пересчитывать КОНСТАНТЫ времени НА КАЛЬКУЛЯТОРЕ ВРУЧНУЮ, а переложить эту заботу на макрос и препроцессор. И только. Вы до сих пор так и не поняли КАКУЮ ошибку я тогда признал (во, тупые!): ошибка заключалась в том, что пересматривая код ДОБАВИЛ в этот макрос СКОБКИ, которых там не должно было быть изначально.

Да, он зависит от места его употребления .. и что? Желание употреблять не то и не туда .. право любой обезьяны. Смотрим басню Крылова "Мартышка и очки".

И ещё, напомню: код ПРАВИЛЕН, если он работает по назначению, согласно его описанию. А вовсе не потому что "так препод решил".

Впрочем, Вас тут таких тупых только двое к счастью.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Arhat109-2 пишет:
Это макропродстановка и в нормальном выражении он будет выглядеть так:

....

int time = 100*TSC_PERIOD; что после разворачивания макроса даст

int time = 100*(1000/1024); что после предвычисления компилятором константы даст 97,65625 что после преобразования компилятором к целой константе даст 97, что и требовалось.

....

Ты это добровольно написал? Тебя никто не принуждал? Ты так сам думаешь?

вот тебе сцылачка

на онлайн иде для демонстрации ;)

вот Кот для проверки .

#include <stdio.h>

#define   TSC_PERIOD (1000  /1024)
#define W_TSC_PERIOD (1000.0/1024)
int main(void) {
	
	int a = 100*TSC_PERIOD;
	double f = 100*W_TSC_PERIOD;
	
	printf ("a = %3d f = %6f\n", a,f);
	return 0;
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Архат, с Вами тогда говорил я, а не он, давайте я и сечас отвечу.

Тогда я сразу жа Вам сказал, что то, что Вы пишете

Arhat109-2 пишет:

в нормальном выражении он будет выглядеть так:

int time = 100*TSC_PERIOD; 

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

int time = TSC_PERIOD*100; 

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

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

Долгое время, мы с Вами придерживались нейтралитета и всё было тихо и мирно. Нне знаю, зачем Вы написали Ваш высер в этой теме, но если ради холивара - Вам не повезло, его не будет. Я могу поспорить со специалистом, но спорить с человеком, который не может нормально написать дефайн и доказывает, что говнокод - это павильно, простите, мне неинтересно. Холиварьте сами с собой. Ну, или с кем-нибудь из своей лиги - я из другой.

 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Влад, Вы слишком хорошего мнения об этом "прогере".

У него было нет так, как Вы предположили

wdrakula пишет:

#define   TSC_PERIOD (1000  /1024)

а гораздо более говнокодисто - вот так

#define   TSC_PERIOD  1000 /1024

Потому у него и получалось, что 100*TSC_PERIOD - более или менее ничего. И этот, прости Господи, "прогер" до усрачки доказывал (и сейчас продолжает), что это правильно, и это не говнокод.

После этого, я понял, что говорить с ним не о чем абсолютно, и пару лет не говорил, пока он тут опять не высрал.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

я уже понял. Сложно все тут. У человека явно комплекс "не признавать ошибки". Бороться с этим невозможно, а жаль. Мозг у Архата есть, ему в армию.... ;) ;) ;)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Высрал тут автор поста №20. С него и пошли "воспоминания". Далее разбирайтесь сами, раз читать не умеете до сих пор, тут выше изложено все что нужно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Arhat109-2 пишет:

Высрал тут автор поста №20.

Ты свои детские а-битки оставь... плз. Мне не очень интересно.

Давай с чистого листа:

Вот такая строчка:

#define   TSC_PERIOD  1000 /1024

Никак, никогда, ни у кого, старше 6 лет, ни в каком коде, ни при каких оправданиях и обстаятельствах

не может появиться!

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

Без ссылок на то как где и почему она появилась... это все пыль, не нужное обрамление, просто ответь на вопрос, ОК?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Arhat109-2 пишет:

Высрал тут автор поста №20

Да, нет, уж первенство по праву принадлежит автору поста №19. Это бы вброс, после которого до сих пор брызжет.

Тут Граф вежливо так сказал про непризнание ошибок, а я парень простой, я поконкретнее скажу: все мы иногда обсираемся. Но одни при этом быстренько стирают штаны и помалкивают, а другие, вроде тебя, продолжают ходить в засранных штанах и уверять всех, что мол так и должно быть - это мол правильно, модно и стильно.

Давай завязывать, задолбало уже.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

"Если ты такую строчку увидишь в коде своего сына, то применишь телесные или (если вдруг противник) психологические методы наказания, так или не так?"

Телесные - вообще не применял практически. (круто промахнулся по клаве :)

Если такое увижу - наказания .. нет не будет, но! Конечно же выскажусь ПОЧЕМУ ТАК ПИСАТЬ ПЛОХО И НЕ СТОИТ. Так может писать только тот, кто ТОЧНО ЗНАЕТ чего он хочет и зачем такое пишет, но и только.

Потому что в "общем виде" это нельзя считать ошибкой, ибо конструкция допустима для препроцессора. Более того, препроцессор для того и существует и был сделан в "С", чтобы можно было ИЗМЕНЯТЬ содержимое исходника ДО компиляции, в т.ч. и вот такими "грязными методами". В частности для переноса кода на другую платформу. То, что она требует строго определенного употребления .. ну так много чего в языке такого что точно также это требует. Это - нормально. И примеры того, что конструкции языка используются не так и не там - тут полно у местных студентов (что косвенно говорит о низком качестве преподов)

Другое дело, что такие куски кода в паблике не должны появляться - скорее да чем нет. Или обрамляться существенными коментами для использования "по назначению", а не как "дурачкам взбрелось" (что мы тут и увидели). В общем-то, этот макрос был выложен в паблик "по ошибке". Он был нужен (и сейчас используется) только для того, чтобы не считать константы времени на куркуляторе, а переложить эту мелкую работу даже не на компилятор, а на ПРЕПРОЦЕССОР, но реакция на него - очень хороший лакмус для каждого "препода", что мы все и смогли пронаблюдать воочию.

"Препод" - это тот, кто сам ничего не написал, но зато оч. хорошо усвоил комплект "ДОГМАТОВ": так можно, а вот так - говнокод и низзя, чем и дрючит своих студентов время от времени (надо же как-то развлекаться).

Можно, можно многое. Но надо хорошо понимать что ты пишешь, зачем и как оно будет работать в оконечном виде. :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ворота пишет:

Arhat109-2 пишет:

Высрал тут автор поста №20

Да, нет, уж первенство по праву принадлежит автору поста №19. Это бы вброс, после которого до сих пор брызжет.

У вас до сих пор "брызжет"? Во как пробрало-то ..

пост №19 - всего лишь(!) мое ИМХО о качестве и содержимом этого форума (что Вы тутже не преминули доказать всем, нестерпев и просравшись в посте №20). Может оно так, может нет .. но это Имею Мнение Х** Оспоришь.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Arhat109-2 пишет:

...

Потому что в "общем виде" это нельзя считать ошибкой, ибо конструкция допустима для препроцессора.

Короче ясно, что без "верчения задом" не смог ответить.

Просто нет, такого никогда не может быть, без исключений.

Если нужен такой макрос, то он ДОЛЖЕН быть написан так

#define   TSC_PERIOD  (1000.0 /1024)

Тогда препроцессор посчитает с точностью double это отношение и тспользует его как надо программисту в любом месте.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

На вопрос ответил строго прямо, остальное - пояснение позиции "почему поступлю так, а не иначе" без наказания.

Ну вот и стоит считать это "исключением" :)

Можно и так. А можно и даже так (как оно сейчас есть):

#define TSC_TIME_CONST(p) ((p)*1000/1024) // только для вычисления констант времени из мсек в попугаи таймера!

В общем-то оно больше нигде и не требуется в том заголовочнике .. впрочем и заголовочник уже сильно иной, ибо от идиотизма с нумерованными пинами и идеи подмены типовых функций Wiring "правильным кодом" - отказался давным давно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Опять не 1000.0, а без точки. Получаем РАЗНЫЕ значения, при разных "p". Блин, ты что, сразу не понял, о чем тебе говорят?

Округление на этапе КОМПИЛЯЦИИ бывает нужно, но очень редко и не так оформленное.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Arhat109-2 пишет:

Так может писать только тот, кто ТОЧНО ЗНАЕТ чего он хочет и зачем такое пишет, но и только.

А нахрена ж ты тогда это исправил? Посчитал, что уже недостаточно точно знаешь?

Нет, ну феерический ...!

Граф, я думаю, Вы всё уже поняли про данного субъекта, давайте расходиться. Пытаться ему что-то объяснять - как свиню стричь - шерсти чуть, а визгу ... Давайте расходиться.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

wdrakula пишет:

Опять не 1000.0, а без точки. Получаем РАЗНЫЕ значения, при разных "p". Блин, ты что, сразу не понял, о чем тебе говорят?

Округление на этапе КОМПИЛЯЦИИ бывает нужно, но очень редко и не так оформленное.

Это как раз такой случай у меня. Крайне нужно, чтобы округление происходило ещё на этапе препроцессирования. В код должно вставать целое число, которое тупо лень считать на калькуляторе вручную. Это просто пересчет задаваемых констант времени исполнения. Удобно их задавать в миллисекундах, но мой таймер считает время по 1024 мсек., вот и надо пересчитывать реальные мсеки в тики таймера, количество которых - только целое (ну не бывает 3.5тика!). Только и всего.

Можно вернуть пересчет мсек в таймере как в Wiring, но это дает почти вдвое большее время исполнения обработчика времени у таймера. Не знаю. Как раз сейчас перерабатываю следующую версию этого arhat.h под свои платы МУРК-2560 и расширенную память .. можно вернуться к типовому обработчику, расширив его межзадачным хуком как было сделано.

Если интересно, приглашаю в эту тему: http://arduino.ru/forum/proekty/samodelnaya-mega2560-128a-s-pamyatyu-512kb

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Весело у вас тут :)

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

А то! Абхахочешься! Один маленький дятел, а столько насрать может :)))

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Зато как воронье слетается - просто прелесть. :)

maxs2dent
Offline
Зарегистрирован: 16.05.2019

Arhat109-2  Доброго времени суток! Вас рекомендуют на форуме как отличного специалиста из Новосибирска. Хотел бы с Вами встретиться обсудить провект (необходимы ваши навыки программировани Ардуино)
Мои контакты 89134666695 - Телефон и Вартсап (Макс)

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Що, очередной клон архата?

Пока я не уверен, что клон - отвечу: архат тут забанен. Если он тебе нужен, его емэйл на раз гуглится по нику. Ищи и обрящешь.