This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

arm assembler macro help

I'm trying to get some arm assembly code to work with macros. I'm using free download version of keil tools. is the macro language the same syntax for armasm arm tools and free download keil tools?

I wanted to use conditional compile macros like:

    [ "$var1" = ""
    LDR r0, =0x1234
    |
    LDR $var1, =0x1234
    ]

which is a syntax that works with the ARM compiler, but the keil download is giving me an error.

And the error message I get only points to the line that invokes the macro. Is there a way to get the keil free download to output what the code looks like AFTER all the macro substitution is done?

Parents
  • I was trying to do something like this:

    infocenter.arm.com/.../index.jsp

    7.4.4. IF, ELSE, ENDIF, and ELIF

    ...

     IF :DEF:NEWVERSION
                ; first set of instructions/directives
            ELSE
                ; alternative set of instructions/directives
            ENDIF
    

    I think I'm used to an even older version of the assembler that used square brackets [ instead of "IF", square bracket ] instead of "ENDIF" and a pipe | instead of "ELSE".

    Since everything I'm used to apparently has been "superseded", do you have a URL to how to write conditional compiled assembly with the latest revs of tools?

    I wanted to make a macro that will take in a parameter and based of the parameter may compile one of many instructions. It worked on an older rev, but not on the latest.

Reply
  • I was trying to do something like this:

    infocenter.arm.com/.../index.jsp

    7.4.4. IF, ELSE, ENDIF, and ELIF

    ...

     IF :DEF:NEWVERSION
                ; first set of instructions/directives
            ELSE
                ; alternative set of instructions/directives
            ENDIF
    

    I think I'm used to an even older version of the assembler that used square brackets [ instead of "IF", square bracket ] instead of "ENDIF" and a pipe | instead of "ELSE".

    Since everything I'm used to apparently has been "superseded", do you have a URL to how to write conditional compiled assembly with the latest revs of tools?

    I wanted to make a macro that will take in a parameter and based of the parameter may compile one of many instructions. It worked on an older rev, but not on the latest.

Children
  • Method 1: Using a Macro

    ; Macro definition
      MACRO
      Test $var1
        [ "$var1" = ""
        LDR r0, =0x1234
        |
        LDR $var1, =0x1234
        ]
      MEND
    
    ; Macro invocation
      Test
      Test r1
    

    Method 2: Using a global symbol

         GBLS var1
    var1 SETS "r1"
    
      [ "$var1" = ""
      LDR r0, =0x1234
      |
      LDR $var1, =0x1234
      ]
    

    Description of IF,ELSE,ENDIF and ELIF:
    infocenter.arm.com/.../index.jsp

    Description of MACRO and MEND:
    infocenter.arm.com/.../index.jsp

  • > I think I'm used to an even older version of the
    > assembler

    No, my bad. I wasn't aware of the synonyms.

    --
    Marcus

  • > Method 1: Using a Macro

    Hm, that's what I was trying to do. I must have a typo somewhere in my macro that I'm not seeing.

    Is there a way to see the code that gets generated after all the macro replacement is finished? I'm using the free download tools.

    It's reporting an error on the line where the macro is called, but not telling me what line in the macro itself is the problem.

  • So, it looks like the problem wasn't my macro at all. It was that my macro was in a file that I had created on Linux and pulled over to Windows.

    I created a new project and a new file that did nothing but get my macro file and call the macro once. When I pulled the macro file into the project, the tool said something about the file having bad newline characters and that it would try to fix it. (I can't remember the exact message).

    When I tried to assemble, I got the same error message which was something about bad characters at end of line.

    I thought "bad characters" meant that my macro had a typo in it somewhere, like MACRO without MEND, or something like that. But this was the first time it had complained about the newline cahracters when I imported teh file, so I wondered if it was a Linux/Windows issue.

    So then I wiped out the project and created a new startup.s file, and I retyped the macro from scratch (no cut and paste, nothing to get some old newline characters) and then called the macro in a simple bit of code.

    It compiled just fine.

    So, somehow the newlines from Linux totally confused the tool, and the error message I got at first wasn't clear that it was a problem with "\n" rather than a problem with a typo in my macro text like a missing MEND or END or ] or whatever.

    Argh.

    Anyway, thanks for the help, sorry for the false alarm.