This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

static initialization of extern pointer to function

Hi All,

Could anybody help me out with the following problem? I have a module with the following declarations.

int (*on_CAN_msg)(void);
	...
void CAN_int_handler(void) interrupt 7 using 1 {
	...

	if (on_CAN_msg)
		on_CAN_msg();
	...
}

Now I have another module:
int CAN_msg_handler(void){
	...
}

extern int (*on_CAN_msg)(void) = CAN_msg_handler;

I also have the following linker's OVERLAY directive to make sure the compiler knows the correct call sequence:
CAN_int_handler ! (CAN_msg_handler),
main ! (on_CAN_msg)

CAN_msg_handler() doesn't get called. However, when I replace extern int (*on_CAN_msg)(void) = CAN_msg_handler;
with
int main(){
	...
	on_CAN_msg = CAN_msg_handler;
	...
}
everything seems fine. How can I make this code work without having to assign the handler on the fly?

Thanks in advance,
Sandy

0