Например TDA7294

Форум РадиоКот • Просмотр темы - ASM для AVR
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср авг 13, 2025 22:33:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: ASM для AVR
СообщениеДобавлено: Пн окт 13, 2014 18:31:54 
Открыл глаза

Зарегистрирован: Пн янв 10, 2011 00:12:19
Сообщений: 75
Рейтинг сообщения: 0
здравствуйте!
В программе есть вот такая строчка.

.equ time = 0xFF


Как изменить time ну допустим где ни будь в середине программы на ASM?

типа ldi time, 0x60 только правильно)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Пн окт 13, 2014 18:40:07 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Чт фев 28, 2013 14:16:10
Сообщений: 222
Рейтинг сообщения: 0
ldi r16, 0x60
sts time, r16

или косвенно через st x, st y, st z


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Пн окт 13, 2014 18:49:11 
Открыл глаза

Зарегистрирован: Пн янв 10, 2011 00:12:19
Сообщений: 75
Рейтинг сообщения: 0
спасибо


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Пн окт 13, 2014 21:01:45 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 2
Ужос!!! :facepalm:
arm-17, не слушай ks0, он тебя плохому сейчас научит :)
http://www.atmel.com/Images/doc1022.pdf
download/file.php?id=108593
http://dfe.petrsu.ru/koi/posob/avrlab/avrasm-rus.htm

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Пн окт 13, 2014 21:58:02 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
.def может быть переопределена, а .equ - нет. Это что-то вроде дачи имен некоторому числовому значению (константе, регистру, метке..). Чисто для удобства написания кода и его ясности в дальнейшем.

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Пн окт 13, 2014 22:21:59 
Родился
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб окт 04, 2014 10:16:04
Сообщений: 19
Рейтинг сообщения: 0
Сейчас еще плохому поучим:
Для начала, константу time выкинем и заменим на переменную с нужным начальным значением
Код:
.CSEG
.SET time = 0x00

В озу зарезервируем для нее место, будет храниться там
Код:
.DSEG
.ORG SRAM_START
time: .byte 1

Делаем изменение значения переменной на новое, в нужном месте кода
Код:
.CSEG
lds r16, time
subi r16,(-1)  ; это нам типа нужно увеличить переменную time на единицу от ее начального значения :))
; хотели бы уменьшить на единицу, написали бы subi r16,1
sts time, r16  ; теперь сохраняем новое значение переменной time, которое и можем использовать
; и изменять столько раз, сколько хочется, вот этим самым куском кода


Profit!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 07:08:41 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 2
Ага, давайте учите! После такой записи компилятор Вас сразу покроет матом! Вы использовали одно и то же имя для метки(имени переменной) и для задания эквивалента числовому значению. И для того, чтобы воспользоваться директивой .set, располагать ее в сегменте кода не обязательно.

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 08:30:45 
Мучитель микросхем

Карма: 8
Рейтинг сообщений: 101
Зарегистрирован: Чт ноя 13, 2008 16:33:42
Сообщений: 410
Рейтинг сообщения: 0
А для чего может понадобиться изменение значения литерала? Это ведь противоречит самой его сути.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 10:48:06 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Ну, например, может быть задано значение по умолчанию, а при условной компиляции может быть переопределение при каких-либо условиях.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 18:56:34 
Родился
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб окт 04, 2014 10:16:04
Сообщений: 19
Рейтинг сообщения: 0
Пошутить нельзя... :)))
Код:
.DSEG
.ORG SRAM_START
.SET time = 0x00
.CSEG
lds r16, time
subi r16,(-1)
sts time, r16


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 20:34:35 
Мучитель микросхем

Карма: 8
Рейтинг сообщений: 101
Зарегистрирован: Чт ноя 13, 2008 16:33:42
Сообщений: 410
Рейтинг сообщения: 0
Kavka, Вы серьезно?
Код:
   .equ   time=1
   .equ   time=2
a.asm(2) : error : Symbol is already defined by the .EQU directive :))
Догадайтесь почему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 20:35:31 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
Катэ911, опять шутите? Ай, Вы какой веселый! :tea:

vdavid, .equ нельзя переназначить - это своего рода константа, а вот .set - всегда пожалуйста! К тому же при условной компиляции можно проинициализировать одну и ту же константу .equ разными значениями в разных ветках условного исполнения. ;)
Код:
#ifdef true
.equ xx = 1
#else
.equ xx = 0
#endif

_________________
Fucking static initialization order fiasco


Последний раз редактировалось Pink-Pank Вт окт 14, 2014 21:11:31, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 20:53:24 
Родился
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб окт 04, 2014 10:16:04
Сообщений: 19
Рейтинг сообщения: 0
Шутка - не шутка, а компилятору код понравился.
Из чего вывод, если переменную с нужным значением хранить в озу, изменять ее можно. И самый простой способ - прибавление или вычитание непосредственного значения.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 20:55:38 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
А Вы уверены, что в своем коде Вы работаете с переменной из SRAM, а не с регистром r0? 8)

