ARM Technical Support Knowledge Articles

FAILURE TO HANDLE SBIT AND INLINE ASSEMBLY

Applies to: C251 C Compiler

Answer


Information in this article applies to:


SYMPTOMS

When generating/using two or more SRC files in a project that both use the same sbit definition, the linker generates a "MULTIPLE PUBLIC DEFINITIONS ERROR".

CAUSE

The Compiler has no idea what's going on in other source files, and so when it encounters the sbit definition, in converting it to assembly, generates a PUBLIC definition of it for the assembler. If it didn't default to this, you'd be forced to go to considerable lengths to declare a global variable in a module with inline assembly.

RESOLUTION

Declaring the sbit in question as an extern in the non-main C files will prevent the error and still provide linkage to the primary (sfr) declaration. You could handle this on a larger scale by having a separate header with externs of the sfrs for use in C files other than main, which will permit you to use them irrespective of the asm question, and without the attendant errors.

Article last edited on: 2004-06-08 10:33:20

Rate this article

[Bad]
|
|
[Good]
Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential