函数不可重入的原因之一---拷贝传参

来源:互联网 发布:淘宝美工速成 编辑:程序博客网 时间:2024/04/29 15:01

 

          对于比较简单的架构,如c51,它的堆栈只能用内部的RAM,如果采有堆栈传参方式,溢出问题是个大麻烦。所以只能采用拷贝传参方式。但是采用拷贝传参意味着函数是不可重入的。

          其实,这种机制下,当例如函数x()正被调用过程中,一个更高优先级的任务介入,而这个高级任务同样也调用x()函数,那么根据拷贝传输的原理势必造成并非我们想要的结果。
          如果使51的函数可重入,还是有点办法的:

 

1 可以用汇编写,确保该函数的运算都用R0--R7完成。

2 声明函数时加个关键字reentrant即可。