共3条
1/1 1 跳转至页
这个参数总是传不对,是不是编译器有问题?

问
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!
主程序调用函数
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!
共3条
1/1 1 跳转至页