完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我有一个有趣的小问题。我曾经为PIC16FJ128GC010使用xc16 v1.1(用于窗口)开发代码,最近尝试切换到更新的编译器xc16 v1.32B(用于linux)。当我编译我的旧源代码(连同对.gld链接器脚本的相关更新)时,我注意到我的代码不再在我的PIC上工作。ore调用main,但之后调用main(随后是标准重置)。而旧的代码当然初始化了所有静态,并相应地初始化了全局,然后调用main。你知道这里会发生什么吗?感谢你,所以仍然与这个bug斗争。这里是C运行时启动的重新安装部分,在复位后调用。(通常假设它在调用main之前进行堆栈/帧ptr设置、PSV设置和一些静态/全局内存值设置)在上面的代码中,我可以告诉您_psvinit在w0中返回0,而_crt_startmode在w0和w1中返回0x0。此外,我的代码从0x1800开始,因为我在前面的内存页中写了一个引导加载程序(我知道Works)。在这个代码中,您可以看到main在任何data_init发生之前被调用,而在main被调用之后被中断/重置。因此,我认为这与作为libpic30-elf.a库文件的一部分的CRT函数(C运行时设置)的改变有关。查看旧链接器脚本和新链接器脚本,我发现V1.32B允许指定CRT对象文件,提供的脚本使用位于libpic30-elf.a文件.a文件中的crt0_extended24.o&crt1_extended24.o objet文件。我试着将其切换到crt0&crt1的其他非扩展或泛型版本,但是保持对_u reset的未解析引用,即使当我使用xc16-objdump转储符号表时,u reset符号在我指定的所有对象文件中。我还尝试使用编译器选项传统LIBC编译遗留LIB,但仍然不工作。我还尝试编译所有的勘误表的东西打开,并仍然得到相同的CRT代码。这是我的构建字符串:有人有什么想法吗?谢谢!
|
|
相关推荐
2个回答
|
|
好的,所以我还没解决这个问题。但是重新评估新代码的分解组件。它实际上应该工作,虽然它更混乱,然后旧的拆解代码。在旧代码中,它非常简单:init堆栈/帧ptrs、init PSV、init data mem、call main。在新版本中,它执行了一些额外的测试,但是如果我仔细评估它,它实际上首先调用数据init,然后应该jmp调用main。这是因为如果my_crt_start_mode函数总是返回零(这是因为我在重置之间不共享内存值)。那么我不接受非零分支。这意味着W1和W0寄存器分别加载一个非零值和零值,并且我的IOR(包括OR)将通过清除我的零标志来响应,因此我在0x1826的零分支不会触发,允许我的rcall到数据init func成功。然后在几个分支之后,主叫,然后重置……丑陋,但它应该工作。现在,我想知道为什么这么丑陋?
|
|
|
|
解决了。这和我的构建选项有关。上面的构建线是我的下一个尝试。以前我有一些其他的垃圾,我怀疑这就是引起问题的原因。
|
|
|
|
只有小组成员才能发言,加入小组>>
5183 浏览 9 评论
2005 浏览 8 评论
1932 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3178 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2229 浏览 5 评论
739浏览 1评论
624浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
510浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
637浏览 0评论
535浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 15:17 , Processed in 0.960864 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号