首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

taskSpawn( )的详解解决方案

2012-02-08 
taskSpawn( )的详解尤其是1st of 10 reqd task args to pass to func ,就是最后输入参数的10个有什么作用

taskSpawn( )的详解
尤其是1st of 10 req'd task args to pass to func ,就是最后输入参数的10个有什么作用,刚看了英语解释,不是很懂,谢谢

[解决办法]
这10个参数是为了最多限度的兼容不同的任务原型:允许任务最多可传入10个参数.也就是只要你的任务函数的参数是10个及以下,都可以用taskSpawn.

当然,大多数时候不需要这么多,所有就把后面的不需要的置0即可.在调用taskSpawn的时候,事实上也是把它们入栈的,不过任务不使用就行了,除了"浪费"点stack,没有影响.

这个建议看一下编译器手册或是那个vxworks_architecture_supplement手册,了解一下函数是如何入栈的,这样就能更清除的知道为什么在调用时多传入参数对被调用函数没有影响.

一般是这样的,调用规则中,c函数是从右往左进行参数入栈,然后再是返回地址之类(如果有的话),如在向下生长的堆栈中,可能是这样的:

参数9
参数8
...
参数0
返回地址/帧栈之类
局部变量之类

这样取参数的时候,没用到的参数显然不会有影响.

当然,更深一层,还涉及到是由调用者还是被调用者去参数进行出栈(减sp)的问题,这样的方式只适合于从右向左进行参数入栈,而且是由调用者出栈(如果是由被调用者出栈,那么返回时就会有参数没有完全出栈,造成堆栈的真正的浪费!).而c调用是满足这些规则的,像windows中的stdcall和delphi的调用方式好像就不一样了.

热点排行