I need to call a function at address 0xDD2:
// foo.h
void foo(void) __at(0xDD2);
// foo.c
#include "foo.h"
void foo(void)
{
// some code
}
This code works:
#include "foo.h"
void main(void)
{
void (*a)(void) = &foo;
a();
}
However, this one doesn't:
#include "foo.h"
void main(void)
{
void (*a)(void) = (void (*)(void))(0x0DD2);
a();
}
The compiler (XC8) says: main.c:135:: warning: (759) expression generates no code
and debugger passes these lines while debugging.
I need second one (call function just by its address). Why compiler optimizes it out? Is there any mistake in pointer assignment? Changing optimization level of compiler didn't help.