реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Предпроцессор асма AVR
adc
сообщение Aug 14 2009, 13:45
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Подскажите пожалуйста, можно ли сделать вставку в массив данных в ввиде сообщения?:
Код
Код
.equ     param =55
...
.db "параметр=?"

т.е. что-бы при компиляции, на место вопроса ставилось 55. (в текстовом виде)
Пример упростил для простоты понимания.

Наверное прийдется контроллером пережевывать. laughing.gif
Go to the top of the page
 
+Quote Post
ae_
сообщение Aug 15 2009, 09:17
Сообщение #2


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



i
Код
#define param "55"
...
.db "Параметр=", param
Go to the top of the page
 
+Quote Post
adc
сообщение Aug 16 2009, 10:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Немного уточню. В приведенном примере стоит цифра "55", на самом деле вместо нее стоит выражение которое считается при компиляции. Примерно так:
Код
.equ param= (255/step_grad)
...
.db "параметр=?"
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Aug 16 2009, 11:21
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Код
db "параметр=?", (param / 10)+'0',(param % 10)+'0'

только в AVRASM2 есть у препроцессора остаток от деления
Для AVRASM будет примерно так
Код
db "параметр=?", (param / 10)+'0',(param - (param / 10)*10)+'0'
Go to the top of the page
 
+Quote Post
adc
сообщение Aug 17 2009, 11:17
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(Qwertty @ Aug 16 2009, 15:21) *
Код
db "параметр=?", (param / 10)+'0',(param % 10)+'0'

только в AVRASM2 есть у препроцессора остаток от деления
Для AVRASM будет примерно так
Код
db "параметр=?", (param / 10)+'0',(param - (param / 10)*10)+'0'
В этом случае к значению нуля '0' (0x30) прибавляется пересчитанное значение, которое дает смещение в таблице символов. Это работает, по понятным причинам, до значения '9'. Соответственно значение "55" преобразовать не получится. Видимо это нельзя сделать в принципе. crying.gif
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Aug 17 2009, 14:10
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(adc @ Aug 17 2009, 15:17) *
В этом случае к значению нуля '0' (0x30) прибавляется пересчитанное значение, которое дает смещение в таблице символов. Это работает, по понятным причинам, до значения '9'. Соответственно значение "55" преобразовать не получится. Видимо это нельзя сделать в принципе. crying.gif

Это относительно стандартное преобразование в строку, только выполняемое еще препроцессором. И работает не до 9, а до 99, так что 55 прекрасно разложится в
Код
db "параметр=?", '5','5'

Разве не это требовалось?
Go to the top of the page
 
+Quote Post
adc
сообщение Aug 18 2009, 13:14
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(Qwertty @ Aug 17 2009, 18:10) *
Разве не это требовалось?
Да, спасибо! Сразу не понял написанного..)
Примерно это и требовалось.. А в шестнадцатеричном формате можно сделать?
эээ поясню, что-бы не считали что я сам не знаю чего хочу:-)
зы: Все эти пляски начались с того, что при формировании строчки в формате pdu, захотелось сделать автоматический пересчет количества символов в сообщении. А сообщение, включая значение количества символов, подразумевает шестнадцатеричный формат.
Go to the top of the page
 
+Quote Post
ae_
сообщение Aug 18 2009, 14:19
Сообщение #8


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Код
.set param=1
.db "data =", param/16+'0'+7*(param/16>9), param%16+'0'+7*(param%16>9)
.set param=param+1
.db "data =", param/16+'0'+7*(param/16>9), param%16+'0'+7*(param%16>9)
.set param=param+1
...
Go to the top of the page
 
+Quote Post
adc
сообщение Aug 18 2009, 14:38
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(ae_ @ Aug 18 2009, 18:19) *
Код
.set param=1
.db "data =", param/16+'0'+7*(param/16>9), param%16+'0'+7*(param%16>9)
.set param=param+1
.db "data =", param/16+'0'+7*(param/16>9), param%16+'0'+7*(param%16>9)
.set param=param+1
...

О! то что надо :-) Спасибо! Сурово получилось :-)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016