I declare a variable unsigned char bdata Kde in a.c.
[in file a.c] unsigned char bdata Kde;
[in file b.c] #include <stdio.h> ..... extern unsigned char bdata Kde; sbit testbit=Kde^1; void main(void) {......}
I think that the root of the problem is that the linker cannot be left to work out bit addresses - only the compiler can do that. I am not sure why that should be the case, but I guess that it has something to do with the linker dealing only with relative addressing with simple offsets. You will need to define testbit in file a.c and export the bit address from there. So, you will have: [in file a.c]
bdata unsigned char Kde; sbit testbit=Kde^1;
#include <stdio.h> ..... extern bdata unsigned char Kde; extern testbit; void main(void) {......}