标题: 基于STM32+ucos-II+DS18B20调试成功 [打印本页]

作者: pengyongnet    时间: 2020-2-2 19:48
标题: 基于STM32+ucos-II+DS18B20调试成功
前几天调试了一下DS18B20的程序,起初系统在裸奔的时候DS18B20可以很正常的读取数据。由于项目前期设计时添加了ucos实时操作系统。原以为把裸奔的程序移植过来就可以使用。结果悲剧发生了……如果做过这方面的朋友一定知道。添加后,你会发现系统不跑了,彻底的死掉了。原因在何处?经过一整天的查找,发现原来系统的时间片被占用了。导致ucos的ticks出现异常。


解决办法:一种方法是:修改OS_CPU_SysTickInit(void)函数,与delay函数进行兼容。在温度传感器延时的时候不影响操作系统的tick运行。这样就可以解决问题了。


还有一种方法就是,把18B20的延时定时器更换成TIM3或者是其他定时器。和系统的tick分开。即可解决。


作者: pengyongnet    时间: 2020-2-2 20:01
CPU_CRITICAL_ENTER();         
  读取18b20;
  CPU_CRITICAL_EXIT();
作者: pengyongnet    时间: 2020-2-3 08:47
认同二楼看法,DS18B20上见过类似情况,

OS_ENTER_CRITICAL();
XXXXXXXXXXXX
OS_EXIT_CRITICAL();

如上方法可解决。

你这情况有些蹊跷了,如果问题不在中断/delay上,也许是因为死锁。
不过死锁一般出现在复杂的系统上,DHT11发生死锁也不应该啊。
作者: liaoxj    时间: 2020-5-31 17:38
学习一下,在哪里看代码




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1