Перейти к содержанию

oleg st

Members
  • Постов

    26
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные oleg st

  1. Только что, ARV сказал:

    В 90-е вовсю были TASM и MASM, так что атмеловский ассемблер застрял, наверное, в 70-ых... даже интеловский ассемблер под MCS51 уже имел такие же точно макросы, как и avr-as в ту пору...

    согласен, наверное уже ничего и не будет ((

  2. 8 минут назад, valentinovich сказал:

    Напомнил. А я в те же времена, под К1801ВМ1 (БК с телевизором) и прочий "DEC", писал - и это было (по сравнению с другими ассемблерами) СЧАСТЬЕ. :)

    да, мы программировали, как могли =)

    теплые ламповые времена...

  3. 20 минут назад, AvrAsm сказал:

    :D

    Суровые челябинские пацаны до сих пор пишут в текстовом редакторе от NortonCommandera и не испытывают никакого дискомфорта!

    И директивы и т.п. их полностью устраивают.

     

    я писал под Z80, на телевизоре горизонт 202 в качестве монитора - это было сурово )))

  4. 22 минуты назад, Гар сказал:

    А зачем тебе это? Букв и цифр полно. Придумывай различные слова, сочетания цифр, пиши с метками как положено и не майся дурью.

    эту проблему я решил и выложил макросы, кто хочет могут пользоваться. спасибо за помощь всем, кто помогал.

    1 минуту назад, AvrAsm сказал:

    А что атмел в ассемблере поменял что стало хуже?

    Вроде как разработали в прошлом столетии так до сих пор всё одно и тоже, нет?

    в самом ассемблере менять ничего не надо, нужно изменить редактор, добавить и улучшить директивы, предпроцессорные команды, функции и тп, по сути, сделать ассемблер V3

  5. выяснил, что макросы перехода не работают вложенные в другой макрос, при условии, что переход тоже в макросе!

    упрощенный пример:

    .macro  RJPLO
        	brlo    @0    
    .endm
    
    .macro  TEST_JP
        	RJPLO    sss
    sss:    nop
    .endm
        	TEST_JP

    Error        Undefined symbol: sss  

    есть идеи?

  6. 1 минуту назад, demiurg1978 сказал:

    Здесь мы плавно пришли к следующему. Как только начинаешь писать на макроассемблере, пора переходить на си. Ассемблер хорош тем, что напрямую управляешь мк. Здесь все зависит только от тебя. Как успех, так и ошибки. Так же ассемблер хорош низким порогом вхождения. Я взял мк, почитал книги, написал свои первые шаги. И пошло. 

    я перешел на си, писал выше, но на асме пишу под мелкие мк типа тини13/10, и благодаря этому переходу мой асм стал лучше :D

  7. этим модулем нельзя просто так взять и передать/принять любой сигнал. нужно кодировать сигнал а-ля PWM. скачайте пдф на HCS200, делать нужно так как там написано.

    если использовать чинский пульт, то нужно писать хитрый алго, который будет синхронизироваться с каждым битом и вычислять % соотношения дутицикла. потому, как при удержании кнопки и передачи сигнала, проседает питание и плывет частота в реальном времени чуть ли не в несколько раз (у меня был похожий пульт от сиги чинской).

  8. 8 часов назад, demiurg1978 сказал:

    Вы как то неправильно понимаете суть макросов. Макросами пишут какие либо повторяющиеся куски кода, но которые не перенести в подпрограммы. И макросы не уменьшают, а замещают код. 

    Я не говорил, что он уменьшает код, он уменьшает сам текст, это позволяет лучше воспринимать программу.  Обычно простые замещалки пишу редко, как правило что-то проверяю ИФами и макрос становится уже типа умным. Это и есть макроассемблер, а непросто асм.

    з.ы. метки нужно ставить всегда ! ))

  9. Разбирать портянку час, если ее можно описать 5 строками, и решить проблему за 5 мин, взять за это котлету - лучшее удовлетворение , что можно получить.

    Человек капал поле всю жизнь, а ему дают трактор для работы, а он, - "не, ерунда, лучше с лопатой"

    Макросы и нужны, чтоб лопатой не махать. Этот инструмент встроен в среду, и не пользоваться им неумно.

    На дядю нужно быстро писать и прострации не приемлемы, а писать нужно, не то что макросами, а целыми блоками и не своими )))

  10. 5 часов назад, Геннадий сказал:

    Можно сделать лаконичнее, применив переход противоположного условия на пару байт дальше, а следующей командой ставите тот же RJMP.

    
    ;например, вместо breq_куда-то далеко можно сделать так...
    	brne	PC+2
    	rjmp	куда-то далеко

     

    ну так макрос это и делает автоматом

    .macro RJEQ ; Jump ==        Skip !=
        .if    jump_calc
        breq    @0
        .else
        brne    lop
        rjmp    @0 lop:

        .endif    .endm

  11. зачем писать 2 строки, когда можно одну?  у меня 75% заменено макросами, по опыту скажу, что скорость написания и понимания кода возросла в разы. почти си ))

    вот еще:

    STSW ram_addr,reg; любые регистровые пары(WORD) от r0...r30 грузит в ОЗУ или РСН (WORD)  
    
    LDSW reg,ram_addr; ОЗУ или РСН (WORD) грузит в любые регистровые пары(WORD) от r0...r30

    РСН или ОЗУ тоже автоматом.

    на классике:

    lds r16,ram_addr
    
    lds r17,ram_addr+1

    еще сравнение 16-битной константы с ОЗУ 16бит, выглядит так:

    CPMIW ram_addr,2500; сравнение
    
    RJSH loop; переход по >=

    мне лично так удобно, я просто устал от лапной писанины )))

  12. с вами согласен полностью, я сам на асме пишут давно и перешел на С, как и вы, и спецом придумал кучу С-подобных макросов, не для того чтобы писать дальше на асме, а для ускорения написания и спец задач для таких МК типа тини13,10,24. Хотя, в эпоху стм даже эти тини уже не актуальны, но мы в теме авр, так что это может кому и пригодится.

    Чтобы макрос не увеличивал выхлоп, лучше  его использовать как инструмент автоматизации и передачи параметров.

  13. Смысл макросов заменить и расширить стандартные условные переходы  breq и т.п. Эти переходы ограничены относительными прыжками от -63 до +64, если

    нужно прыгнуть дальше, то эти макросы вам помогут, при дальнем прыжке будет подставлен rjmp, пример:

    .org 200
    
     cp r16,r17
    
     RJEQ  loop1; Jump ==    Skip !=   <<-- здесь будет обычный breq loop1
    
     cp r18,r19
    
     RJEQ  loop2; Jump ==    Skip !=   <<-- тут макрос автоматически подставит конструкцию с дальним переходом brne + rjmp
    
    .org 250
    
     loop1: nop
    
    .org 1000
    
    loop2: nop

    названия макросов писал в стиле авр асма, но вы можете придумать свои удобные названия.

  14. может кому пригодится ))
     

    ; -- умные условные переходы --
    
    #define jump_calc int(abs(PC-@0)) <= int(64-((PC-@0)<0));условие вычисления прыжка -63...+64 = True
    
    .macro RJEQ ; Jump ==        Skip !=
        .if    jump_calc
        breq    @0
        .else
        brne    lop
        rjmp    @0 lop:
        .endif    .endm
    
    .macro RJNE ; Jump !=        Skip ==
        .if    jump_calc
        brne    @0
        .else
        breq    lop
        rjmp    @0 lop:
        .endif    .endm
    
    .macro RJHI ; Jump >        Skip <=
        .if    jump_calc
        breq    L0
        brsh    @0 L0:
        .else
        brlo    lop
        breq    lop
        rjmp    @0 lop:
        .endif    .endm
    
    .macro RJSH ; Jump >=        Skip <
        .if    jump_calc
        brsh    @0
        .else
        brlo    lop
        rjmp    @0 lop:
        .endif    .endm
    
    .macro RJLO ; Jump <        Skip >=
        .if    jump_calc
        brlo    @0
        .else
        brsh    lop
        rjmp    @0 lop:
        .endif    .endm
    
    .macro RJSL ; Jump <=        Skip >
        .if    jump_calc
        breq    @0
        brlo    @0
        .else
        breq    lup
        brsh    lop
    lup:    rjmp    @0 lop:
        .endif    .endm

     

×
×
  • Создать...