对于比较简单的架构,如c51,它的堆栈只能用内部的RAM,如果采有堆栈传参方式,溢出问题是个大麻烦。所以只能采用拷贝传参方式。但是采用拷贝传参意味着函数是不可重入的。
其实,这种机制下,当例如函数x()正被调用过程中,一个更高优先级的任务介入,而这个高级任务同样也调用x()函数,那么根据拷贝传输的原理势必造成并非我们想要的结果。
如果使51的函数可重入,还是有点办法的:
1 可以用汇编写,确保该函数的运算都用R0--R7完成。
2 声明函数时加个关键字reentrant即可。