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
I can't use LR because it contain return address for function. Now i can use only
PUSH {R0} POP {PC}
Simple way if __current_pc() can modified to __current_pc(uint32_t addr)
You said you wanted to set the PC, returning runs into a whole slew of issues about stack balance, and stuff the compiler expects to be happening.
You'd be far better of just calling with a function pointer and coming back so you can clean up, rather than hosing the stack and the system up.
So is it coming back to the point you change the PC, or to the address that called the function that messing up the PC and stack?
Don't do this in C, do it in assembler where you have some explicit control.
how can i set program counter from variable in C code?
Please state the company you work for so I can avoid their products
Erik
It probably wouldn't get enough market shares that you need to intentionally avoid it.
The ones who need to play interesting games with the PC outside of what a normal function call, a function pointer, loop constructs, if/case conditionals, a throw/catch or maybe long-jumps allows, are busy writing operating systems - and they don't need to ask a web forum how to do it.
Assembler is the tool of choice for people who wants to "own" the PC.
"Assembler is the tool of choice for people who wants to "own" the PC."
That's retarded sir. We new school. java is for peeps that does own the PC.
smackdown. we out.
I'm not really so convinced Java is a good way to own any program counter. It sounds more like a way to keep the machine busy performing garbage collect - which would imply that Java is the tool of choice for creating garbage.
You're talking out of your c#=t again.