完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我怀疑XC32编译器中有错误。这与版本1.42有关,我使用了PIC32MZ2048EFH100。效果如下:在中断时,偶尔会出现异常错误。“代码5存储地址错误”分析显示堆栈指针SP位于不正确的地址。该错误是由中断头生成的。浮点寄存器的内容通过SDC1汇编命令存储在堆栈上。但是SDC1只能处理双字对齐。反汇编MBLY:T8YBASTtiON Service RDPGPR SP,SP MFC0 K1,EPC MFC0 K0,SRSCtl。SW A0,28(SP)SW AT,16(SP)<——工作;自然对齐的SDC1 F19,240(SP)<——在(例如)0x9d021094上失败;必须加倍字对齐的SDC1 F18,232(SP)。来源:void_ISR(_TIMER_8_VECTOR,单个)T8_inter._Service(void){...IFS1CLR=_IFS1_T8IF_MASK;}根据堆栈指针中的地址,会发生错误。当然,只有在编译器中释放硬件浮点选项时才会发生错误。但是,这就是浮点单元的含义。编写了《MIPS∈程序员体系结构手册》:限制:如果EffectiveAddress2..0_0(没有双字对齐)发生地址错误异常。如果选项no_fpu在中断定义中使用,则异常“Code 11 Coprocessor unusable”会在一段时间后出现。即使在中断服务例程中没有执行浮点操作。这似乎不是一个解决办法。有人有过类似的经历吗?谢谢你的回答
|
|
相关推荐
8个回答
|
|
我使用PIC32 MZ2048 EFH144没有FPU和和声V1.08,刚搬到V1.09我没有看到任何异常例外。是否尝试调试异常?找出引起它的代码行吗?
|
|
|
|
在MZEF上,堆栈框架应该始终是16字节对齐的(sp 3..0=0)。您不会显示用于sp操作的代码(应该类似于)在您的代码(或者更可能的库函数)的某个地方,向sp添加了多个16,导致此异常。尝试为项目寻找“$sp,$sp”的S文件,并检查所添加的值是16的倍数。
|
|
|
|
无论FPU是否被使用,堆栈总是需要双字对齐。编译器将计算函数需要多少字节,加上额外的填充以弥补8字节对齐。如果您认为您的问题是由于不正确的堆栈对齐造成的,那么可能的罪魁祸首是项目中有一个程序集函数,该函数通过执行以下操作来破坏堆栈对齐:
|
|
|
|
在启用FPU的情况下,额外的寄存器必须被保存到EASCH入侵的堆栈中。这就是为什么我禁用它。我没有看到足够的证据证明编译器提供的信息有问题。这总是可能的。您确定没有通过指针传递的字节声明为单词或dword吗?你有非微芯片ASM代码吗?
|
|
|
|
|
|
|
|
这将是一个费时的问题,应该张贴在那里。
|
|
|
|
这不是编译器中的错误。它不能在编译时确定运行时变量的值,并且每次访问堆栈时都进行检查会降低性能。
|
|
|
|
碰上这个,说声谢谢!这个周末我在努力解决我的问题。我终于把我的问题跟踪到足够低的程度,来理解上下文切换的问题。然后在寻找这个之前进行SRS配置。设置:XC 1.42,PIC32 MZ2048 EFH100,MPLABX 3.40(OSX),FreeRTOS 8.2.2
|
|
|
|
只有小组成员才能发言,加入小组>>
5163 浏览 9 评论
2000 浏览 8 评论
1928 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3174 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2226 浏览 5 评论
733浏览 1评论
615浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
505浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
631浏览 0评论
528浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 01:03 , Processed in 1.398529 second(s), Total 92, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号