tica, sans-serif">基于STM32 在keil上建了一个工程,跑ucosii操作系统,我建立了5个任务
1 采样任务 3 优先级
2 数据处理任务 4
3 通讯任务 5
4 显示任务 6
5 开始任务 任务的优先级按顺序逐渐降低的 10采样后的数据要给数据处理任务处理,之后由通讯任务上传,这就代表我的任务之间应该是需要同步和通讯的,对吧?我把采样的数据写到全局变量 一个周期data【30】的数组了,之后数据处理任务读data数据,之后进行处理,采样是20ms采样一周期,也就是20ms就要更新data数组数据,我怕数据丢失,就在数据处理任务中创建了一个大的数据,可以放100个周期的数据。做缓存区。这么做可以吗?如果可以的话,是不是就代表我的任务同步,和通讯其实不需要信号量,邮箱,消息队列也能实现任务的同步和通讯啊,我现在基本都是这种方法,建立一个数据,一个任务往里写,一个任务往里读。这么做可以吗,有错吗?树上说,操作系统中,任务之间是看不见的,相互独立的,要想任务之间通信,只能通过信号量,邮箱,队列什么的。,
我采样周期要求是20ms采样一次,我把采样的数据写在一个data【30】的数组内,我数据处理的任务要到data【30】读数据,之后处理,处理后通讯任务要负责向上层传送。这么看来,其实我的任务还是需要同步的,因为如果采样任务采样后,如果下一次采样任务来临前,数据处理任务还没有来读data【30】的数据,那就代表数据任务有一个或者几个周期的数据,没有读到。因为被采样任务覆盖了。我现在是这么处理的,开辟一个100个周期数据缓存区,把data的数据每次都先移到缓存区中,防止有的数据被丢失。这个data数据并不是什么消息队列,但是能达到数据不丢失,同步的效果吗,我就是这个意思。。。
还有一个问题,我现在的每个任务都是通过OSTimeDlyHMSM(0, 0, 0, 100); 任务延迟函数调度的。假如我的采样任务是20ms要采样一次的话,是不是如果调用任务延迟函数,延迟100ms的话就不可以了,只能延迟20ms以内的时间。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>