Global constant in GNU AS

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Global constant in GNU AS

969 Views
ianbenton
Senior Contributor I

I have an assembler program consisting of several partial programs.

I know that labels have to be declared as "global" so that other partial programs can see them:

label: LDR R0,[R1]

can only be seen by the same partial program

but

.global label

label: LDR R0,[R1] 

can be seen by all the partial programs.

I can't seem to get the same thing to work for constants:

.equ v_charge,2400

sets the constant v_charge to 2400.

If I put it in its own file and .include the file in all the partial programs that need it, then it works, but as a line of code in a partial program it is only available to its local program

I would expect that .global v_charge would make it available to the other partial programs, but it doesn't.

What is the correct syntax?

0 Kudos
4 Replies

760 Views
converse
Senior Contributor V

The standard way of doing this is to place them in an (assembler) include file, and include that file into each assembler file where it is needed.

use

   .include “file.h”

0 Kudos

760 Views
ianbenton
Senior Contributor I

That seems to work apart from one thing:

If ever you edit  "file.h" the new version only takes effect in the sub-programs that have recently been edited. If the program is complied with some sub-programs the same as the previous compilation, then those sub-programs retain the old version of file.h.

That's annoying!

0 Kudos

760 Views
ianbenton
Senior Contributor I

Thanks Alexis and Con Verse. I tried a few options and the include file is the only thing I could get to work.

. . .  but (on a point of semantics) I'm never sure whether it should be .h or .inc

I do know that the standard LPCXpresso editor seems to think every line is a syntax error and underlines it in orange, and that's mildly irritating!

0 Kudos

760 Views
Alexis_A
NXP TechSupport
NXP TechSupport

Hi Ian,

 

I analyzed the disassembly view trying to declare a global constant to other files and it looks like the compiler put the value from the constant in the assembly instruction, ignoring the label. I suspect this can't be done.

 

Best Regards,

Alexis Andalon

0 Kudos