We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
The GNU compiler can define intrinsic functions. Is there a mechanism in Keil library or whatever, to allow you to create a function in assembly and tag it as intrinsic?
How can you pop a couple bytes off the internal stack?
... it is perfectly possible to call assembler functinos from 'C'
http://www.keil.com/support/man/docs/c51/c51_ap_ctoasm.htm
I wanted to avoid the stack usage of a function call. But I finally crafted this solution: Problem. A lowlevel interrupt has locked another low level interrupt out (Timer 2 is higher in the vector table than timer 3 so takes precedence.) in Timer 2 I tested the timer 3 interrupt pending bit and then call this routine, which cleans up the stack and vectors to timer 3. problem solved. no more low level priority lockout. NAME vjump ?PR?GOTO_TMR3?vjump SEGMENT code PUBLIC GOTO_TMR3
rseg ?PR?GOTO_TMR3?vjumP ; ; designed to be called from within interrupt 2 to transfer to int 3 ; ; when this is called ACC can be trashed ; GOTO_TMR3: pop ACC ; clear the return address off the stack pop ACC POP PSW ; clear off int data POP DPL POP DPH POP B POP ACC ; ; leave reurn address on the stack. Then jump to interrupt handler with interrupt status set, so that ; timer 3 interrupt will work as if it was interrupted ; LJMP 0x0073 ;go to timer 3 interrupt handler
END
"Problem. A lowlevel interrupt has locked another low level interrupt out"
You mean this: http://www.keil.com/forum/docs/thread14896.asp ?
Problem. A lowlevel interrupt has locked another low level interrupt out (Timer 2 is higher in the vector table than timer 3 so takes precedence.)
only true if they happen at EXACTLY the same time Please read the manual. That is the only time the place in the 'priority order'/'vector table' means anything.
Erik