硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3490|回复: 2
收起左侧

[FreeRTOS] 为何创建任务必须加入 void* 类参数?

[复制链接]

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2016-12-30 21:02:18 | 显示全部楼层 |阅读模式
FreeRTOS9.0.0 + IAR7.6

//信号灯任务:周期性闪烁
void vMyTask_FlashLed(void* pParams)
{
    while(1)
    {
        GPIO_ResetBits(GPIOA, GPIO_Pin_1);
        vTaskDelay(100);
        
        GPIO_SetBits(GPIOA, GPIO_Pin_1);
        vTaskDelay(1400);
    }
}

//
static void vMyAppTaskCreate(void)
{     
    xTaskCreate(vMyTask_FlashLed,                                               //任务函数
                "vMyTask_FlashLed",                                             //任务名
                16,                                                               //任务栈大小,单位word,也就是4字节
                NULL,                                                             //任务参数
                1,                                                                 //任务优先级
                NULL);                                                          //任务句柄
}

在任务 vMyTask_FlashLed() 里,刚开始我是没有加入参数(void* pParams)的,声明为 vMyTask_FlashLed(void),结果编译后提示错误

Error[Pe167]: argument of type "void (*)(void)" is incompatible with parameter of type "TaskFunction_t" E:\IAR-EWARM\user\..........
根据提示信息看,意思是 xTaskCreate(vMyTask_FlashLed 的第一个参数原型不对,然后我就在任务函数里加上参数 (void* pParams) 一切就OK了


但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是但是。。。。。


之前我下过看过别的FreeRTOS9.0.0的小例程,里面任务的声明,也没有传入参数,就是(void),结果人家编译通过了,这是为何,实在难以理解
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2016-12-31 00:29:06 | 显示全部楼层
IAR中这个是ERROR,无法编译通过

MDK中这个是WARNING,可以编译下载。

实际应用中建议加上,防止不必要的麻烦。
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
 楼主| 发表于 2016-12-31 13:57:15 | 显示全部楼层
问题倒是早就发现并解决了,还是你说的对,就按标准来吧,加上个参数也不麻烦,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 05:03 , Processed in 0.269144 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表