打印

c的形参问题

[复制链接]
2445|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
ejack| | 2010-1-10 07:05 | 只看该作者
形参传递默认使用寄存器,内部存储空间。
如果想传递任意存储空间的变量,并且保障程序通用性,应使用指针。

使用特权

评论回复
板凳
红金龙吸味| | 2010-1-10 10:34 | 只看该作者
LS正解,默认是用R0~R7传参。

使用特权

评论回复
地板
古道热肠| | 2010-1-10 12:56 | 只看该作者
Xdata是变量所处地址的位置约束,形参关键是给出数据的类型。
比如SubFunc(unsigned char x ,unsigned int *puiTemp)

使用特权

评论回复
5
原野之狼| | 2010-1-10 15:47 | 只看该作者
参数位于栈上 所以不需要做XDATA声明

使用特权

评论回复
6
原野之狼| | 2010-1-10 15:48 | 只看该作者
参数位于栈上 所以不需要做XDATA声明

使用特权

评论回复
7
xlsbz| | 2010-1-11 11:49 | 只看该作者
形参也不一定是都是寄存器。

关键是形参必须在那128个字节 ,就是说关键是 51的堆栈区域是必须放到128个字节的。

就是说原野的狼 说的是对的。

应该说 参数位于栈上 所以做XDATA声明是错误的

使用特权

评论回复
8
冷漠| | 2010-1-11 14:02 | 只看该作者

用户要求,当然可以。

本帖最后由 冷漠 于 2010-1-11 14:17 编辑

可以的。只要在函数定义后面注明编译模式即可。假定文件模式选定默认 small  模式, 如果希望   delayus(int x)函数中所有变量分配在 xdata, 只要注明:

void  delayus(int x)large ;

要看到分配结果,注意:可能要把优化级别降到2以下。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
9
冷漠| | 2010-1-11 14:30 | 只看该作者
本帖最后由 冷漠 于 2010-1-11 14:35 编辑

当然,若选定全模块默认“large” 编译模式,void  delayus(int x)就无所谓注明large了(默认large)。这时即使6级优化,也能看到xdata的分配结果。

使用特权

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

本版积分规则

102

主题

285

帖子

2

粉丝