Odd Calling Convention

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Odd Calling Convention

跳至解决方案
763 次查看
jimfell
Contributor III

I working with an existing code base, and I came across this function that is called durning normal program execution to modify the Interrupt Priority Level (IPL) bits of the Status Register (SR):

 

 

__declspec (register_abi) asm unsigned int asm_set_ipl(unsigned int mask)

 

I'm unfamiliar with this.  What is this convention suppose to be doing?  (Yes, all the code in this function is assembly.)  As nearly as I can tell, this is just stating that this is an assembly function.  Is that all this convention is doing?  I am using CodeWarrior 10.  Thanks.

 

 

标签 (1)
0 项奖励
回复
1 解答
629 次查看
BlackNight
NXP Employee
NXP Employee

Yes, I have seen that in several places used. It is not CodeWarrior specific. I think 'ipl' stands for 'Interrupt Priority Level': using that (assembly) function you pass the new interrupt mask and on return you get the previously set interrupt level back. So you could use it like

oldLevel = asm_set_ipl(MASK_ALL_INTERRPTS); /* disable interrupts */

critical section here;

(void) asm_set_ipl(oldLevel); /* restore previous interrupt level */

If the question is about what the __declspec(register) is about: this tells the compiler to use 'register' calling convention (instead of passing the parameters on the stack).

Hope this helps,

Erich

在原帖中查看解决方案

0 项奖励
回复
2 回复数
630 次查看
BlackNight
NXP Employee
NXP Employee

Yes, I have seen that in several places used. It is not CodeWarrior specific. I think 'ipl' stands for 'Interrupt Priority Level': using that (assembly) function you pass the new interrupt mask and on return you get the previously set interrupt level back. So you could use it like

oldLevel = asm_set_ipl(MASK_ALL_INTERRPTS); /* disable interrupts */

critical section here;

(void) asm_set_ipl(oldLevel); /* restore previous interrupt level */

If the question is about what the __declspec(register) is about: this tells the compiler to use 'register' calling convention (instead of passing the parameters on the stack).

Hope this helps,

Erich

0 项奖励
回复
629 次查看
jimfell
Contributor III

Thanks!

0 项奖励
回复