发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] XC8错误1513是什么意思?
99 PIC18 MPLAB
分享
我为PIC18F27 K40编程,使用XC8 1.42,MPLAB X 3.61,PICtiT3。错误在上下文中没有多大意义,表现为:修改不同模块中的不相关代码后出现的错误。违规行显示为:从xc8 1.42自述文件中:(1513)指针“*”的目标“*”不在由*(代码生成器)指定的内存空间中。这个赋值可能向与内存空间指定符冲突的指针分配地址。我不理解这个错误意味着什么,任何洞察力/故障排除都是值得赞赏的!
0
2019-11-11 08:56:42   评论 分享淘帖 邀请回答
13个回答
Hiby看起来,指针没有正确初始化。它们看起来指向(null),至少是编译器看到的。
2019-11-11 09:04:50 评论

举报

嗯,我决定把变量声明和赋值分开:但是变量声明仍然是令人不快的行。这意味着什么?
2019-11-11 09:19:36 评论

举报

HIHY指针位于“Y-RAM”空间,但“GrAMRAMPULL”怎么样?编辑补充:回到你的第一篇文章。你似乎最上面有一个缺失的“;”在评论里看起来它最终被收录了。
2019-11-11 09:37:26 评论

举报

它被声明为:我不认为这是问题,其他函数有类似的指针,不会发出错误。WgtDelay的结构是如何抱怨队列成员的呢?它不明白问题是什么。在这个问题之前,我得到的错误是:但是“l_flashData”位于一个完全不相关的模块中,这个函数甚至看不见。(和“LFlash数据”是ROM中的一个常数数组),我决定取出Y-RAM RAM限定符,并编译并正确运行。我只是担心,因为我相信错误是由编译器生成的。好主意,但它实际上是一个函数的开头,我只是不能包括整个函数的源代码。我很烦恼这个函数会发出错误,但它是补充“Ram_Malloc”,它在指针上使用_u ram限定符,根本不发出任何错误。非常感谢您对此的考虑!我真的很感激你的想法!
2019-11-11 09:52:37 评论

举报

嗨,这个消息是说你告诉编译器这些指针将只包含RAM中对象的地址,但它已经检测到不在RAM空间中的目标(地址)。冒犯目标的名称已经被打印为空字符串,这表明目标是一个没有可用C标识符的内部对象。该名称不指示空指针;编译器将知道这些地址不指向任何地方。编译器将跟踪所有指针分配,因此除非我们能够确定ptr的目标列表,否则很难说什么会导致该地址和以下行上的消息。在函数RAMYLIVE()中的指针定义和ITSPTR参数是下面使用的相同变量吗?如果是这样,那么函数的所有参数是什么呢?如果你在整理这个问题上有困难,我建议你把展示这个问题的完整项目发给Micro..,并附上你看到的相关细节。
2019-11-11 10:07:26 评论

举报

谢谢你,杰夫,这有助于我更好地理解错误信息!我将通过什么来确定目标列表?这些指针定义位于RAMEFILE()内,它的PTR参数与下面使用的变量相同。Ram_Free()只有一个参数:我肯定在解决这个问题时遇到麻烦,临时的修复方法只是取消_ram限定符。我会考虑发送到Microchip的支持。谢谢你的帮助!
2019-11-11 10:16:27 评论

举报

为什么需要RAM限定符?编译器将选择正确的大小指针(不确定它是否在空闲模式下,但它将以付费模式)。
2019-11-11 10:30:58 评论

举报

我想我不需要RAM限定符,但是从以前的经验我需要ROM的。ram限定符很好地提醒了它存储在哪里(有点像在不是常量的情况下向常量传递指针)。当然,我没有打扰括号的情况,所以我不需要它们。
2019-11-11 10:42:27 评论

举报

XC8不需要内存特定指针。您确定它们正在帮助吗?在旧的高科技中,他们有时会帮忙。
2019-11-11 10:55:49 评论

