[国产单片机] 关于51单片机的long型的使用方法

[复制链接]
 楼主| 啥是arm 发表于 2013-7-26 11:38 | 显示全部楼层 |阅读模式
long add(long a, long b)
{
        return (a + b);
}

int main()
{
        long a = 1, b = 2;
        long (*padd)(long, long);
        padd = add;
        (*padd)(a, b);
        return 0;
}

程序提示..\SOURCE\MAIN.C(81): error C212: indirect call: parameters do not fit within registers
编译器是keil  用的stc12c系列的单片机
 楼主| 啥是arm 发表于 2013-7-26 17:02 | 显示全部楼层
说明一下 这个在VC++6.0的编译环境下就好使, 但是在keil下就不行, 如果不用函数指针,keil也一切正常,加上函数指针就不行了
ayb_ice 发表于 2013-7-29 09:54 | 显示全部楼层
xxx

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 啥是arm 发表于 2013-9-3 12:48 | 显示全部楼层
ayb_ice 发表于 2013-7-29 09:54
xxx

没看明白 麻烦讲讲怎么回事
McuPlayer 发表于 2013-9-3 21:32 | 显示全部楼层
函数指针的调用,Keil C51的实现是把调用一个库函数,把真正的函数做为参数传进去。
long是4个字节,2个lang就是8个字节,加上函数指针的2个字节(其实是3个字节,Keil用作类别区分),这样你一组寄存器才8个就不够用了。


方法:
1、不用long类型,用小的,比如int,char
2、减少参数,比如用一个long
3、牺牲效率,用固定地址传参数,ayb_ice上面有贴
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

181

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部