OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9875|回复: 10

在freertos下,应当如何划分任务,设计任务?

[复制链接]

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-7-2
在线时间
17 小时
发表于 2018-9-24 09:34:14 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 linuxcso 于 2018-9-24 09:47 编辑

祝愿所有人中秋快乐!
在freertos下,应当如何划分任务,设计任务?
freertos新人一枚,粗略浏览了freertos版块所有的帖子,好像没人讨论或讲解,因此发新帖求助。
假设项目中有1个液晶、1个键盘,4个串口(串口1 +gprs+gps+rfid),蜂鸣器、LED等。
请大神给指点一下,扫一下盲:1如何设计任务?2任务之间如何交互信息?3任务如何分配时间切换?
原来裸机上:就是1个大循环,每个任务遍历一遍,效率低反应慢;通过全局变量设置标志.

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-9-25 01:12:12 | 显示全部楼层
回复

使用道具 举报

0

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2018-1-19
在线时间
28 小时
发表于 2018-9-27 17:26:26 | 显示全部楼层
串口优先   其次是键盘    液晶   蜂鸣器 LED
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-7-2
在线时间
17 小时
 楼主| 发表于 2018-9-28 09:46:38 | 显示全部楼层

谢谢原子哥,其实我想知道战舰版的freertos综合实例还出不出,什么时候出?
有了基于freertos的综合实例,就全清楚了
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-7-2
在线时间
17 小时
 楼主| 发表于 2018-9-28 10:17:05 | 显示全部楼层
一抹残阳 发表于 2018-9-27 17:26
串口优先   其次是键盘    液晶   蜂鸣器 LED

串口和其他任务怎么通信呢,以前是数组+标志位,现在怎么弄,串口+队列?
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-10-1
在线时间
1 小时
发表于 2018-10-1 11:10:29 | 显示全部楼层
linuxcso 发表于 2018-9-28 10:17
串口和其他任务怎么通信呢,以前是数组+标志位,现在怎么弄,串口+队列?

可以创建一个串口接收任务,任务里将数据组帧后放到队列里,其他任务可以从队列里读取
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2019-12-27 11:25:48 | 显示全部楼层
操作系统是以任务为基本单位,任务和任务之间交换数据必须通过操作系统的API来实现(例如:全局变量+关中断,消息邮箱,消息队列)

(一)、如何设计任务?

    一、4个串口(串口1 +gprs+gps+rfid)
          每个串口设计一个任务,在串口中断服务程序中释放信号量同步该任务。
    二、键盘
           键盘设计成一个周期性轮巡任务。
    三、 蜂鸣器、LED
           如果很重要,可以单独设计二个任务,但是任务数量太多,会造成系统实时性能降低。
           如果不重要可以将这二部分内容放到按键任务中去,因为按键任务定时执行的呀!

(二)、任务之间如何交互信息   
           4个串口任务给液晶屏任务发送消息队列传送数据
           键盘任务给液晶屏任务发送消息队列传输按键码

           假如:规定消息队列自定义格式如下:
                 msg[0]=识别码  ,  msg[1]=传输字节数量  msg[2]---msg[n]=消息内容
            则
                1、串口1给液晶屏传输数据
                          msg[0] = 1    ---> 表示是串口1任务发送的消息
                          msg[1] = 10  ---> 表示串口1发送了10个有效数据
                          msg[2]---msg[11] = 串口1发送的数据
                2、串口2给液晶屏传输数据
                         msg[0] = 2    ---> 表示是串口2任务发送的消息
                          msg[1] = 5  ---> 表示串口2发送了5个有效数据
                          msg[2]---msg[6] = 串口2发送的数据
                3、串口1给液晶屏传输数据
                          msg[0] = 3
                4、串口4给液晶屏传输数据
                          msg[0] = 4
                5、键盘给液晶屏传输数据
                          msg[0] = 5  ---> 表示是键盘任务发送的消息
                          msg[1] = 1  ---> 表示键盘任务发送了1个有效数据
                          msg[2]        --->  按键码

           
   
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2020-2-19 15:05:43 | 显示全部楼层
霸王猫 发表于 2019-12-27 11:25
操作系统是以任务为基本单位,任务和任务之间交换数据必须通过操作系统的API来实现(例如:全局变量+关中断 ...

(一)、如何设计任务?

    一、4个串口(串口1 +gprs+gps+rfid)
          每个串口设计一个任务,因此需要设计4个任务,在各自的串口中断服务程序中释放各自的信号量同步该任务(4个任务要创建4个信号量,每个任务对应一个信号量)。          优先级最高,串口1优先级=5, gprs优先级=7  gps优先级 = 9  rfid 优先级=11
    二、键盘
           键盘设计成一个周期性轮巡任务。
           优先级中等,优先级=15
    三、 蜂鸣器、LED
           如果很重要,可以单独设计二个任务,但是任务数量太多,会造成系统实时性能降低。
           如果不重要可以将这二部分内容放到按键任务中去,因为按键任务定时执行的呀!
   四、液晶屏           需要设计一个液晶屏任务,优先级最低。,优先级=21
(二)、任务之间如何交互信息   
           4个串口中断服务程序给(4个串口任务)发送信号量唤醒任务
           4个串口任务给液晶屏任务发送消息队列传送数据
           键盘任务给液晶屏任务发送消息队列传输按键码

           假如:规定消息队列自定义格式如下:
                 msg[0]=识别码  ,  msg[1]=传输字节数量  msg[2]---msg[n]=消息内容
            则
                1、串口1给液晶屏传输数据
                          msg[0] = 1    ---> 表示是串口1任务发送的消息
                          msg[1] = 10  ---> 表示串口1发送了10个有效数据
                          msg[2]---msg[11] = 串口1发送的数据
                2、串口2给液晶屏传输数据
                         msg[0] = 2    ---> 表示是串口2任务发送的消息
                          msg[1] = 5  ---> 表示串口2发送了5个有效数据
                          msg[2]---msg[6] = 串口2发送的数据
                3、串口1给液晶屏传输数据
                          msg[0] = 3
                4、串口4给液晶屏传输数据
                          msg[0] = 4
                5、键盘给液晶屏传输数据
                          msg[0] = 5  ---> 表示是键盘任务发送的消息
                          msg[1] = 1  ---> 表示键盘任务发送了1个有效数据
                          msg[2]        --->  按键码


回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-9-5
在线时间
1 小时
发表于 2020-10-10 09:41:50 | 显示全部楼层
霸王猫 发表于 2020-2-19 15:05
(一)、如何设计任务?

    一、4个串口(串口1 +gprs+gps+rfid)

小小提示,Freertos的优先级数值越大,优先级越高(和uCOS反的)。
回复

使用道具 举报

0

主题

15

帖子

0

精华

高级会员

Rank: 4

积分
923
金钱
923
注册时间
2019-7-6
在线时间
218 小时
发表于 2020-10-10 10:24:59 | 显示全部楼层
霸王猫 发表于 2020-2-19 15:05
(一)、如何设计任务?

    一、4个串口(串口1 +gprs+gps+rfid)

谢谢讲解,把任务结构讲解的很透彻
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2019-5-3
在线时间
22 小时
发表于 2022-3-21 10:34:20 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 18:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表