完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,我有一个非常简单的问题,但是答案很难找到。有没有办法确定一个函数是否从带有PIC32MZ的ISR调用?我查看了FRM部分8,但没有得到相关的信息。谢谢。
|
|
相关推荐
10个回答
|
|
其他人可能有更好的答案,但应该有一些方法来做。一个是检查调用堆栈,看看返回地址是否在ISR内部。不过,使用GigalFrand可能会更容易做到这一点。
|
|
|
|
如果当前优先级为0,则可能处于ISR中。原子计数器变量也可以完成这项工作。
|
|
|
|
我没想到…我会优先考虑。我不能使用全局变量或原子计数器,因为我使用插装函数,并且enter回调在函数的第一行之前执行。这个想法是概要介绍我的应用程序,并分开中断和常规执行的跟踪。在通过读取CP0的寄存器对其进行测试之后,我不确定正在读取哪个寄存器。我用和谐的PLIB读取寄存器,函数是PLBIGITIN CPUCurrrPrimRosialLeIGET(ItIn IDO0)。谢谢。
|
|
|
|
当前的IPL在CP0.状态寄存器中找到。你如何处理这些函数,并且它能处理ISR,它已经有一个编译器生成的序言?
|
|
|
|
@MickaP,据我所知,您可以从中断服务例程上下文和应用程序上下文中调用函数。在大多数嵌入式系统实现中,这是无法复制或发现的间歇性bug的处方。您可能希望修改ISR实现以避免此类问题。
|
|
|
|
Hiif你只需要给函数增加一个额外的整数(字节)参数。用参数设置为1,从ISR内部对调用进行编码,用参数设置为0,用常规代码对调用进行编码。这样,函数代码就可以知道它被调用了。无论如何,我订阅Dan所说的,共享函数一个ISR和主代码是一个很好的解决问题的方法。
|
|
|
|
可能在函数中添加一个信号量,并在已经设置信号量时跳过所有(返回false)。可能会有帮助。
|
|
|
|
有趣的是,找出函数做了什么,为什么它需要知道它是从ISR调用还是不调用。
|
|
|
|
最好在主循环中使用函数,只能从中断中获取NECESRY信息。
|
|
|
|
AdErsM:我用编译器选项——FiTrimPrices函数来编写代码。基本上,它为每个函数添加了回调和退出回调。经过测试,它可以与ISRS一起使用,只有一个功能在ISR和主回路之间共享。此函数在环形缓冲区中添加事件,然后事件稍后进行。这个想法是对代码进行配置,所以我将分析分为两部分:常规代码和ISRS代码。系统测量每个函数的执行时间和调用次数。
|
|
|
|
只有小组成员才能发言,加入小组>>
5248 浏览 9 评论
2036 浏览 8 评论
1956 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3217 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2264 浏览 5 评论
782浏览 1评论
676浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
602浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
684浏览 0评论
581浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 15:20 , Processed in 1.571790 second(s), Total 97, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号