UCOSiii难疑之——“p_arg = p_arg;”或“(void)p_arg;”

3 篇文章 0 订阅
1 篇文章 0 订阅

UCOSiii难疑之——“p_arg = p_arg;”或“(void)p_arg;”

先开门见山:
出现原因:防止编译时出现变量定义但未使用的warning。

1.在ucosii和ucosiii中经常看到,有子函数定义为

void xxxx(void *p_arg)
{
	...
	p_arg=p_arg;//或者为(void)p_arg;
	...
}

程序中的“p_arg=p_arg;//或者为(void)p_arg;”,是为了在编译时候,程序不会产生变量定义未使用的warning,比如下面警告语句:
**…main\main.c(36): warning: #177-D: variable “p_arg” was declared but never referenced
这里的语句就是为了使用下变量,避免出现报警。

2.继续探究为什么后面使用,还要定义一个无类型指针void * p_arg呢。
实则在大部分函数都是在函数体内在确定这指针类型,用来传递一些参数,这个参数就是未知类型的参数,比如在ucosiii任务创建函数中使用了*p_arg传递参数。

void  OSTaskCreate (OS_TCB        *p_tcb,
                    CPU_CHAR      *p_name,
                    OS_TASK_PTR    p_task,
                    void          *p_arg,//传递参数
                    OS_PRIO        prio,
                    CPU_STK       *p_stk_base,
                    CPU_STK_SIZE   stk_limit,
                    CPU_STK_SIZE   stk_size,
                    OS_MSG_QTY     q_size,
                    OS_TICK        time_quanta,
                    void          *p_ext,
                    OS_OPT         opt,
                    OS_ERR        *p_err)
{

...
    p_tcb->TaskEntryArg  = p_arg;        /* Save task entry argument*/
...

ps:c语言中void无类型只能是是无类型指针,不能修饰无类型变量,因为在同一个mcu下,指针存储是同字节大小的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋天的枫9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值