完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我搞不清楚在XC8汇编模块中如何声明对简单单字节的预订。我认为它应该很简单,就像英寸线上的“(800):未定义的符号“myVar”这样的错误。我看到过许多不同的片段和建议,它们使用了“equ”(在绝对模式下),DB。(我不明白这是怎么回事),提到“乌达塔”和“乌达塔什尔”,但我不确定。第二个问题是:我希望我的变量在访问RAM中。根据XC8用户手册,这就是“普通”类。但是,在PSETCT声明中替换普通数据会产生语法错误。我错过了什么?
|
|
相关推荐
19个回答
|
|
|
在CPSECT BSS0,局部,类=BAN0,空间=1UDATATANGO DDS 2MOVWF TangOWHAT AM,我是否丢失了?文档。在一天结束的时候,如果你想学习,为什么不尝试16位和更高的ASM。8位是可怕的。
|
|
|
|
|
|
这也不能编译。事实上,XC8用户指南根本没有提到“UDATA”。
|
|
|
|
|
|
只是一段旧代码,udata未初始化。PSECT vari,local,class=dataloop8:ds 1PSECT xxxx,local,class=CODE,delta=2bankselloop8decfszloop8,f
|
|
|
|
|
|
|
|
|
谢谢。所以ds指令前面的标签是它的名称。最后一个问题:我们如何强制在访问银行中保留数据?同样的问题也用于在C文件中声明。
|
|
|
|
|
|
标签成为汇编程序和链接器的地址。您必须将类设置为在您需要的银行中。当您说用c声明时,您是指用c声明并以asm访问吗?int x=100;asm:movf_x,fC中的任何内容都应该对汇编程序可用,只要它是全局的,即不在诸如main的函数内。前缀是下划线char.c,用于评估asm,只要它是globl.extern无符号char循环8(如果它是全局的,但在本例中不是),我就会推荐16位或高位,因为需要处理太多的银行切换。
|
|
|
|
|
|
在XC8C代码中:将字符变量MyVar放置到PIC的访问(PIC18F)(或公共)RAM区域中。近乎限定符可以与大多数(任何?)使用。变量的类型。
|
|
|
|
|
|
嗨,我强烈建议你在C代码中定义变量而不是汇编。如果必须的话,你仍然可以在汇编中访问它们。如果要在访问库中放置对象,则需要使用近限定符,并指定要使用--ADDRQUAL选项(或与用户指南中指示的MPLLABXIDE等效)来遵守该限定符。OLE分配,而这一切都发生在汇编程序运行之前。为了让代码生成器考虑您在程序集中声明的任何内存,有一种特殊的方法来创建使用数据内存的psect。请参阅用户指南章节5.2.3.4绝对PSECTS。如果你不遵循这一点,那么你可能会得到“找不到空间”的错误。公共内存的类可以是COMMON或COMRAM,这取决于您的目标设备,我不能看到上面提到的。如果您不确定,请检查映射文件。请注意,如果没有太多公共内存,可能没有剩余给您。编译器将使用一些临时变量,并且可以使用剩下的任何变量。没有办法窃取这个内存并告诉编译器为其目的使用存储的内存。
|
|
|
|
|
|
杰夫,好建议。术语“公共RAM”是某人的回应,通常指PIC16F设备。原来的海报上写着“访问RAM”,意思是PIC18F设备,它通常有更多的备用:)
|
|
|
|
|
|
感谢所有的回复,其中每一个有价值的信息!从直觉上讲,只在程序集模块中使用的变量在同一个模块中声明似乎更合乎逻辑,不过我肯定会记住Jeff的建议。我把MPASM绝对代码改为XC8可重定位的原因正是因为Jeff提到的:对于我来说,很少有通用的RAM可用。当我在访问银行的绝对位置使用4字节的数据时,链接已经失败。现在,在使用“.”限定符时,我面临着一个问题。如果我像这样声明C和组装模块之间共享的单个字节:我已经遇到“错误:(1250)找不到变量_var1的空间(1字节)”,在访问库中使用绝对寻址改变这个会导致构建成功,但是:对此有解释/解决方案吗?
|
|
|
|
|
|
你还没有提到实际的目标设备是什么。
|
|
|
|
|
|
啊,是PIC18F,PIC18F66 K80系列。
|
|
|
|
|
|
这个家庭有96字节的访问RAM。你看过地图文件看看还有什么用吗?
|
|
|
|
|
|
编译器使用OCG不再编译文件。它可能是完整的。这个工作不稳定的UIT88T VAR1@ 0x000;可能的危险。有人注意到有可能强迫与这个结构重叠吗?
|
|
|
|
|
|
我想是的。见下文。
|
|
|
|
|
|
MPASM绝对代码会让您对分配的位和字节有更多的控制。
|
|
|
|
|
|
我想是的。我并不是说你错了,但如果我再对几个变量重复这种结构,我就会得到链接器“无法为x字节找到空间”的错误。也许我的要求不像要求绝对放置那样严格,或者甚至要求在访问RAM中分配,但是我可以声明一堆变量吗?C中的LES至少应该包含在同一家银行吗?
|
|
|
|
|
|
我想是的。我并不是说你错了,但如果我再对几个变量重复这种结构,我就会得到链接器“无法为x字节找到空间”的错误。也许我的要求不像要求绝对放置那样严格,或者甚至要求在访问RAM中分配,但是我可以声明一堆变量吗?C中的LES至少应该包含在同一家银行吗?我的立场是正确的——它对0x000以外的绝对地址产生重叠警告。绝对地址0x000具有特殊含义:XC8用户指南中的http://www..hip.com/for./m951491.aspxSection 2.5.7“Ban.Data Objects”声明定位特定数据存储库中的变量尚未在MPLA XC8中实现。
|
|
|
|
|
|
啊,那是肯定的。很高兴知道。只要我在给定银行用ORG在我的ASM代码中声明一个绝对PSECT,至少编译器似乎知道我的请求,并且设法在稍后不引起错误的情况下实现它。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:25 , Processed in 1.648284 second(s), Total 109, Slave 92 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1391