举报

程序集列表文件有一个指针引用图(在文件中搜索“Po.List with Targets:”),但是该文件是由汇编程序生成的,所以应用程序必须执行才能看到这个。您可能需要调整代码以使其生成。在<proj dir>/dist/default/production目录中查找扩展名为.lst的文件(如果您具有默认配置并单击了构建(而不是调试)按钮)。然后查看用户指南中的指针引用图部分。当然,该函数只有一个参数ptr,但是对该函数的每次调用都会向该参数传递不同的参数。你是说函数只是从源中的一个位置调用的吗?最后,你真的需要指针说明符吗?您将使用它们作为验证代码的行为的安全性。
2019-11-11 11:04:11 评论

举报

嗯,也许它们不是必要的。在我意识到默认情况下常量指针指的是闪存,而非常量指针指的是ram之前,我有必要这么做。当然,您可以有一个引用ram的常量指针(仅通过使用const in t_ram*),但是由于项目仅由我操作,所以我决定所有ram位置都是非常量的,以确保不会错误地将rom地址分配给ram指针等。程序集列表文件有一个指针引用图(在文件中搜索“Po.List with Targets:”),但是该文件是由汇编程序生成的,所以应用程序必须执行才能看到这个。您可能需要调整代码以使其生成。在<proj dir>/dist/default/production目录中查找扩展名为.lst的文件(如果您具有默认配置并单击了构建(而不是调试)按钮)。然后查看用户指南中的指针引用图部分。谢谢您,很抱歉没有早点回来。我将进一步研究这个问题,因为我有更多的时间。当然,该函数只有一个参数ptr,但是对该函数的每次调用都会向该参数传递不同的参数。你是说函数只是从源中的一个位置调用的吗?啊,现在我明白了。该函数只在源6个位置调用,并且其中只有一个抛出错误,但实际上不应该这样。我相信这就是所有需要的上下文:编译器在WgtDelay的成员“outQueue”上抛出错误1513,但我不知道为什么,在传递参数outQueue的WgtDelay_Cleanup()中在哪里调用Ram_Free()。通过从WGTLID::UnSeQue2中删除“Y-RAM”限定符,就可以了。但是Ram_Free()例程仍然在其本地堆栈中的每个ram指针上抛出错误1513。我不知道为什么l_flashData被报告为ram指针的目标,在文件系统的模块中根本没有引用ram管理器例程。我确信仔细阅读指针引用图将给出答案一些见解,所以我会尽快看看。谢谢您!
2019-11-11 11:17:54 评论

举报

指向const的指针只不过是编译器不会修改指针的目标的保证。它没有说明这些目标的位置。如果希望确保指针不能用于修改目标,则将其作为指向const的指针;如果通过指针进行写操作,则不要使用const。当指针是数组的元素或结构的成员时,事情就变得棘手了。您可能会发现,在此类对象中定义的指针获取未直接指派给指针的目标。以包含指针的相同结构的两个实例为例,这两个成员指针实例具有不同的目标。如果现在有一个指向这种类型的结构的指针,那么可以使用这个指针来访问那些结构实例和那些结构中的指针成员。因此,编译器可以生成代码来通过结构指针解除对结构成员指针的引用,两个结构成员指针的目标是共享的,因此它们对于两个实例都是相同的。我不会太在意追踪每一个目标。杰夫。
2019-11-11 11:28:13 评论

举报

在C cost中表示您保证不会更改它。在XC8中,在Flash中放置了一个定义为const的变量。您不必担心指针指向的是什么,即Jeff的作业。如果您认为指针会使代码更快,那么您可以告诉编译器指针只用于一件事情或者更小,需要这个。另一方面,你正在做自己的额外工作。指向const的指针可以用于RAM或闪存。它保持C的意思。
2019-11-11 11:46:48 评论

举报

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

71个成员聚集在这个小组

加入小组

创建小组步骤

关闭

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

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