找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1944|回复: 4
收起左侧

基于STM32+ucos-II+DS18B20调试成功

[复制链接]
ID:79874 发表于 2020-2-2 19:48 | 显示全部楼层 |阅读模式
前几天调试了一下DS18B20的程序,起初系统在裸奔的时候DS18B20可以很正常的读取数据。由于项目前期设计时添加了ucos实时操作系统。原以为把裸奔的程序移植过来就可以使用。结果悲剧发生了……如果做过这方面的朋友一定知道。添加后,你会发现系统不跑了,彻底的死掉了。原因在何处?经过一整天的查找,发现原来系统的时间片被占用了。导致ucos的ticks出现异常。


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


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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:79874 发表于 2020-2-2 20:01 来自手机 | 显示全部楼层
CPU_CRITICAL_ENTER();         
  读取18b20;
  CPU_CRITICAL_EXIT();
回复

使用道具 举报

ID:79874 发表于 2020-2-3 08:47 来自手机 | 显示全部楼层
认同二楼看法,DS18B20上见过类似情况,

OS_ENTER_CRITICAL();
XXXXXXXXXXXX
OS_EXIT_CRITICAL();

如上方法可解决。

你这情况有些蹊跷了,如果问题不在中断/delay上,也许是因为死锁。
不过死锁一般出现在复杂的系统上,DHT11发生死锁也不应该啊。
回复

使用道具 举报

ID:752705 发表于 2020-5-31 17:38 | 显示全部楼层
学习一下,在哪里看代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表