50031185 发表于 2018-7-11 08:40:28

FreeRTOS 中的 信号量和任务通知 使用时有什么区别

最近在做 任务间 变量交互操作,
发现 一个中断中直接编辑的 变量值 在另一个中断任务中总是无法正常判断,调试得很郁闷,
于是想到了是不是应该用 任务间的信号传递,
那么
如果把每个中断写成一个任务,使用二值信号量传递比较好呢还是任务通知比较好?或者是互斥量?

信号量和任务通知 这两种方式 使用时有哪些区别


jakecumt 发表于 2018-7-12 09:48:37

任务通知
一定程度上可以替代二值信号量、计数信号量、事件组或队列。任务通知优点:更快、占用RAM少
任务通知缺点:数据不能从任务发送到ISR(也就是ISR中不能读取任务通知);接收处理任务通知只能在本任务中;任务通知只能通过32位无符号整数传递数据;当任务为“pending”,发送任务通知API不会等待任务变为“not-pending”而阻塞,也就是数据可能丢失
信号量 包含二值信号量和计数信号量,我一般用二值信号量,很少用计数信号量

50031185 发表于 2018-7-13 10:00:31

本帖最后由 50031185 于 2018-7-13 10:33 编辑

jakecumt 发表于 2018-7-12 09:48
任务通知
一定程度上可以替代二值信号量、计数信号量、事件组或队列。任务通知优点:更快、占用RAM少
任务 ...
请问你说的"" 发送任务通知API不会等待任务变为“not-pending”而阻塞,也就是数据可能丢失""

这个情况是说当等待接收通知的任务挂起时(就是已经收到了一个通知等待执行时) ,就无法接收通知,此时别的任务再发的通知就会丢失吗?

xiaojie0513 发表于 2018-7-14 17:28:40

正如楼上所说,可以使用任务通知,按照你的情况是传递一个变量的,二值信号量会用在任务与任务,中断与任务间的同步,所以使用也行,等在中断改变了数值的时候,可以告诉任务可以读取数值的就ok了,但是你也可以使用互斥信号量,都是差不多的,而互斥信号量有优先级继承(具体可以学习一下FreeRTOS相关的知识,简单的几句话说不清楚的),或者是使用队列,就定义一个数值的队列,进行数据的传输,最方便的应该就是任务通知了。:lol
页: [1]
查看完整版本: FreeRTOS 中的 信号量和任务通知 使用时有什么区别