Tool/software: TI C/C++ Compiler
I'm using CCS 8.2 w/TI v18.1.14.LTS. I'm making a jump table to call a specific function based on a number received in a serial message. This works sometimes but, when I change the code sometimes it won't work due to address problems.
When I try to assign a function address to a function pointer (or uint32_t) - the address stored to the function pointer (or uint32_t) is offset by +1. An example of this would be the address of the function is 0x00000AA2 but, the address stored in a variable is 0x00000AA3. See simplified code below. For now I'm just subtracting 1 from the function address but, this doesn't seem like a good solution. Does anyone have any suggestions?
in the h file
static void foo(uint8_t *ref); static void foo2(uint8_t *ref);
in the c file:
static void (*rx_msg_proc_func[64])(uint8_t *ref);
void foo(uint8_t *ref) { }
void foo2(uint8_t *ref) { }
void rx_msg_proc(uint8_t *msg)
{
(*rx_msg_proc_func[msg[0]])(&msg[1]);
}
void init(void)
{
rx_msg_proc_func[0] = &foo; // foo address is 0x00000AA2 and *rx_msg_proc_func[0] is 0x00000AA3
rx_msg_proc_func[1] = &foo2; // foo2 address is 0x00000AF8 and *rx_msg_proc_func[1] is 0x00000AF9
uint32_t func_addr = &foo; // func_addr is 0x00000AA3 so address is being incremented regardless of variable type
}