[PIC®/AVR®/dsPIC®产品]

求教:在XC8中内嵌汇编如何引用局部变量

[复制链接]
3680|12
手机看帖
扫描二维码
随时随地手机跟帖
zhimagod|  楼主 | 2014-11-20 10:56 | 显示全部楼层 |阅读模式
问题是这样的:
我写个一个函数,用到了嵌入汇编
asm("swapf _var,f");
这里如果这个var是全局变量的话可以直接加下划线来引用,但是如果这个变量定义成局部变量就不知道怎么办了,求指教。
我只知道在PICC中应该是asm("SWAPF Fun@Var,f");//其中Fun为当前函数名,var是在当前函数中定义的变量。
zhimagod|  楼主 | 2014-11-20 16:39 | 显示全部楼层
千斤顶

使用特权

评论回复
zhimagod|  楼主 | 2014-11-21 10:16 | 显示全部楼层
支个招啊大家~~小弟拜谢拉~~
xc8的Compiler Manual翻了几遍了还是没找到该怎么弄,惆怅啊

使用特权

评论回复
yewuyi| | 2014-11-21 11:38 | 显示全部楼层
只要在局部变量的作用域里面,都应该可以用这个加下划线的方式引用。

使用特权

评论回复
zhimagod|  楼主 | 2014-11-22 08:06 | 显示全部楼层
yewuyi 发表于 2014-11-21 11:38
只要在局部变量的作用域里面,都应该可以用这个加下划线的方式引用。

叶老大你好!谢谢你的帮助!
不过我试了直接加下划线的话提示未找到变量呢
而且我试着定义成static的也提示未找到变量
这样必须定义成全局的吗?
不想定义成全局的,觉得那样的话浪费内存而且全局变量满天飞感觉也不是好事。
不知叶老大有办法帮我下吗?

使用特权

评论回复
yewuyi| | 2014-11-24 09:08 | 显示全部楼层
zhimagod 发表于 2014-11-22 08:06
叶老大你好!谢谢你的帮助!
不过我试了直接加下划线的话提示未找到变量呢
而且我试着定义成static的也提 ...

C语言是按照文件编译的,一般的C编译器只能在文件内做到编译优化。

PICC可以做到一定的跨文件编译优化,你可以在某个C文件定义一个作用域在该文件的变量,然后只在该文件引用,这样也许可以。

使用特权

评论回复
yklstudent| | 2014-11-24 13:43 | 显示全部楼层
整个函数都整成汇编,变量定义也是汇编,不知道楼主这样行不行

使用特权

评论回复
XIEYUANBIN| | 2014-11-24 16:31 | 显示全部楼层
一般只支持全局变量,特**来的C,DEBUG时连局部变量都没得显示了。

使用特权

评论回复
zhimagod|  楼主 | 2014-11-24 17:31 | 显示全部楼层
yewuyi 发表于 2014-11-24 09:08
C语言是按照文件编译的,一般的C编译器只能在文件内做到编译优化。

PICC可以做到一定的跨文件编译优化, ...

叶老大,您说的话是这样理解的,看下是不是这个意思呢:
如果一个项目中只在文件F内定义了A这个变量,F文件内又只有一个函数S的话,那么A在占用内存方面就跟定义在S内部差不多了对吗?
呃,另外我用的是XC8,不知道跟PICC有没有什么区别

使用特权

评论回复
zhimagod|  楼主 | 2014-11-24 17:32 | 显示全部楼层
yklstudent 发表于 2014-11-24 13:43
整个函数都整成汇编,变量定义也是汇编,不知道楼主这样行不行

方法应该是行的,但是……楼主不行啊,楼主目前木有写整段汇编函数的能力啊:'(
好吧我去面壁~:shutup:

使用特权

评论回复
zhimagod|  楼主 | 2014-11-24 17:33 | 显示全部楼层
XIEYUANBIN 发表于 2014-11-24 16:31
一般只支持全局变量,特**来的C,DEBUG时连局部变量都没得显示了。

哦,看来就是这个样子了,多谢谢老师!:P

使用特权

评论回复
liu0000feng| | 2015-4-23 17:10 | 显示全部楼层
头文件定义都不一样!

使用特权

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

本版积分规则

个人签名:○●●○○○●●○ ●○○●○●○○● ●○○●○●○○● ●○○●○●○○● ○●●○○○●●○

15

主题

384

帖子

1

粉丝