打印

ucosii 中的C问题

[复制链接]
1647|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2007-9-21 18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
keer_zu|  楼主 | 2007-9-21 19:23 | 只看该作者

明白了,论坛挺方便

11-方枪枪(43825171) 19:10:04
是一个函数,做为OSTaskStkInit的参数。VOID不是表示返回空指针,而是表示返回不确定的指针。随 task的返回指针类型而定。
克尔(342864821) 19:11:02
也就是说任务返回的类型不同了?
11-方枪枪(43825171) 19:11:25
是啊,可以不同。
克尔(342864821) 19:11:57
但是void (*task)(void *pd)又是怎么回事?
11-方枪枪(43825171) 19:14:44
该函数可能类似于一个过程。因为参数*pd为VOID类型,所以经过该函数的处理可能是和*PD一致的类型。
11-方枪枪(43825171) 19:14:59
是一致的数据结构。
克尔(342864821) 19:15:55
可是这是一个参数:
OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
克尔(342864821) 19:16:33
这是函数OSTaskStkInit的第一个参数
11-方枪枪(43825171) 19:17:11
对,task的返回值作为OSTaskStkInit的参数。
11-方枪枪(43825171) 19:18:21
这几个函数估计都是一个过程,不对数据类型做修改。
克尔(342864821) 19:18:37
pd是?
!爱斤欠(568449325) 19:18:40
不知道克尔大哥哪里搞不明白,这个我也明白的,哈哈。
11-方枪枪(43825171) 19:19:48
pd 是 task函数的参数,task函数的返回值又作为OSTaskStkInit的参数。
!爱斤欠(568449325) 19:21:31
void 说明返回一个不确定值,道是没听说过,向您学习了。
11-方枪枪(43825171) 19:21:55
不确定类型。
克尔(342864821) 19:22:03
*                   void Task(void *data)
*                   {
*                       .
*                       .
*                       while (1) {
*                           OSTimeDly(1);
*                           if (OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ) {
*                               Release any owned resources;
*                               De-allocate any dynamic memory;
*                               OSTaskDel(OS_PRIO_SELF);
*                           }
*                       }
*                   }
PIZZA(86827291) 19:22:14
 
11-方枪枪(43825171) 19:22:14
不确定类型。 
!爱斤欠(568449325) 19:22:16
哦,不确定类型。
!爱斤欠(568449325) 19:23:05
那如果不返回值该怎么写?
11-方枪枪(43825171) 19:23:31
你是不是像void main()这样的定义?
!爱斤欠(568449325) 19:23:38

!爱斤欠(568449325) 19:23:53
做为参数
克尔(342864821) 19:24:51
俺们先看看潭老师的书吧 
!爱斤欠(568449325) 19:25:13
那本书肯定没有
11-方枪枪(43825171) 19:25:20
==
!爱斤欠(568449325) 19:25:25
??
克尔(342864821) 19:26:02
如果把指向函数的指针作为另一个函数的参数改怎么写呀
11-方枪枪(43825171) 19:26:09
 http://dev.yesky.com/340/2517340.shtml
11-方枪枪(43825171) 19:26:15
看这里。
!爱斤欠(568449325) 19:26:16
如果不返回函数值的函数指针作为参数该怎么写呢》
克尔(342864821) 19:28:14
比如把指向  void a(void *c)  的指针作为
int t(----)的参数,那么如何定义t()?
11-方枪枪(43825171) 19:28:45
!爱斤欠(568449325) 19:26:16
如果不返回函数值的函数指针作为参数该怎么写呢》 

你可以不写类型,编译也能通过,最多警告一下。
!爱斤欠(568449325) 19:29:08
这样呀,明白了。
克尔(342864821) 19:29:17
呵呵 这个我刚看过了 在 
克尔(342864821) 19:29:32
在gogle上第一个
11-方枪枪(43825171) 19:29:52
加void是规范的写法。
!爱斤欠(568449325) 19:29:53
t((*a)(void *c))
!爱斤欠(568449325) 19:30:07
t((*a)(void *c)___)
!爱斤欠(568449325) 19:30:19
是吧
11-方枪枪(43825171) 19:30:40
规则四如果函数的参数可以是任意类型指针,那么应声明其参数为void *
克尔(342864821) 19:31:09
void (*task)(void *pd)岂不应该是(*task)(void *pd)了?
11-方枪枪(43825171) 19:31:27
 http://dev.yesky.com/340/2517340_1.shtml
克尔(342864821) 19:31:31
明白了
!爱斤欠(568449325) 19:31:33
你怎么还不明白呢
克尔(342864821) 19:31:35
谢谢
11-方枪枪(43825171) 19:32:00
我说了看我发的网址。
克尔(342864821) 19:32:08
谢谢
!爱斤欠(568449325) 19:32:37
多谢方--了
克尔(342864821) 19:32:54
规则四如果函数的参数可以是任意类型指针,那么应声明其参数为void *

  典型的如内存操作函数memcpy和memset的函数原型分别为:

void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num ); 
11-方枪枪(43825171) 19:33:09
所以void定义的都是*
11-方枪枪(43825171) 19:33:20
都是指针。

使用特权

评论回复
板凳
keer_zu|  楼主 | 2007-9-21 19:30 | 只看该作者

void 指针

void a(void *c)

被调用:int t(----)

结果:

t((*a)(void *c))

如果函数的参数可以是任意类型指针,那么应声明其参数为void *

t(void (*a)(void *c))

就象

void (*task)(void *pd)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1352

主题

12436

帖子

53

粉丝