关于多重调用的问题
今天编译程序时出现了多重调用的警告:
*** WARNING L15: MULTIPLE CALL TO SEGMENT
研究其原因是由于有个子函数同时在中断和其它地方被调用了, 由于可能存在当该子函数在被调用其间同时产生外部中断,而使得该子函数发生了重入;
所以编译器就产生了以上的WARNING了。
记得可以用reentrant使函数重入的;下面是一些关于reentrant的说明:
1,在用reentrant修饰的函数中不能使用bit类型的参数和变量;
2,重入函数不使用一般函数位于存储模式默认空间的可覆盖式堆栈,而是在同一空间从顶端另行分配一个非覆盖式的重入堆栈。
small 默认空间是 data;
compact 默认空间是 pdata;
largr 默认空间是 xdata;
3,由于要保存参数和局部变量,所以会消耗很大的栈空间;尽量少用这种模式;
我所用的是large模式 ,所以对函数加上reentrant 修饰之外,还要将函数内的局部变量的存储模式改为xdata;
也好在我的重入函数不多,也就应负过无能为去了,如果多了,那又要改程序了!
Thu Mar 1 2007
21:13:54 UTC+0800<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
文章评论(0条评论)
登录后参与讨论