Можно загрузить в регистр целый байт, можно установить один бит. Думаю sbi и в скече пройдет на ура. Все команды ассемблера avr которые могут дотянуть единчку до бита Вам в помощь. Остается знать какие команды си в какие команды ассемблера компилируются. Вот это повод для изучения. Но и в интернете можно найти кое что.
Ворота, конкретно это код и не компилиться и даже если сделать чтоб компилился выводит четыре нуля тк содержит ошибки.... [зато хайпа сколько]
НО идея понятно , и я её реализовал, спасибо!.
НО только голословничать не надо! в теме асм код упомянулся только раз и совершенно в другом аспекте. поэтому прежде чем рвать на себе рубашку и стучать кулаком какие мы крутые, да еще и во множественном числе (это уже посыл крикунам и критикам которые кроме криков и критики ничего не в несли в эту тему), надо бы хотябы читать тему вначале. пусть даже черезмерно въедливо как Евгений, зато он пустого не говорит. да грубит и глумиться, но его слова по делу много стоят. ну такой он человек что поделаешь
При записи в флаговый регистр единицы происходит инверсия содержимого. 0 + 1 = 1 и соответссно 1 + 1 =0
поэкспереминтировал да так получается. на ноль не реагирует. а еденица инвертирует. НО. есть два но
1) еденицу вручную мы можем записать только через асемблер вставку.
2) если вспомнить мой вопрос почему мы говорили об этой записи (там фигурировал or'ing |=) так вот ввиду того что без ассемблера, мы можем только очистить флаг, когда там уже есть единица. то очистить мы его можем любым способом. и все они прекрасно его очистят EIFR=EIFR, EIFR=1, EIFR|=1, т.е. оринг вполне себе валидная инструкция тоже.
а по повду Дима предложенной вами очистки EIFR = EIFR есть такое мнение с другой стороны океана :)
That code has a race condition. Loading the value into a general purpose register (the stuff to the right of the equals) takes at least one machine instruction. Writing the value (the part on the left side) takes at least one machine instruction. In between it is possible for a flag to be set.
EIFR = EIFR;
Becomes...
Rnn = EIFR;
EIFR = Rnn;
So, it is possible for this to happen...
Rnn = EIFR;
/* a new flag is set */
EIFR = Rnn;
That new flag is not cleared. This solves that specific problem...
EIFR = 0xFF;
Друг мой! Дискуссия уместна в философии, религии, искусстве. Можно устроить диспут о влиянии 9-й симфонии Антона Брукнера на творчество Пинк Флойд. То есть там, где равноправны альтернативные мнения.
Но категорически невозможны дискуссии по предметам, основанным на фактах. Невозможны диспуты о таблице умножения, или правилах Кирхгофа. Смешна дискуссия о месте гелия в периодической таблице. Или альтернативный взгляд на закон всемирного тяготения.
1) еденицу вручную мы можем записать только через асемблер вставку.
Кто Вам сказал такую глупость? Вот кто? Вы несете бред, выделяете его болдом и всё это с таким апломбом, прости Господи. То, что Ворота использовал вставку, вовсе не значит, что это не пишется на С. Просто ему было так удобнее, да и требований по отсутствию вставок я не видел. Это запросто делается на С/С++ и он Вам уже написал как.
Кстати, у меня его код нормально компилируется и работает. IDE 1.8.9
alexbmd пишет:
Евгений я не учю я дискутирую
С кем??? С dimax? А у Вас дискутилка точно выросла?
Разница в уровне такова, что Вам, если Вам кажется, что он сказал что-то не то, нужно вежливо спрашивать, "поясните тупому, что Вы имели в виду", а не дискутировать. Дискуссия между Вам и dimax просто смешна, поверьте.
насчёт компилируется, вы правы, в последней компилируется но работать конечно же не работает ведь нет ничего волшебного в 9. четыре нуля как выводило так и выводит.
кстати старый компилятор(иде) в этом плане лучше , хоть недавал такое издевательство как записать просто 9.
dimiax, я уже и забыл про комент Грина. но вон и nik182 стучал себя вгрудь что пишется но не показал. и ворота тоже :)
но да бог с ними как написал выше я, у меня получилось записать. можно виртуально симулировать срабатывание прерывания.
Евгений, можно пример на С показать как пишется в EIFR единица? а то не вижу кто и что показал
dimax, а насчёт race condition что скажите есть зерно правды в этом ? если нет то почему?
У меня работает (выводит единицы, где надо). У dimax и ЕвгенийП - тоже работает. Похоже, что и у nik182 работает. Не работает у тебя одного. Ты в консерватории чё-нить поправить не пробовал?
alexbmd пишет:
ничего волшебного в 9. .
А что там в 9? Твоя беда в том, что ты ничему не учишься, а только "дискутируешь". По адресу 9 есть самое то, что нужно, чтобы всё нормально работало и оно работает. Не нравится вставка, я тебе уже сказал, как сделать без неё.
Сдаётся мне, ты её вообще не запускал - ты не по части запустить, а больше "подискутировать".
Евгений, можно пример на С показать как пишется в EIFR единица? а то не вижу кто и что показал
Вы ещё и постов не читаете? Смотрите #209, там написано.
Кстати, Вас уже спрашивали, чем Вы компилируете и на чём запускаете пример Ворот? Не работать на 328P он не может, а если у Вас не работает, значит Вы его либо компилируете чем-то экзотическим, либо запускаете на чём-то экзотическом. Или он прав, и Вы его вообще не запускали, а про "не работает" слегка "прибрехнули в порядке дискуссии"?
Кмк, предложенный способ - это программно дернуть INT0, то есть отобрать пин из использования заради решения вопроса о внутреннем прерывании? То есть, из имеющихся ДВУХ внешних прерываний в УНО, НАНО занимаем 50% .. иного способа точно нет?
Кмк, предложенный способ - это программно дернуть INT0, то есть отобрать пин из использования заради решения вопроса о внутреннем прерывании? То есть, из имеющихся ДВУХ внешних прерываний в УНО, НАНО занимаем 50% .. иного способа точно нет?
1. Это цитата из ДШ:
The External Interrupts are triggered by the INT pins or any of the PCINT pins. Observe that, if enabled,
the interrupts will trigger even if the INT or PCINT pins are configured as outputs. This feature provides a
way of generating a software interrupt.
2. В Уно и Нано не два внешних прерывания, а на ВСЕХ ногах, в отличии от Меги.
Кто ж виноват что у тебя мозги криво повернуты? Я аж два раза тебе написал, что можно только обнулить, записав единицу. Если писать ноль то ничего не произойдёт. Можешь как операцию NOP процессора использовать. Единицу для обнуления(!!!) можно записывать разными способами, я даже тебе мануал об этом за бесплатно перевёл.
Ни мануал ни код записи в eifr (а не сброс) мне никто не приводил, первый ворота попытался, но тоже солдатский юмор. Но идею я понял и как писал выше получилась запись ... правда там другая фигня произошла потом. Короче это вопрос уже не важен.
B707, цель - знания. Хотел для себя понять почему оринг не правильно для флагового регистра. Уже разобрался. (Лично для себя сделал вывод можно и через оринг. Но просто в этом никакого смысла а прямой сброс еще и быстрее. )
Просто тему надо читать не с последнего сообщения
Кмк, предложенный способ - это программно дернуть INT0, то есть отобрать пин из использования заради решения вопроса о внутреннем прерывании? То есть, из имеющихся ДВУХ внешних прерываний в УНО, НАНО занимаем 50% .. иного способа точно нет?
1. Это цитата из ДШ:
The External Interrupts are triggered by the INT pins or any of the PCINT pins. Observe that, if enabled,
the interrupts will trigger even if the INT or PCINT pins are configured as outputs. This feature provides a
way of generating a software interrupt.
2. В Уно и Нано не два внешних прерывания, а на ВСЕХ ногах, в отличии от Меги.
пасибки. Про PCINT в курсях, но за них речь не шла тут выше. Мне так вообще непонятно зачем ТС поднял старую тему, зачем ему понадобились программные прерывания (внутренние) - явно последний ТС захотел странного, и зачем понадобилось решать вопрос именно таким способом.
В общем дочитал тему понял что мне оно не надо. :)
А то, что оно у ТС не заработало - так это просто: у него же Леонарда, а там другие пины или нет? :)
Код, который привёл Ворота записывает 1 в EIFR. Она там появляется и спокойно читается.
Да, это делается косвенно. Как говорил Козьма Петрович: "Щёлкни кобылу в нос, она вильнёт ховстом". Но единица же туда записывается! Так какого рожна Вам ещё надо?
Вообще, мне почему-то кажется, что Вам уже ВСЁ объяснили, ВСЁ показали. К чему Вы продолжаете этот бессмысленный балаган. Чего добиваетесь-то?
Ни мануал ни код записи в eifr (а не сброс) мне никто не приводил, первый ворота попытался, но тоже солдатский юмор. Но идею я понял и как писал выше получилась запись ... правда там другая фигня произошла потом. Короче это вопрос уже не важен. B707, цель - знания. Хотел для себя понять почему оринг не правильно для флагового регистра. Уже разобрался. (Лично для себя сделал вывод можно и через оринг. Но просто в этом никакого смысла а прямой сброс еще и быстрее. ) Просто тему надо читать не с последнего сообщения
alexbmd, насколько читал мануал на Мега2560, там все сделано так, что можно программно включить пин И прочитать его значение, а также можно включить альтернативную функцию пина И снова прочитать результат, а также (цитата выше мне) можно получить и прерывание по пину. Как рассказывал Архат, это сделано в т.ч. и для целей программного тестирования микроконтроллера и у него есть такой тест для Мега2560 в т.ч. и для проверки всего флеша на чтение/запись.
То что сделал Ворота - он просто программно взвел флаг для ноги INT0 через ассемблерный digitalWrite(), если не напутал чего. У вас на Леонардо, скорее всего этот INT0 сидит на иной ноге, поэтому и не работает.
Да я знаю что сделал ворота. Только он не удосужился почитать тему как другие. Знал бы тогда что оно у меня впринципе не заработает. Но за идею его спасибо я уже сказал. Помогла записать не косвенно а прямо.
Все Евгений я умолкаю. По данной теме мне большое нечего спросить :)
. Единицу можно записать разными способами.
Можно загрузить в регистр целый байт, можно установить один бит. Думаю sbi и в скече пройдет на ура. Все команды ассемблера avr которые могут дотянуть единчку до бита Вам в помощь. Остается знать какие команды си в какие команды ассемблера компилируются. Вот это повод для изучения. Но и в интернете можно найти кое что.
Держи. Тут есть и запись нуля, и запись единицы.
Запускай, проверяй, всё работает.
Ворота, конкретно это код и не компилиться и даже если сделать чтоб компилился выводит четыре нуля тк содержит ошибки.... [зато хайпа сколько]
НО идея понятно , и я её реализовал, спасибо!.
НО только голословничать не надо! в теме асм код упомянулся только раз и совершенно в другом аспекте. поэтому прежде чем рвать на себе рубашку и стучать кулаком какие мы крутые, да еще и во множественном числе (это уже посыл крикунам и критикам которые кроме криков и критики ничего не в несли в эту тему), надо бы хотябы читать тему вначале. пусть даже черезмерно въедливо как Евгений, зато он пустого не говорит. да грубит и глумиться, но его слова по делу много стоят. ну такой он человек что поделаешь
При записи в флаговый регистр единицы происходит инверсия содержимого. 0 + 1 = 1 и соответссно 1 + 1 =0
поэкспереминтировал да так получается. на ноль не реагирует. а еденица инвертирует. НО. есть два но
1) еденицу вручную мы можем записать только через асемблер вставку.
2) если вспомнить мой вопрос почему мы говорили об этой записи (там фигурировал or'ing |=) так вот ввиду того что без ассемблера, мы можем только очистить флаг, когда там уже есть единица. то очистить мы его можем любым способом. и все они прекрасно его очистят EIFR=EIFR, EIFR=1, EIFR|=1, т.е. оринг вполне себе валидная инструкция тоже.
а по повду Дима предложенной вами очистки EIFR = EIFR есть такое мнение с другой стороны океана :)
Евгений я не учю я дискутирую
Ужас какой то. Уже месяц жуём.(
Вы хоть поняли, о чём идет речь на английском? К чему нужно прикладывать это знание ?
Евгений, я не учю я дискутирую
Друг мой! Дискуссия уместна в философии, религии, искусстве. Можно устроить диспут о влиянии 9-й симфонии Антона Брукнера на творчество Пинк Флойд. То есть там, где равноправны альтернативные мнения.
Но категорически невозможны дискуссии по предметам, основанным на фактах. Невозможны диспуты о таблице умножения, или правилах Кирхгофа. Смешна дискуссия о месте гелия в периодической таблице. Или альтернативный взгляд на закон всемирного тяготения.
Ворота, конкретно это код и не компилиться и даже если сделать чтоб компилился выводит четыре нуля тк содержит ошибки.... [зато хайпа сколько]
У всех компилируется и работает, кроме тебя. Похоже, либо на брехню, либо на то, что у тебя уж очень экзотический компилятор.
Озвучь, пожалуйста, в чём же ты её, родной, компилируешь? Версию IDE можешь назвать?
НО только голословничать не надо! в теме асм код упомянулся только раз и совершенно в другом аспекте.
Не учи меня, что мне надо, а что не надо. Тебе не нравится ассемблерная вставка? Вот так вежливо и скажи.
Замени её на строку
digitalWrite(2, !digitalRead(2));
и всего делов. Работает точно также.
Кто Вам сказал такую глупость? Вот кто? Вы несете бред, выделяете его болдом и всё это с таким апломбом, прости Господи. То, что Ворота использовал вставку, вовсе не значит, что это не пишется на С. Просто ему было так удобнее, да и требований по отсутствию вставок я не видел. Это запросто делается на С/С++ и он Вам уже написал как.
Кстати, у меня его код нормально компилируется и работает. IDE 1.8.9
С кем??? С dimax? А у Вас дискутилка точно выросла?
Разница в уровне такова, что Вам, если Вам кажется, что он сказал что-то не то, нужно вежливо спрашивать, "поясните тупому, что Вы имели в виду", а не дискутировать. Дискуссия между Вам и dimax просто смешна, поверьте.
1) еденицу вручную мы можем записать только через асемблер вставку.
Нельзя, Green ещё в #81 написал про это, сколько можно мусолить?
А в #203 Ворота написал программу-шутку, я чуть сам не купился. Флаг в итоге ставится, но не записью в EIFR :-)
Ну, вот, убил интригу!
Надеюсь, у тебя она, как у всех нормальных людей скомпилировалась и заработала :)
Ворота, заработала. Пока не посмотрел что сидит по адресу 0x9 верил в чудеса святага ассемблера ;-)
Ну, дык, чо надо, то и сидит :))) Результат ведь "на табло" как говорится :)
И что характерно в точности в соответствии с мануалом.
Ворота, заработала. Пока не посмотрел что сидит по адресу 0x9 верил в чудеса святага ассемблера ;-)
Димах! Да ладно?! ;)) То ж "грубый солдатский юмор"! ;))) (Ворота! Без обид!)
Ворота, (что за манера общения фи)
насчёт компилируется, вы правы, в последней компилируется но работать конечно же не работает ведь нет ничего волшебного в 9. четыре нуля как выводило так и выводит.
кстати старый компилятор(иде) в этом плане лучше , хоть недавал такое издевательство как записать просто 9.
dimiax, я уже и забыл про комент Грина. но вон и nik182 стучал себя вгрудь что пишется но не показал. и ворота тоже :)
но да бог с ними как написал выше я, у меня получилось записать. можно виртуально симулировать срабатывание прерывания.
Евгений, можно пример на С показать как пишется в EIFR единица? а то не вижу кто и что показал
dimax, а насчёт race condition что скажите есть зерно правды в этом ? если нет то почему?
Вот ненадо мне приписывать твои измышления. В ручную установить прямо бит в регистре невозможно. Только косвенно, как это изящно сдалал Ворота. Можно только обнулить путем записи единицы в бит. Например средствами Ардуино https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/bitset/
Заметь, что битсет в данном случае срботает с точностью до наоборот - очистит бит.
dimax, а насчёт race condition что скажите есть зерно правды в этом ? если нет то почему?
Да, всё правильно написано.
У меня работает (выводит единицы, где надо). У dimax и ЕвгенийП - тоже работает. Похоже, что и у nik182 работает. Не работает у тебя одного. Ты в консерватории чё-нить поправить не пробовал?
Сдаётся мне, ты её вообще не запускал - ты не по части запустить, а больше "подискутировать".
Евгений, можно пример на С показать как пишется в EIFR единица? а то не вижу кто и что показал
Вы ещё и постов не читаете? Смотрите #209, там написано.
Кстати, Вас уже спрашивали, чем Вы компилируете и на чём запускаете пример Ворот? Не работать на 328P он не может, а если у Вас не работает, значит Вы его либо компилируете чем-то экзотическим, либо запускаете на чём-то экзотическом. Или он прав, и Вы его вообще не запускали, а про "не работает" слегка "прибрехнули в порядке дискуссии"?
человек три года одни и те же вопросы задает... по-моему, это просто троль
да, тролль бы что-то новенькое придумал, а он одну и ту же воду в ступе толчёт.
да, тролль бы что-то новенькое придумал, а он одну и ту же воду в ступе толчёт.
Методичка?
Кмк, предложенный способ - это программно дернуть INT0, то есть отобрать пин из использования заради решения вопроса о внутреннем прерывании? То есть, из имеющихся ДВУХ внешних прерываний в УНО, НАНО занимаем 50% .. иного способа точно нет?
ЧСВрепу, придумай способ и расскажи нам, ладно.Я-то один способ уже привёл, а тут приходишь ты и требуешь продолжения банкета - не жирно? Давай-ка сам потрудись, а мы
посмеёмсяу тебя поучимся.Кмк, предложенный способ - это программно дернуть INT0, то есть отобрать пин из использования заради решения вопроса о внутреннем прерывании? То есть, из имеющихся ДВУХ внешних прерываний в УНО, НАНО занимаем 50% .. иного способа точно нет?
1. Это цитата из ДШ:
The External Interrupts are triggered by the INT pins or any of the PCINT pins. Observe that, if enabled,
the interrupts will trigger even if the INT or PCINT pins are configured as outputs. This feature provides a
way of generating a software interrupt.
2. В Уно и Нано не два внешних прерывания, а на ВСЕХ ногах, в отличии от Меги.
wdrakula, не пытайтесь учить Великого, бесполезно.
о нашёл интересное и про рэйс кондишн и про ORинг
https://www.microchip.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_intbits...
nik182 но ты же кричал что возможно и рубаху рвал
Ворота А что там в 9? то что ты хочешь у меня в PD0, но яж тебе другой вопрос задавал
ЕвгенийП а зачем мне пост 209 когда я вас просил код записи в EIFR а не PD2
alexbmd - что-то я уже нить потерял. Цель-то какая у вас? Чего добиться хотите?
Кто ж виноват что у тебя мозги криво повернуты? Я аж два раза тебе написал, что можно только обнулить, записав единицу. Если писать ноль то ничего не произойдёт. Можешь как операцию NOP процессора использовать. Единицу для обнуления(!!!) можно записывать разными способами, я даже тебе мануал об этом за бесплатно перевёл.
.... А что там в 9? то что ты хочешь у меня в PD0...
На третий день наблюдательный индеец Джо заметил что у камеры нет четвёртой стены...
Ни мануал ни код записи в eifr (а не сброс) мне никто не приводил, первый ворота попытался, но тоже солдатский юмор. Но идею я понял и как писал выше получилась запись ... правда там другая фигня произошла потом. Короче это вопрос уже не важен.
B707, цель - знания. Хотел для себя понять почему оринг не правильно для флагового регистра. Уже разобрался. (Лично для себя сделал вывод можно и через оринг. Но просто в этом никакого смысла а прямой сброс еще и быстрее. )
Просто тему надо читать не с последнего сообщения
Ворота А что там в 9? то что ты хочешь у меня в PD0, но яж тебе другой вопрос задавал
Я хочу, чтобы ты извинился за брехню о том, что мой код якобы не работает.
Кмк, предложенный способ - это программно дернуть INT0, то есть отобрать пин из использования заради решения вопроса о внутреннем прерывании? То есть, из имеющихся ДВУХ внешних прерываний в УНО, НАНО занимаем 50% .. иного способа точно нет?
1. Это цитата из ДШ:
The External Interrupts are triggered by the INT pins or any of the PCINT pins. Observe that, if enabled,
the interrupts will trigger even if the INT or PCINT pins are configured as outputs. This feature provides a
way of generating a software interrupt.
2. В Уно и Нано не два внешних прерывания, а на ВСЕХ ногах, в отличии от Меги.
пасибки. Про PCINT в курсях, но за них речь не шла тут выше. Мне так вообще непонятно зачем ТС поднял старую тему, зачем ему понадобились программные прерывания (внутренние) - явно последний ТС захотел странного, и зачем понадобилось решать вопрос именно таким способом.
В общем дочитал тему понял что мне оно не надо. :)
А то, что оно у ТС не заработало - так это просто: у него же Леонарда, а там другие пины или нет? :)
У меня он не работает. Рад что у тебя работает.
ЕвгенийП ... я вас просил код записи в EIFR
Код, который привёл Ворота записывает 1 в EIFR. Она там появляется и спокойно читается.
Да, это делается косвенно. Как говорил Козьма Петрович: "Щёлкни кобылу в нос, она вильнёт ховстом". Но единица же туда записывается! Так какого рожна Вам ещё надо?
Вообще, мне почему-то кажется, что Вам уже ВСЁ объяснили, ВСЁ показали. К чему Вы продолжаете этот бессмысленный балаган. Чего добиваетесь-то?
alexbmd, насколько читал мануал на Мега2560, там все сделано так, что можно программно включить пин И прочитать его значение, а также можно включить альтернативную функцию пина И снова прочитать результат, а также (цитата выше мне) можно получить и прерывание по пину. Как рассказывал Архат, это сделано в т.ч. и для целей программного тестирования микроконтроллера и у него есть такой тест для Мега2560 в т.ч. и для проверки всего флеша на чтение/запись.
То что сделал Ворота - он просто программно взвел флаг для ноги INT0 через ассемблерный digitalWrite(), если не напутал чего. У вас на Леонардо, скорее всего этот INT0 сидит на иной ноге, поэтому и не работает.
Да я знаю что сделал ворота. Только он не удосужился почитать тему как другие. Знал бы тогда что оно у меня впринципе не заработает. Но за идею его спасибо я уже сказал. Помогла записать не косвенно а прямо.
Все Евгений я умолкаю. По данной теме мне большое нечего спросить :)