Перейти к содержанию

Alex

Moderators
  • Постов

    5 333
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Весь контент Alex

  1. Да. Сравнение идёт в несколько этапов, побайтово. По этому, как значение становится 768 (это 0x0300), и сравнивается старший байт, мы получаем истинное условие. Это в двух словах. Более детально - нужно смотреть дизасм и разбираться. volatile не обязывает компилятор делать атомарную операцию. Её может реализовать только программист, учитывая конкретную ситуацию и всякие там нюансы железа. volatile говорит компилятору только лишь одно - пожалуйста, не трогай эту переменную (не вырезай из программы её существование и обработку), т.к. я сам слежу за ней. Оптимизатор, просматривая часть кода, не находя связей с какой-то переменной, может её обработку вырезать к чертям собачим. И будет прав. По этому, при доступе к переменной из разных потоков, нужно оптимизатору связать руки, сказав, что ты сам - хозяин существования этой переменной. А как сказать это ? - правильно, добавить квалификтор volatile.
  2. Это было в адрес слов о глючности компилятора ) Как правильно сделать - Вам уже написали. Попытайтесь понять, отчего возникают проблемы. Почитайте про атомарный доступ к переменным.
  3. Главное - понять, почему он работает, а предыдущий - нет. Это важно !
  4. @Demonrostov , пишите такой код : di(); // Запретить прерывания uint16_t u16_temp = timer_16; ei(); // Разрешить прерывания if(u16_temp > 1000) { Удивляетесь, что он работает. Пытаетесь понять почему. Понимаете. Радуетесь. Жесть ) И Вы ещё что-то плохое хотите сказать о разработчиках компилятора ? Это - не рабочий варик, а костыль. Который, как уже сказали выше, так-же будет глючить, но реже.
  5. Такое ощущение, что да ) Вам выше уже намекнули про прерывания и атомарность. Копайте в этом направлении. Надеюсь, Вы в состоянии догадаться сравнить 2 числа (1010 и 768) в hex-представлении понять в чём проблема ? )
  6. Да. Это означает, что полностью отключена оптимизация. Но не означает, что компилятор делает эту операцию атомарной. RMW, по определению, не может быть атомарной Реализация атомрности - забота программиста, а не компилятора. Только программист адекватно может оценить ситуацию. В любой нормальной ОС, например, имеются инструменты (средства синхронизации) для атомарного доступа к объектам.
  7. Зачем мне пробовать элементарное действие ? Ни один компилятор не позволит себе заглючить в такой простой конструкции. Что, кстати, не скажешь о Протезе. Подозреваю, Вы понимаете о чём выше шла речь, но упорно продолжаете тут нас троллить, показывая на скринах какую-то ересть. Небольшая поправочка - программист должен это делать, а не компилятор
  8. Вам, как бы, намекнули, что по Вашему скрину невозможно понять, в какой момент выполнения программы Вы смотрите на это значение. Думается, что Вы и сами не знаете этот момент. ПыСы: Мало вероятно, что компилятор глючит на таком элементарном выражении. Скорее, глюк где-то в алгоритме, заложенном программистом.
  9. Прямая ссылка - https://ww1.microchip.com/downloads/en/DeviceDoc/MPLABX-v5.10-windows-installer.exe
  10. На сколько я помню, нужно использовать секцию UDATA. Погуглите "MPASM".
  11. По Протеусу есть отдельная тема , задавайте по нему вопросы там.
  12. А Вы почитайте правила, тогда ответите сами на свой вопрос. И что значит ботоводство по-вашему ?
  13. @Александр Мащенко , Вы серьёзно думаете, что человек сидел и ждал 7 лет ответа ?
  14. Вы серьёзно ? Чтобы сделать обычный опрос ПИНа (для кнопки - более не нужно), пытаетесь использовать какие-то библиотеки ?
  15. Ну, а с реле - на абдурину. А с абдурины на розетку. Ваше устройство - посредник между датчиком и розеткой. Сигнала нет, абурина глюкнула, питание не отключила. Дальше рассказывать последствия ?
  16. И когда-нибудь, не дай Бог, оно неправильно сработает и пренесёт беду в дом. Нужно очень хорошо понимать, что делаешь - это не новогодняя мигалка. Не подменяйте понятия. Вы вразрыв датчика устанавливаете своё устройство. А это уже совсем другое. Кстати, так и не увидел в теме ответ на вопрос "от чего идёт перегрев датчика" ? И о каком датчике вообще идёт речь.
  17. А схема подключения и взаимодействия с "внешним миром" вашего чудо-устройства ? Я, например, так и не понял, что оно будет отключать и откуда и каким образом будет браться сигнал на вход.
  18. @Саша Мельник , а где схема ? Какой может быть разговор о ПО, если даже нет схемы ?
  19. Ага, на пенсию уйдёт МК не может просто взять и остановиться, он всегда будет выполнять команды. Если только не загнать его в слип.
  20. Правильно. Вполне достаточно. При условии, что Вы поставите 3102.
  21. Потому, что порядок подключения катодов у Вас такой Если не хотите менять в схеме, то сделайте так : catodPins[3-i]
  22. Всё в Ваших руках. Подсказки Вам дали, экспериментируйте ...
×
×
  • Создать...