any012 发表于 2017-1-10 15:17:14

像freertos系统,如何划分任务?

本帖最后由 any012 于 2017-1-10 15:20 编辑

正在看freertos方面的教程,想请教下如何划分任务?

比如之前做的一个数据采集板,用到了单片机以下功能:
1,单片机通过SPI1和ADC芯片通讯,同时还要通过SPI控制ADC电路部分的其他外围芯片;
2,单片机通过串口和上位机通讯,和上位机通讯时单片机IO脚控制一个LED闪烁。
3,单片机作为从设备通过SPI2和主设备通讯,通过检测单片机的另一个IO脚的状态,来判断该设备是否作为SPI从设备被选中;

要是划分任务的话,需要划分为几个任务?

奏奏奏 发表于 2017-1-10 15:17:15

划分任务的话有几个原则:
1、根据外设类型:SPI一个,串口一个;
2、按照任务的优先级分:比如AD采集最优先,单独做一个任务,提高优先级;其他通讯任务缓一缓没关系,合成一个任务,优先级低一些。
3、按工作流程分:比如分阶段的,按阶段分。我现在做的项目偏向这种划分:lol

any012 发表于 2017-1-10 16:36:13

奏奏奏 发表于 2017-1-10 15:30
划分任务的话有几个原则:
1、根据外设类型:SPI一个,串口一个;
2、按照任务的优先级分:比如AD采集最优 ...

感谢回复。
那么任务要过要细分的话,分解到什么程度呢?
比如我按功能分了3个大类;
1:数据采集;
2:串口通讯;
3:SPI主从设备通讯;

2的话,基本不用再分了;
3的话,除了SPI部分,还有外部IO口中断部分;
1的话,步骤其实挺多的。
首先要和模拟开关电路通讯来切换通道;
然后向ADC发送数据采集命令;
然后就等待ADC芯片采集完成(采集完成会自动将MISO引脚拉低);
然后再读取ADC的数据寄存器的值;
还要抽时间将ADC数据转换为电压值。

奏奏奏 发表于 2017-1-10 16:43:29

any012 发表于 2017-1-10 16:36
感谢回复。
那么任务要过要细分的话,分解到什么程度呢?
比如我按功能分了3个大类;


你说的1可以用一个任务完成,因为看你的步骤分解是按流水线来完成的。

any012 发表于 2017-1-10 16:56:34

奏奏奏 发表于 2017-1-10 16:43
你说的1可以用一个任务完成,因为看你的步骤分解是按流水线来完成的。

不是需要同时进行的,就不需要分出来作为一个任务,对吗?

我想了想,1里面可以把ADC值转化为电压值,这个转换过程独立出来作为个任务。

奏奏奏 发表于 2017-1-10 19:29:18

any012 发表于 2017-1-10 16:56
不是需要同时进行的,就不需要分出来作为一个任务,对吗?

我想了想,1里面可以把ADC值转化为电压值,这 ...

这样也合理

奏奏奏 发表于 2017-1-10 19:29:39

本帖最后由 奏奏奏 于 2017-1-10 22:56 编辑

any012 发表于 2017-1-10 16:56
不是需要同时进行的,就不需要分出来作为一个任务,对吗?

我想了想,1里面可以把ADC值转化为电压值,这 ...
具体要看你处理AD的形式是用中断还是轮询。如果是中断的话这个单独的任务里面代码其实没什么好写的,因为在中断回调函数中写实现代码就可以了。

请叫我小张张 发表于 2017-1-10 20:39:23

又长见识了

andypanfan 发表于 2017-1-11 08:59:12

这个问题比较好,学习了!!!

ts2000 发表于 2017-1-11 09:06:28

进来学习一下!
页: [1] 2
查看完整版本: 像freertos系统,如何划分任务?