这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 这个参数总是传不对,是不是编译器有问题?

共3条 1/1 1 跳转至

这个参数总是传不对,是不是编译器有问题?

院士
2006-09-17 18:14:16     打赏
这个参数总是传不对,是不是编译器有问题?



关键词: 这个     参数     总是     不对     是不是     编译器     有问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 void key_sCAN((void)*pdata);

主程序调用函数
OSTaskCreate(key_sCAN,(void*)0,&key_sCANStk[TASK_STK_SIZE-1],0);

其函数原型是
INT8U  OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);

编译后看的key_sCAN的首地址为0x00d1,但传过去的数总是0x0054,
奇怪的是,要是把调用函数改为
OSTaskCreate((void*)0x00d1,(void*)0,&key_sCANStk[TASK_STK_SIZE-1],0);
传递结果就正确了~
为什么直接送数可以,送函数名怎么就不行呢?


编译器的反汇编程序
13:        OSTaskCreate(key_sCAN,(void*)0,&key_sCANStk[TASK_STK_SIZE-1],0);
+000000D4:   2422        CLR     R2              
+000000D5:   822A        STD     Y+2,R2           
+000000D6:   E287        LDI     R24,0x27         
+000000D7:   E091        LDI     R25,0x01      
+000000D8:   8399        STD     Y+1,R25         
+000000D9:   8388        STD     Y+0,R24         
+000000DA:   2722        CLR     R18       ////     
+000000DB:   2733        CLR     R19       ////////////R19,R18值为第2个参数值,值为0,是正确的      
+000000DC:   E504        LDI     R16,0x54  /////////      
+000000DD:   E010        LDI     R17,0x00  ////////R17,R16的值是第一个参数值,为0x0054!      
+000000DE:   940E0E0C    CALL    0x00000E0C      
1: 更奇怪的是我加了一句void(*key)(void*pt);
    key=key_sCAN;
无论key_sCAN函数放在那个位置,其结果都是0x054!



专家
2022-08-20 15:46:27     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]