Hi, how can i set program counter from variable in C code?
void func(void) { uint32_t XADDR; XADDR = __current_pc(); ... // need set PC from XADDR // msr pc, XADDR not compiled }
Thanks in advance
You can't. And you shouldn't be trying to, either. Not from C code, anyway.
Whatever your actual problem is, destroying the compiler's control of the program counter like that is almost certainly not going to solve it.
But i can create it for call any address as function. May be create assembler function like
__B(uint32_t addr)
and call it for jump ?
You cant set PC directly. like PC = hhhh or so. But, you can modify the PC contents in C by using go to. You have to assign a label to the address (where you want to jump) and then go to that label. Alternatively, if you want only to call function(s), then function pointer can be used.
But in any case you are not allowed this in C - PC = hhhh
You might not be able to do it in C. You can do it from C. Keil manage it somehow with their RTX. Looks like they use the __asm keyword to take full control. You can look at the source code in \ARM\RL\RTX\SRC\CM\HAL_CM1.c for example.
You must be careful.