This is the mail archive of the crossgcc@cygnus.com mailing list for the crossgcc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Accessing fixed addresses


>>>>> "John" == John Breen <jab3@hotmail.com> writes:

    John>     volatile unsigned int *const reg_A = (void *)(BASE);
    John> volatile unsigned int *const reg_B = (void *)(BASE+4);
    John> volatile unsigned int *const reg_C = (void *)(BASE+8);

    John> and put these in a .h file.  This worked pretty well; the
    John> pointers gave me a symbolic way to access the locations in
    John> the debugger, and gcc optimized the code so that the memory
    John> locations were accessed directly, rather than through the
    John> pointer, so there was no access overhead.

    John> The problem was when I tried to use the .h file in more than
    John> one object file, and then link them.  As one would expect, I
    John> got multiple definition errors.

Try using "static" infornt of those, like this:

    static volatile unsigned int *const reg_A = (void *)(BASE);
    static volatile unsigned int *const reg_B = (void *)(BASE+4);
    static volatile unsigned int *const reg_C = (void *)(BASE+8);

This will restrice the scope to those constants to the current
compilation unit only, so you will not get the multiple defined
errors. 

-- 
--------  "And there came a writing to him from Elijah"  [2Ch 21:12]  --------
R. J. Brown III  rj@elilabs.com http://www.elilabs.com/~rj  voice 847 543-4060
Elijah Laboratories Inc. 457 Signal Lane, Grayslake IL 60030  fax 847 543-4061
-----  M o d e l i n g   t h e   M e t h o d s   o f   t h e   M i n d  ------
_______________________________________________
New CrossGCC FAQ: http://www.objsw.com/CrossGCC
_______________________________________________
To remove yourself from the crossgcc list, send
mail to crossgcc-request@cygnus.com with the
text 'unsubscribe' (without the quotes) in the
body of the message.