发 帖  
原厂入驻New
[问答] 使用共享内存和指针操作变量PIC16F1847出现问题怎么办
66 PIC 内存
分享
嗨,我写了一些代码,使用共享内存和指针操作变量PIC16F1847。然后一些问题出现了:1 -高和低将返回线性ADRSSSS,我猜…???2——如果在共享内存中放置变量,如果高和低只返回线性地址,我将如何找到它?谢谢你的任何信息。
0
2020-5-14 11:22:21   评论 分享淘帖 邀请回答

相关问题

19个回答
高、低运算符为数据存储器返回线性地址。共享内存是线性数据存储器的一部分。
2020-5-14 11:37:02 评论

举报

在汇编程序的地址中没有变量。同样的地方可以通过银行或者通过线性空间来解决。即使它们指向同一个地方,它们也是不同的地址。例如,0x20和0x2000指向相同的位置。因此,0xA0和0x2050.SFRS和共享内存只能通过银行来处理,而不是通过线性空间来处理。然而,它们可以通过FSRS来解决。“高”/“低”在地址上运行。高是简单的(ADDR & GT;8)和低IS(ADDR &&0xFF)。无论哪种方式,如果你把高到FSRXH和低到FSRXL,它将工作,不管它是否在线性空间中。有一个例外,如果地址在程序存储器中,编译器可以将“高”的MSB设置为1。
2020-5-14 11:49:43 评论

举报

谢谢大家。还记得我们谈到的增强型设备吗?我想使用完全可重定位的代码,所以我不知道变量的地址(或者0x0xxx或者ox2xxx)。但是对于上面我所看到的,为了增强型,我不允许在SFR共享内存空间中使用指针。那么,如果这是真的,高和低应该返回线性地址,不是吗?如果不能使用返回的地址,就没有意义了…
2020-5-14 12:06:11 评论

举报

我们知道,在UDATA保留的符号的地址在汇编时不知道。SFRS的地址是固定的和已知的。UDATA_SHR所保留的共享内存符号的地址位于0x70到0x7F,并且可以从任何银行访问。当然,指针(FSRx)可以用来访问SFR和共享内存空间。正如我前面提到的,HIGH和LOW操作符不返回数据存储器的线性地址。
2020-5-14 12:20:53 评论

举报

好啊。谢谢。我对那些线性存储器很失望。它没有办法保留内存,也没有办法获得保留内存的地址????我看到一个16F1847:->LINEARMEM NAME=linear0 START=0x2000END=0x23EFPROTECTED的链接器指令,它的用途是什么?也许有一个UDATA线性或类似的对象?
2020-5-14 12:27:36 评论

举报

只要确保必须位于线性空间中的变量由链接器在该空间中分配,即,将它们放在“linear0”页中,而不是“gprxx”库中的一个。问题解决了。(检查16F1847的链接器文件在C:\Program Files(x86)\Micro.MPLABXv3.15 \MMPASMX\LKR\16F1847μg LKR)
2020-5-14 12:39:18 评论

举报

很高兴他们最终把它添加到链接器文件中。这让我想起了这个:HTTP://www. McCHIP.COM/FUMMS/M50947.ASPX
2020-5-14 12:57:44 评论

举报

此外,阅读MPASM/MPLINK用户uide.C:Program Files(x86)\Micro.MPLABXv3.15mpasmxdocsMPASM_MPLINK_User_..pdfSpecific.:11.5MEMORY区域定义和11.6LOGICAL SECTION定义可能有所帮助。
2020-5-14 13:08:09 评论

举报

实际上,我从来没有这样做过,而且手册似乎并没有贯穿整个过程。链接器脚本中的条目意味着它应该是容易的,但不能填充所有的点……(我移动到C同时移动到增强的中程,所以永远不用担心这一点)。
2020-5-14 13:25:05 评论

举报

我还不清楚。是否有标准的方式(不是修改的脚本或书呆子技巧)在线性存储区域中保留内存?笔直而优雅的东西。MyOraceNo.DuaTaaLyMyMySythRo.R.500,让MPASM做安全预订吗?
2020-5-14 13:31:59 评论

举报

事实上,我还没有使用增强型中档设备。试试这个:
2020-5-14 13:44:16 评论

举报

我尝试了手册中显示的内容,但这不是解决方案,因为区段名称只能使用一次,但我有许多文件(库),其中我想使用线性内存。如果在数学库中使用线性,我不能在字符串库中使用它。而且我们不想编辑链接器脚本,这是不明智的。最好MPASM实现UDATA_LINEAR指令,没有限制,不是吗?
2020-5-14 13:57:06 评论

举报

节名只能在每个文件中使用一次,因此可以在数学文件中使用线性0,并在字符串文件中使用。
2020-5-14 14:15:55 评论

举报

嗨,一号和0号,你确定吗?你试过了吗?在单独的include文件中重复名称在这里不会链接……同样,似乎我们需要一种指令UDATA_LINEAR,或者一些简单的东西来模拟它。
2020-5-14 14:22:28 评论

举报

根据我对浮动模式的理解,我有99.99%的把握。:)可重定位模式的一个特点是,标签名称可以在不同的模块中重用,只要它们不被用作全局入口点。使用全局和外部指令来创建和引用模块之间的标签名。如果你仍然不能让它工作,邮寄或附加你的文件在这里,评论什么问题,并解释你想要什么。
2020-5-14 14:30:47 评论

举报

是否尝试在不同的包含文件中重复数据段名称并链接?不在这里!给出链接错误[154]D:MPLABXTERMOCLOCK16F1847.XBASIC_MATHS.INC 5:每个对象文件区段必须是连续的(区段LINEAR0),并且记住我们不想放任何地址,让链接器选择它们……
2020-5-14 14:46:45 评论

举报

隐马尔可夫模型。。。没有看到你的档案,让我拿出水晶球。您的BASIC_MATHS.INC有一个名为LINEAR0的部分,另一个名为LINEAR0的部分包含这个数学文件,对吗?不要在包含文件中保留变量。你的Basic?Math..c文件里有什么?
2020-5-14 14:53:28 评论

举报

Hi查看错误消息,“BASIC_MATHS.INC”是一个ASM源文件,至少具有RAM分配(res),可能还有代码。它看起来像通常混乱的“绝对定位asm”结构(包括源文件)和“可重定位asm”内存分配和编码。我们不包括代码或变量分配,只包括定义和宏。链接器将加入这些部分,就像它和“C”这样的编译语言一样。只要我2美分……最好问候Jorge
2020-5-14 15:12:20 评论

举报

不,我有一个主文件和几个包含文件(用作库:数学,LCD,I2C等)。每个include文件都有自己的数据部分,完全可重定位,以及相关的asm代码。include文件可以调用任何其他包含但不在主文件中的例程。它们不包括更多的文件,这很好。问题是如何更新它们以与线性内存一起工作,因为我们没有UDATAAL线性数据保留指令。清楚吗?
2020-5-14 15:29:51 评论

举报

只有小组成员才能发言,加入小组>>

108个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表