完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,看来XC8很难为函数指针(在闪存中)生成正确的代码。当在一个.C文件中在闪存中形成列表或树结构并且访问它们的函数在anothe.C文件中时,就会发生这种情况。没有对函数进行编码(而是对NULL进行编码)(2)在另一个文件中的函数中没有生成间接函数调用的代码。XC8编译器似乎没有看到哪些函数在其早期传递时被间接调用,并且没有收集关于它们的数据。然后,它不对闪存中的数据结构中的函数地址进行编码,因此不会生成间接函数调用的代码。
|
|
相关推荐
8个回答
|
|
嗨,对项目的更多解释:完整的项目是状态机。状态机驱动程序函数位于一个单独的(库)文件中。描述状态机的数据是(1)RAM中的主头结构,(2)闪存中的其他结构和数组,通过指针链接。驻留在闪存中的这些结构包含指向函数的指针,当状态machive执行从一个状态到另一个状态的转换时,应该调用这些函数。所有这些结构都定义在另一个单独的C文件中。解决方法是在单独的C文件中包含状态机驱动程序,该文件包含指向函数的文件。“不正确使用‘外部’函数命名约定”是什么意思?
|
|
|
|
记住你在编码什么。它是一个PIC 8位核心。编译器的默认模式是编译堆栈,没有重新排序。这是因为芯片没有参数堆栈指针和。有限的HW调用堆栈。取决于芯片大小两个级别。编译器是一个较老的ANSI版本。
|
|
|
|
…使用函数指针使得编译后的堆栈和其他优化更难正确工作,因为程序没有固定的调用树。
|
|
|
|
编译器同时处理所有源FIE(包括库文件),因此在另一个文件中不太可能是原因。它可能是别的东西,但没有代码我不能说。可以检查汇编列表文件中的每个指针的指针目标。更多信息请参阅用户指南中的(Rev E)4.4.5指针参考图。只需小心优化冗余代码。
|
|
|
|
我在这里附上了一个演示这个问题的示例项目。更多的解释是在开始.C.P.S.论坛软件拒绝附件。我把它上传到Dropbox代替:链接
|
|
|
|
附件不起作用,我的SIG中的链接可能会有帮助。
|
|
|
|
我编辑了我以前的帖子,并添加了一个链接到Dropbox:链接。
|
|
|
|
谢谢你的计划。我能够再现您所看到的内容。看起来group_s0(group_s0.tr)的tr成员的内部符号在“.”情况下是复制的——您可以在程序集列表文件的指针引用图中看到这一点。一个实体没有目标,另一个有你期望的目标。看起来编译器已经选择了没有目标的实体,并且它已经传播到编译器,认为没有初始化“a”函数指针。我不能建议为什么移动SM_Machine()函数会有所不同,但目前看来这是一个很好的解决办法。我将编写一个bug报告,但我强烈建议您联系支持,以便您的详细信息能够与此报告正确关联。请提一下这个论坛thj.jf。
|
|
|
|
只有小组成员才能发言,加入小组>>
5053 浏览 9 评论
1938 浏览 8 评论
1877 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3094 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2161 浏览 5 评论
602浏览 1评论
470浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
321浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
497浏览 0评论
404浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-11 08:16 , Processed in 1.200629 second(s), Total 90, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191