Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

akl писал(а):Это не глюк. Так и должно быть.
Ну вот, глюк оказался кривыми ручками :(.
Как говорил Шарапов: "Глаз замылился". Я же несколько раз перечитал в ДШ как сбрасывается данный флаг, а оказалось читал то что ожидал увидеть, а не то что было написано. :o

Спасибо.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

bondyara писал(а): У меня не просто Протеус, а Протеус под Wine в Linux :facepalm:
Кстати, под Wine баг - невозможно редактировать код, компилировать.
Собственно говоря именно из-за этого XP в VirtualBox у меня выиграла тендер )
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ну насчет флагов и их сброса... Не так все однозначно...
Воть, к примеру возьмем attiny2313 и флаги таймеров...
Конкретно регистр TIFR...И попытаемся сбросить один из двух установившихся флагов
в разных таймерах (не автоматом по исполнении прерывания, а вручную)...
Учтемс, что SBI port,bit тут не проходит (0х38/0х58)...
:roll:
Или еще интереснее...
регистр USISR (та же 2313)...
Содержит как флаги, так и USICNT3..0: Counter Value...
попытаемся вручную сбить любой из флагов, не нарушив содержимое USICNT3..0
:roll:
Последний раз редактировалось BOB51 Пн ноя 07, 2016 12:49:22, всего редактировалось 1 раз.
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб май 07, 2011 17:00:42
Откуда: Оттуда

Сообщение bondyara »

ptr128 писал(а): Собственно говоря именно из-за этого XP в VirtualBox у меня выиграла тендер )
ВМ память жрет. В принципе, как уже писал, отладка работает, достаточно указать в свойствах МК путь к .obj, после компиляции Протеус сам похватит обновленный файл, а код можно писать, компилировать в любом другом редакторе на свой вкус. Да и быстрее, чем прыгать между системами.
Реклама
Эиком - электронные компоненты и радиодетали
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

BOB51 писал(а):Ну насчет флагов и их сброса... Не так все однозначно...Воть, к примеру возьмем attiny2313 и флаги таймеров...Конкретно регистр TIFR...И попытаемся сбросить один из двух установившихся флагов в разных таймерах (не автоматом по исполнении прерывания, а вручную)...
Имелся в виду регистр, в котором запоминается причина сброса контроллера. У tiny2313 это регистр MCUSR у mega8 MCUCSR.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

А я воть на те "сбрасываемые записью единицы" да еще в "удаленной области ОЗУ"...
ТЬХУ на оные!!!...
Флаг то скинуть - вроде не проблема, дык... вместе с тем в остальные позиции нулики вписываются...
Мозг выносит...
:cry:
НО РАБОТАЕТ...
Реклама
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

Сообщение dimmer »

Ну мозг выносить нам хватает желающих, но мы, мужчины с большими сердцами любим всех, и ассемблер, и женщин. Мне иногда немного жаль всяких руферов и т.п. , они не знают бедные где экстрим.
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

BOB51 писал(а):Ну насчет флагов и их сброса... Или еще интереснее... регистр USISR (та же 2313)...
Содержит как флаги, так и USICNT3..0: Counter Value...
попытаемся вручную сбить любой из флагов, не нарушив содержимое USICNT3..0

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

TEST:
	CLR	R0
	STS	MCUSR+$20,R0

	IN	R0,USISR
	OUT	USISR,R0	; эту операцию можно проводить не всегда. Смотреть DS.
	RJMP	TEST
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

И снесет усе, которые в 1...
А выборочно - поштучно - будет ли обнуление в USICNT3..0
ежли возвернуть байт с единицей только в выбранной позиции?
:roll:
похоже, что вполне реально... ибо в случае таких флаг-регистров со смешанным содержимым при засылке взад байта с единичкой в позиции необходимого к сбросу флага и нулями в остальных похоже срабатывает своя аппаратная начинка...
:dont_know:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

BOB51 писал(а):А выборочно - поштучно

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

   IN   R16,USISR
   andi R16,0x0F+(1<<flag)
   OUT   USISR,R16  
Добавлено after 3 minutes 19 seconds:
В STM32 есть регистры в котором биты одновременно:
-только чтение
-обычная запись
-только сброс записью нулем
- инвертирование при записи 1

Вот это настоящий изврат :).
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

BOB51 писал(а):А выборочно - поштучно - будет ли обнуление в USICNT3..0
Если так

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

	SBI	USISR,USISIF
то не будет.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

akl писал(а):Если так
Код:
   SBI   USISR,USISIF
то не будет.
Стоит проверить эту команду. Не исключено, что эта команда также работает с маской, только аппаратно.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

я, конечно, от ассемблера отошел давно, но что-то мне подсказывает, что команда SBI требует непосредственного указания константы во втором операнде, а значит адрес USISIF будет воспринят, как константа, и результат SBI USISR, USISIF будет не совсем тот, который ожидается...

или речь не об AVR?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Нет нет. Запись верная. Второй операнд - это номер бита.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

мне показалось, что USISIF - это регистр... виноват :oops:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Z_h_e писал(а):Стоит проверить эту команду. Не исключено, что эта команда также работает с маской, только аппаратно.
Сделал в симуляторе атмел студио следующее (мега324):
-установил все флаги регистра TIFR0
-сбросил флаг SBI TIFR0,0

Флаг сбросился, остальные остались установленными. И все равно у меня есть сомнение, что в регистр пишется только один бит, а не все слово разом данной командой. Не зря же одна двухтактная.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

IMHO, в регистр наверняка пишется все слово, а не один бит. Другое дело, что так как чтение и запись слова выполняются одной командой, то между ними прерывания произойти не может. Следовательно, операция, с точки зрения программиста, является атомарной, что, собственно говоря, и требуется.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Вы не поняли мой мысля. Если данная команда пишет все слово (т.е. выполняет сишное |=), то весьма вероятно произойдет сброс всех флагов. Может конечно декодер команд, до такой степени продвинутый, что умеет писать правильное слово-маску для каждого регистра
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Аватара пользователя
Сообщения: 107
Зарегистрирован: Ср авг 05, 2015 19:34:20

Сообщение siimao »

ILYAUL писал(а):Вообще-то это решается двумя короткими командами и akl их написал в своём коде
Уважаемый akl, про какие две команды Вы упоминали? Здесь применен совершенно другой принцип, если я правильно понимаю.
Вложения
pop temp.doc
(46 КБ) 236 скачиваний
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Хоть ссылку бы дали про что Вы. "Хотелось бы, так сказать, в общих чертах понять, что ему нужно". Ну а если это не касается других форумчан, то пишите в личку воспрашаемому.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «AVR»