打印

MDK中,给一个结构数组的函数指针赋值,怎么出错了?

[复制链接]
4289|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
johnliu2000|  楼主 | 2013-7-17 18:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
typedef struct
{
    void (* handler)(void *p_arg);//定义一个结构体,handler指向一个函数
}TaskData;

//定义一个变量

TaskData function;
//有一个函数:
void App_Handler(void *p_arg)
{
    (void)p_arg;                        // 'p_arg' 并没有用到,防止编译器提示警告
        SysTick_init();

        app.Touch_Q=OSQCreate(&MsgGrp[0],N_MESSAGES);                                         //创建消息队列

        OSTaskCreate(Task_Touch,(void *)0,
           &Touch_task_stk[TOUCH_TASK_STK_SIZE-1],TOUCH_TASK_PRIO);        //创建触摸任务

        OSTaskCreate(Task_Count,(void *)0,                                                        //创建计算任务
           &Count_task_stk[COUNT_TASK_STK_SIZE-1],COUNT_TASK_PRIO);

    while (1)
    {
        LED1( ON );
        OSTimeDlyHMSM(0, 0,0,500);
        LED1( OFF);
        OSTimeDlyHMSM(0, 0,0,500);
    }
}
  
int main(void)
{
          BSP_Init();
        OSInit();
        function=App_Handler; //这里出现错误
        OSTaskCreate(function,(void *)0,
           &startup_task_stk[STARTUP_TASK_STK_SIZE-1], STARTUP_TASK_PRIO);

        OSStart();
    return 0;
}




错误信息如下:
Build target 'LED-DEMO'
compiling main.c...
main.c(55): error:  #513: a value of type "void (*)(void *)" cannot be assigned to an entity of type "TaskData"
main.c:         function=App_Handler;
main.c:                 ^
main.c(62): warning:  #1-D: last line of file ends without a newline
main.c:    }
main.c:      ^
main.c: main.c: 1 warning, 1 error
compiling stm32f10x_it.c...
compiling BSP.c...
compiling diskio.c...
compiling app.c...
compiling COUNT.C...
Target not created



我看函数形式和我定义一样的,怎么会有错误啊。


相关帖子

沙发
原野之狼| | 2013-7-17 19:23 | 只看该作者
function   这是一个struct
App_Handler   这是一个函数指针

类型不匹配

修改成:
function.handler=App_Handler;

使用特权

评论回复
板凳
airwill| | 2013-7-18 07:21 | 只看该作者
楼主正解, 是结构体的元素, 而不是结构体

使用特权

评论回复
地板
ayb_ice| | 2013-7-18 08:02 | 只看该作者
基本问题

使用特权

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

本版积分规则

9

主题

21

帖子

0

粉丝