打印

函数调用问题

[复制链接]
5605|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ruiwei0201|  楼主 | 2008-8-4 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我调用函数的过程,编译时会出现error C212:indirect call:parameters do not fit within registers的错处,哪位知道是什么原因啊?

#define  P2   ((unsigned char data*)(0x1b))
#define  P3   (*((unsigned char data*)(0x0B)))
void Func1(void)
{
    word xdata P1,x;
    x = ((byte(code*)(byte*,byte *,byte))0xFF00)((byte*)P1,P2,P3);
}

相关帖子

沙发
dld2| | 2008-8-4 14:31 | 只看该作者

玩得真花

使用特权

评论回复
板凳
三块石头| | 2008-8-4 14:43 | 只看该作者

P1、P2、P3寄存器名,貌似不能再用define重定义了

LZ确实玩的够花

使用特权

评论回复
地板
ayb_ice| | 2008-8-4 15:40 | 只看该作者

這有實際意義嗎

使用特权

评论回复
5
ruiwei0201|  楼主 | 2008-8-4 16:29 | 只看该作者

不要把别人的问题都想的那么弱智。

没有实际意义我拿上来逗你们玩啊?

使用特权

评论回复
6
ruiwei0201|  楼主 | 2008-8-4 16:37 | 只看该作者

P2,P3是要重定位变量

P2,P3原本是一个函数中全局变量,只是要在另外一个函数中用到,而这个函数是在另外的工程里编译的,所以要对全局变量定位的。。。

使用特权

评论回复
7
xwj| | 2008-8-4 17:27 | 只看该作者

为什么要用P1、P2、P3这些寄存器名???

使用特权

评论回复
8
ruiwei0201|  楼主 | 2008-8-4 18:05 | 只看该作者

不好意思,我是简单写了

实际上我要写的Para1,Para2,Para3

使用特权

评论回复
9
ayb_ice| | 2008-8-5 08:28 | 只看该作者

即使是全局變量也沒有必要用直接地址操作

你的方法理論上是可以的,好象細節不對
把p123的地址定義遠些試試...

使用特权

评论回复
10
ruiwei0201|  楼主 | 2008-8-5 09:32 | 只看该作者

我怀疑可能是参数传递规则的限制所致

使用特权

评论回复
11
tonylulu| | 2008-8-5 09:53 | 只看该作者

re

通过一个指针间接调用了一个未知的函数名(比如0xFF00被强制转化成的函数入口),是不能含有实际参数的。
看keil在线帮助
http://www.keil.com/support/man/docs/c51/c51_c212.htm

使用特权

评论回复
12
ruiwei0201|  楼主 | 2008-8-5 10:03 | 只看该作者

没大看懂

貌似keil在线帮助上说的是,当所有参数都能用寄存器正确传递是,可以带参数

使用特权

评论回复
13
tonylulu| | 2008-8-5 10:12 | 只看该作者

没错

而0xFF00转成的函数,没有在编译器中编译过,不知道如何传递参数到R0--R7吧。
我的理解

使用特权

评论回复
14
ruiwei0201|  楼主 | 2008-8-5 10:28 | 只看该作者

看来这种方法行不通,要换个思路了

使用特权

评论回复
15
ayb_ice| | 2008-8-5 11:15 | 只看该作者

我認為還是沒有必要搞

使用特权

评论回复
16
ruiwei0201|  楼主 | 2008-8-5 12:47 | 只看该作者

楼上为什么这么说?

使用特权

评论回复
17
李冬发| | 2008-8-5 12:53 | 只看该作者

还真是弱智!除非你是要调用现成的2进制代码,否则没有必

使用特权

评论回复
18
ruiwei0201|  楼主 | 2008-8-5 14:05 | 只看该作者

楼上的,我不想跟你争口舌

没有建议和意见也别侮辱人,积点口德对你没坏处!

使用特权

评论回复
19
ayb_ice| | 2008-8-5 14:58 | 只看该作者

回16l

因為參數傳送可以用其它方法間接實現(比如用全局變量).
我相信任何人的項目是不可能大量使用這些不正規的方法(偶爾使用可以達到高效),針對不正規的做法就用不正規的方法對付...

使用特权

评论回复
20
ruiwei0201|  楼主 | 2008-8-5 15:42 | 只看该作者

19l我明白你的意思

我的情况你不大了解,现在我有两个工程,暂且叫他工程1,工程2。
工程1已经定版了,也就 是说不会有改动,工程2可以有变化,但是要调用1中的某些函数,而且也会用到全局变量。所以现在就是工程2调工程1里的函数,而函数的参数是全局变量。

使用特权

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

本版积分规则

28

主题

149

帖子

0

粉丝