Dear Vladimir,
18 Nov 03 02:21, Vladimir Chekin wrote to Serge Bryxin:
SB>> Синтаксис, как всегда, сугубо приватный. VC> У каждой фирмы (читай ассемблера) обычно свой почерк. У VC> MicroCosm-овских продуктов такой.
Hу... да. Мне почему-то нравится "почерк" MACRO-11. masm был с похожим синтаксисом. tasm практически не отличался. Вот AVRstudio - тоже похожа. Т.е. если и не стандарт, то какой-то мэйнстрим наблюдется. Я не очень понимаю, из каких соображений надо изобретать велосипеды.
Вот никому же в голову не приходит в очередном компиляторе C заставить директивы начинать не с диез, а с доллар к примеру...
SB>> Hу зачем? Столько переписывать... VC> Hе понял, чуть конкретней.
Hу есть у меня проекты, написанные в AVRstudio. Hекоторые недоделаны, некоторые нуждаются в поддержке. Если принять решение о переезде на этот МикроКосм - работа по переписыванию синтаксиса - совершенно недетская :-(
SB>> Очень понравилась работа с битами. Удобно. VC> А причём тут ассемблер, разве у авров в системе команд нет битовых VC> операций?
Есть, но они "тупые". В результате надо определить порт (или регистр) и бит, и работать с обоими этими определениями:
.equ MYPORT=PORTD .equ MYPIN=5 sbrs MYPORT,MYPIN
У МакроКосм засчет определения битов и введения псевдоассемблерной мнемоники получилось удобно:
MYPIN .equ PORTD.5 sbrs MYPIN
Отдельная беда у системы команд AVR с командами взведения/снятия бита в регистре. Т.е. Этих команд фактически нет. sbr и cbr эквивалентны andi и ori. Приходилось писать что-то вроде:
.def FLAGS=R22 .equ MYFLAG=5 andi FLAGS, ~(1<<MYFLAG) ( что абсолютно эквивалентно cbr FLAGS,~(1<<MYFLAG) )
В МикроКосме опять же псевдокоманды:
MYFLAG .equ FLAGS.5 cbr MYFLAG
SB>> Я из-за этого на все битовые операции раньше макросы прописывал. VC> А макросы это личное дело каждого программера.
Да. Hо поскольку писанина этих бесконечных портов, регистров и сдвигов изрядно утомляет, я каждый раз выписываю гору макросов типа .MACRO MYFLAG_CLR andi R16,~(1<<5) .ENDM
SB>> Очень не понравилось отсутствие примеров - как в поставке, VC> Эти примеры лежат в папке \PHYTON\PROJ-AVR\PROJECTS\. Тоже не обнаружил?
Там лежит несколько примеров для IAR C (что мне не интересно) и единственный куцый примерчик для асм, в котором не используется и одной десятой возможностей. Кое-какие примеры (отрывки) есть в документации, но отнюдь не на везде, и не всегда внятные.
SB>> так и в чрезвычайно талантливой (т.е. краткой) документации. VC> Хм. А чего ты хочешь от встроенного в оболочку хелпа? Он и VC> должен быть кратким. А ты ожидал учебник по программированию?
Меня не надо учить программировать :-) Hо если ты делаешь какой-то совершенно нестандартный асм с извращенной порой логикой (чего стоит, к примеру, "сегмент регистров") - так надо бы, наверное, это разжевать до полного просветления хоть где-нибудь?
SB>> Вот сейчас сижу, и не понимаю: как описать глобальные битовые переменные. VC> По довольно стандартной схеме.
Да я уже разобрался "by the method of scientific тык". Спасибо.
VC> Это как раз из примеров.
В примере HЕТ ни одного .DEFINE Собственно, глобальных переменных там тоже нет.
VC> Или посмотри готовые инклуды в папке PROJ-AVR\MCAAVR\INC\ VC> .ORG 012H VC> PORTD .DSB VC> PORTB7 .EQU PORTB.7 VC> PORTB6 .EQU PORTB.6 VC> PORTB5 .EQU PORTB.5
Угу. Вот-вот. А то, что такую конструкцию можно вложить в каждый файл проекта - ни гу-гу. Я, разумеется, так делать побаивался (ну кто ж глобалы определяет везде? их в одном месте определить надо, а в остальных - ссылки). Пока я не рискнул от безысходности вбить это в хидер...
SB>> Еще как-то задели такие "мелочи", как отсутствие в файлах-описаниях SB>> кристаллов VC> Инклуды знаю, а это что за файлы такие?
Hу инклуды и есть. Которые написаны специально для определения конкретного кристалла, а не для системы в целом.
SB>> векторов прерываний, размера SRAM и еще чего-то. VC> Если тебе лень читать даташиты
Мне не лень читать даташиты. Мне лень править код при переносе с кристалла на кристалл (из проекта в проект).
VC> Мне что-то не разу не попадались инклуды, в которых бы описывались VC> вектора и размеры сегментов, обычно только SFR-ы и биты. Можешь привести VC> примеры?
Дык в той же AVRstudio.
.INCLUDE "2313def.inc" ldi tmp, low(RAMEND) out SPL, tmp
и далее:
.ORG OVF0addr rjmp t0int
Если я сменю кристалл, мне достаточно вставить другой инклудник. Стек и вектора прерываний встанут на место автоматически. Разве эта фича не естественна, как воздух?
VC> У меня есть руское описание на MCA-AVR, давай емыл, кину, если надо. VC> Правда 2001 года, но думаю, что основная часть осталась без изменений.
Hе, спасибо, пока обхожусь. А вот если бы примеров серьезных программ на нем... Было бы невероятно пользительно.
Sincerely yours, Old Greaser.