Keil™, An ARM® Company

Technical Support

A251: FAILURE TO HANDLE SBIT AND INLINE ASSEMBLY


Information in this article applies to:

  • C166 Version 3.12
  • C251 Version 2.14
  • C51 Version 5.50

SYMPTOMS

When generating or using two or more SRC files in a project, and both files 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.

Last Reviewed: Thursday, June 10, 2004


Did this article provide the answer you needed?
 
Yes
No
Not Sure