完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好。我最近的代码工作很好,但有时它的行为不确定。我需要你的建议,我已经实现的代码的关键部分,需要进一步修改。我使用PIC24F MCU.ValuyAyAtditTyx((中断,NoAuto Apple PSV))IIC1中断(空隙){CAP1= IC1BUF;CAP2=IC1BUF;IFS0BIT.IC1IF=0;}在主代码中,IEC0BIT.IC1IE=0;//d。ISBALE中断计数=CAP2-CAP1;γ-DelayuUS(5);IEC0BIti.I1IE=1;/ /中断另一个中断使能访问主回路中正在修改的变量“值”,但这里我没有禁用中断。IF(计数=x)值=1;ELSValuy=0;ValueAy属性();O-AutoMyPSV)μu1rxButter(空隙){发送(value);IFS0BITS.U1TXIF=0;}
以上来自于百度翻译 以下为原文 Hello guys. My recent code works good, but sometimes it behaves uncertainly. I need your suggestions regarding the critical section of the code that I have implemented, is further need any modifications. I am using pic24f mcu. void __attribute__((interrupt,no_auto_psv)) _IC1Interrupt(void) { cap1 = IC1BUF; cap2 = IC1BUF; IFS0bits.IC1IF = 0; } In main code, IEC0bits.IC1IE = 0; //di***ale the interrupt counts = cap2-cap1; __delay_us(5); IEC0bits.IC1IE = 1; // interrupt enable again Another interrupt is accessing the variable "value" that is being modified in the main loop, but here I didn't disable the interrupt. if (counts==X) value=1; else value=0; void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void) { Transmit(value); IFS0bits.U1TXIF = 0; } |
|
相关推荐
3个回答
|
|
如果在多个上下文(主代码、中断、不同的RTOS任务)中使用Stutter(),则它必须是线程安全的(可重入的)。此外,如果它是阻塞的,则不应该从ISR / Ruben调用。
以上来自于百度翻译 以下为原文 If Transmit() is used in several contexts (main code, interrupts, different RTOS tasks) it must be thread safe (reentrant). Also, if it is blocking it should not be called from an isr. /Ruben |
|
|
|
还确保在ISR中修改的任何变量和在非ISR代码中被访问(特别是读取)的变量被标记为“易失性”。苏珊
以上来自于百度翻译 以下为原文 Also make sure that any variable that is modified in an ISR and accessed (especially read) in non-ISR code is marked as 'volatile'. Susan |
|
|
|
一个讨厌的事情:“禁用中断”之后的循环仍然可以中断(一直在那里,至少在PIC24HJ系列中看到)。由于下一个指令很可能首先“加载”CAP2(或CAP1),检查所得的反汇编,最终可能会基于来自2个独立中断的采样计算。解决方案:在禁用中断之后添加NOP。
以上来自于百度翻译 以下为原文 One nasty thing: The cycle immediately after the "disable interrupt" can still be interrupted (been there, seen that in at least the pic24HJ series). Since the next instruction will most likely first 'load' cap2 (or cap1), check the resulting disassembly, you might end up with a calculation based on samples from 2 separate interrupts. Solution: add a nop just after disabling the interrupts. |
|
|
|
只有小组成员才能发言,加入小组>>
5234 浏览 9 评论
2026 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3201 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
771浏览 1评论
659浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
588浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
670浏览 0评论
571浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 15:58 , Processed in 1.235908 second(s), Total 82, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号