完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用ESP8266_RTOS_SDK和1-Wire总线连接DS18B20温度传感器。当 wifi 处于STAtiON_MODE状态时,从传感器读取温度值时偶尔会出现 CRC 错误。当 wifi 关闭时(即在NULL_MODE中),根本没有错误。
1-wire总线对时序敏感,某些操作不得中断。 代码的所有敏感部分(持续约 60 个我们)都由 taskENTER_CRITICAL/taskEXIT_CRITICAL 对保护,但问题仍然存在。看起来wifi中断仍在中断关键部分,并影响1-Wire总线上的关键时序。 相反,我试图用 taskDISABLE_INTERRUPTS/taskENABLE_INTERRUPTS 对来保护关键部分,但问题仍然存在。在这种情况下,调度程序仍然可以中断关键部分。尝试禁用中断和使用taskENTER_CRITICAL根本不起作用。 ESP8266_RTOS_SDK中有什么方法可以绝对保护关键部分免受高优先级 wifi 中断(并且仍在使用 wifi)? |
|
相关推荐
1个回答
|
|
要保护ESP8266上时间关键部分免受RTOS中断的影响,您可以尝试以下方法:
1. **降低RTOS任务优先级**:确保与WiFi相关的任务优先级低于您的1-Wire通信任务。这将减少WiFi任务中断1-Wire通信任务的可能性。 2. **使用中断标志**:在您的1-Wire通信任务中使用中断标志来通知任务何时可以安全地访问1-Wire总线。在任务进入关键部分之前,检查中断标志以确保没有其他任务正在使用1-Wire总线。 3. **使用软件定时器**:在您的1-Wire通信任务中使用软件定时器来控制1-Wire总线的时序。这将确保即使RTOS中断发生,您的1-Wire通信任务也能保持正确的时序。 4. **禁用WiFi中断**:在您的1-Wire通信任务的关键部分中,尝试禁用与WiFi相关的中断。这可以通过调用`vTaskSuspendAll()`函数来实现,该函数将暂停所有RTOS任务,包括与WiFi相关的任务。在关键部分完成后,使用`xTaskResumeAll()`函数恢复RTOS任务。 5. **使用硬件定时器**:如果可能的话,使用硬件定时器来控制1-Wire总线的时序。硬件定时器通常具有更高的优先级,并且不容易受到RTOS中断的影响。 6. **优化代码**:检查您的代码以确保没有不必要的延迟或阻塞操作。这将有助于减少RTOS中断对1-Wire通信任务的影响。 7. **使用RTOS信号量**:使用RTOS信号量来同步对1-Wire总线的访问。这可以确保在1-Wire通信任务的关键部分期间,没有其他任务可以访问1-Wire总线。 8. **调整RTOS配置**:检查您的RTOS配置,确保没有不必要的任务调度或中断处理。这可能有助于减少RTOS中断对1-Wire通信任务的影响。 通过尝试这些方法,您应该能够减少RTOS中断对ESP8266上1-Wire通信任务的影响,从而提高读取DS18B20温度传感器的可靠性。 |
|
|
|
只有小组成员才能发言,加入小组>>
1140 浏览 1 评论
577浏览 6评论
478浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
462浏览 5评论
463浏览 4评论
438浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:25 , Processed in 0.845780 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号