_________________
Fucking static initialization order fiasco


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 20:56:06 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
vdavid писал(а):
Kavka, Вы серьезно?
Да, если пользоваться другой директивой. А вы серьёзно не знали про директиву .set ?

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

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Вт окт 14, 2014 20:59:06 
Мучитель микросхем

Карма: 8
Рейтинг сообщений: 101
Зарегистрирован: Чт ноя 13, 2008 16:33:42
Сообщений: 410
Рейтинг сообщения: 0
Катэ911, А теперь, внимание, вопрос.
Что изменится, если выбросить это?
Код:
.DSEG
.ORG SRAM_START

Kavka, Простите, но вопрос был про именно .equ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Ср окт 15, 2014 00:52:01 
Родился
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб окт 04, 2014 10:16:04
Сообщений: 19
Рейтинг сообщения: 0
To vdavid
Ничего не меняется, если в программе .DSEG вообще не указывать. Пробовал даже так:
Код:
.set time = 0xf0
ldi r16, time
sts 0x100, r16
ldi r16, 0x00
lds r16, 0x100
subi r16,(-1)
sts 0x100, r16
ldi r16, 0x00
lds r16, 0x100


И оно работает правильно. Сначала в r16 записывается time, затем отправляется в ram, оттуда снова загружается в r16. После прибавления единицы, новое значение спокойно копируется в ram и оттуда извлекается снова в r16. В симуляторе avr студии это все наглядно показывается.
Х.З. зачем нужен этот dseg, если единственное его применение - указать размер в байтах у некой переменной, которой даже значение присвоить не получается.

Код:
.DSEG
.ORG 0x100
MyVar: .BYTE 2
.CSEG
.set MyVar = 0xABCD

Этот код вызывает страшные ругательства компилятора о недопустимом переназначении переменной MyVar:
Invalid redefinition of 'MyVar'
Т.е. смысл вот этого
Код:
MyVar: .BYTE 2

отсутствует начисто.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Ср окт 15, 2014 05:43:47 
Опытный кот

Карма: 4
Рейтинг сообщений: 79
Зарегистрирован: Вс фев 10, 2013 15:26:00
Сообщений: 758
Рейтинг сообщения: 0
Цитата:
этот dseg, если единственное его применение - указать размер в байтах у некой переменной, которой даже значение присвоить не получается
Единственное его применение - разметить (распределить) рам и обозначить эту разметку текстовыми метками (туфтатавтологично), которые будет удобно читать человеческими глазами в процессе написания и отладки.

Mode: .byte 1 ; выделили один байт под конкретное применение - режим работы
Buttons: .byte 1 ; выделили другой байт под тоже конкретное применение - восемь флагов, обозначающие восемь нажатых кнопок соответственно
Display_buffer: .byte 32 ; выделили 32 байта под буфер дисплея - туда пишем что угодно когда угодно, оттуда дисплей рефрешим по таймеру

А почему зачем употреблено .org в .dseg, это уже сам решай.
Волшебный набор волшебных символов 0x100 переводится как "число 256 в десятичном выражении".

Домашнее задание: понять, что такое "текстовая метка (text label)".



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

_________________
Кэшбек (возврат обратно покупателю части суммы, уплаченной за покупку): Aliexpress 1%, Ebay 1%, другие магазины по-разному, плюс $5 подарок за регистрацию.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Ср окт 15, 2014 07:04:47 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 54
Зарегистрирован: Ср июн 11, 2014 09:43:13
Сообщений: 721
Откуда: США
Рейтинг сообщения: 0
Катэ911, простите, а Вы вообще давно на ассемблере пишете? Вы осознаете, что делаете строками
Код:
.set time = 0xf0
lds r16, time
?
Осознаете, для чего вообще нужна директива .set?
Я это спрашиваю потому, что судя из Ваших постов, Вы даже не имеете представления, каким образом происходит инициализация переменной в SRAM начальным значением.

Цитата:
И оно работает правильно.
Если компилятор не выдал ошибок при сборке проекта - это еще не значит, что код работает именно так, как Вы его задумали. ;)

_________________
Fucking static initialization order fiasco


Последний раз редактировалось Pink-Pank Ср окт 15, 2014 14:48:56, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ASM для AVR
СообщениеДобавлено: Ср окт 15, 2014 13:48:27 
Родился
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб окт 04, 2014 10:16:04
Сообщений: 19
Рейтинг сообщения: 0
To Pink-Pank:
Я пишу на русском языке. А с ассемблером только начал знакомиться. И, если я вижу в атмел студии, что в регистр и в озу пишется что и куда нужно мне, то почему я должен считать что код исполняется неверно? Мне перестать верить среде разработки от этого самого производителя микроконтроллеров?
SET связывает символическое имя name и его значение для микроконтроллера. Читать так удобнее будет.
LDI r16, name запишет в регистр r16 значение, связанное с символическим именем name.

To nirq:
Спасибо, я вполне воспринимаю как десятичную, так и бинарную, и шестнадцатеричную систему счислений.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 341


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y