关于FreeRTOS的优先级,以及调度器的一些情况的理解,可以参考

FreeRTOS是一个多任务多进程的操作系统,每个Task按照其优先级等关系由系统调度器统一调度执行。
上篇文章讲到的18B20是一个单线双向通信的系统,必须确保在一次通信期间是连续的,不希望被别的task打断,如果有打断情况可能出现检测温度错误。
为了调高温度检测的可靠性,可以将温度检测所在的Task使用较高的优先级,不至于在检测期间被别的任务打断:

osThreadDef(myTask02, StartTask02, osPriorityAboveNormal, 0, 128);		//温度检测所在的task

其中osPriorityAboveNormal就是优先级,建议温度所在task使用比别的task更高的优先级。

typedef enum  {
  osPriorityIdle          = -3,          ///< priority: idle (lowest)
  osPriorityLow           = -2,          ///< priority: low
  osPriorityBelowNormal   = -1,          ///< priority: below normal
  osPriorityNormal        =  0,          ///< priority: normal (default)
  osPriorityAboveNormal   = +1,          ///< priority: above normal
  osPriorityHigh          = +2,          ///< priority: high
  osPriorityRealtime      = +3,          ///< priority: realtime (highest)
  osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority
} osPriority;

除了优先级的使用,还有就是在温度检测期间关闭进程调度的调度

  vTaskSuspendAll();			//开启调度锁,开启后不会被别的甚至优先级更高的任务打断
  short temp = Get_temp();
  xTaskResumeAll();				//关闭调度锁,必须成对出现,开锁后必须关锁

这样温度检测一般可以比较稳定,安全一些

再要考虑安全的话可以判断温度的数值,如果出现特别高或者特别低的数据,直接不使用。
希望对你有一点点帮助。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值