c的形参问题

[复制链接]
2822|8
 楼主| 472666GAQ 发表于 2010-1-10 06:58 | 显示全部楼层 |阅读模式
为什么形参没法用xdata定义   比如说void  delayus(xdata x)  这样为什么不行呢
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)
原野之狼 发表于 2010-1-10 15:47 | 显示全部楼层
参数位于栈上 所以不需要做XDATA声明
原野之狼 发表于 2010-1-10 15:48 | 显示全部楼层
参数位于栈上 所以不需要做XDATA声明
xlsbz 发表于 2010-1-11 11:49 | 显示全部楼层
形参也不一定是都是寄存器。

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

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

应该说 参数位于栈上 所以做XDATA声明是错误的
冷漠 发表于 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

查看全部评分

冷漠 发表于 2010-1-11 14:30 | 显示全部楼层
本帖最后由 冷漠 于 2010-1-11 14:35 编辑

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

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

285

帖子

2

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