本帖最后由 any012 于 2017-1-10 15:20 编辑 正在看freertos方面的教程,想请教下如何划分任务? 比如之前做的一个数据采集板,用到了单片机以下功能: 1,单片机通过SPI1和ADC芯片通讯,同时还要通过SPI控制ADC电路部分的其他外围芯片; 2,单片机通过串口和上位机通讯,和上位机通讯时单片机IO脚控制一个LED闪烁。 3,单片机作为从设备通过SPI2和主设备通讯,通过检测单片机的另一个IO脚的状态,来判断该设备是否作为SPI从设备被选中; 要是划分任务的话,需要划分为几个任务? |
1、根据外设类型:SPI一个,串口一个;
2、按照任务的优先级分:比如AD采集最优先,单独做一个任务,提高优先级;其他通讯任务缓一缓没关系,合成一个任务,优先级低一些。
3、按工作流程分:比如分阶段的,按阶段分。我现在做的项目偏向这种划分
评分
查看全部评分
感谢回复。
那么任务要过要细分的话,分解到什么程度呢?
比如我按功能分了3个大类;
1:数据采集;
2:串口通讯;
3:SPI主从设备通讯;
2的话,基本不用再分了;
3的话,除了SPI部分,还有外部IO口中断部分;
1的话,步骤其实挺多的。
首先要和模拟开关电路通讯来切换通道;
然后向ADC发送数据采集命令;
然后就等待ADC芯片采集完成(采集完成会自动将MISO引脚拉低);
然后再读取ADC的数据寄存器的值;
还要抽时间将ADC数据转换为电压值。
你说的1可以用一个任务完成,因为看你的步骤分解是按流水线来完成的。
不是需要同时进行的,就不需要分出来作为一个任务,对吗?
我想了想,1里面可以把ADC值转化为电压值,这个转换过程独立出来作为个任务。
这样也合理
具体要看你处理AD的形式是用中断还是轮询。如果是中断的话这个单独的任务里面代码其实没什么好写的,因为在中断回调函数中写实现代码就可以了。