初级会员

- 积分
- 105
- 金钱
- 105
- 注册时间
- 2018-4-23
- 在线时间
- 23 小时
|
1金钱
实际项目中,经常会出现,ADC数据被多个模块访问的情况,在freertos中有一些疑问。
场景如下,
1. ADC1 采用DMA对多个通道数据进行采样,采样数据有 CH1:温度 CH2: 电流 CH3:湿度,
2. 在freertos 中有3个任务,对应 温度采集模块,电流控制模块,温湿度采集模块,
3. 每个任务都需要访问 ADC采样数据,进行内部运算或者控制,
问题:这3个任务应该如何与ADC进行数据通讯?
1. 消息队列
由于ADC转换是不会停止的,可以新建一个ADC任务,每100us发送一次结果到消息队列中,
会有几个问题,
1.消息队列会被写满,设置超时时间位0,可以退出,保证100us 发送数据不变
2.消息队列的深度,设置1,保证数据发送就覆盖,保证实时性
3. 多任务接受消息队列后,无论那个任务先读,其余2个任务将丢失了,那一时刻的数据,
4. 由于任务优先级问题,优先级高的任务可以实时读取到数据,优先级低的任务可能会被多次阻塞
有没有能像全局变量那样的方式,每个任务可以按自己的任务节奏,想什么时候去读都可以,且在实时性较高
|
|