硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2451|回复: 6
收起左侧

[CMSIS-RTOS简易教程] 嵌入式操作系统线程分配管理

[复制链接]

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2020-2-17 11:52:19 | 显示全部楼层 |阅读模式
最近在学习RTX5,咨询下关于嵌入式操作系统线程分配的问题,比如有3个串口
方案一:每个串口中断分配一个线程,每个串口接收发送消息队列分配一个线程,共6个线程;
方案二:每个串口中断分配一个线程,所有串口接收发送消息队列分配一个线程,共4个线程;
这两种哪种比较合适?还是有其他方案?之前一直是在裸机下编程,对操作系统这块不是很了解。
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2020-2-17 12:10:13 | 显示全部楼层
哪个都不对,中断就是中断,跟线程没关系,用中断方式在中断函数里接收和发送,再给这个串口开一个线程处理接收和发送打包的数据就行,能少开线程尽量少开
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2020-2-17 13:47:39 | 显示全部楼层
taobaofarmer 发表于 2020-2-17 12:10
哪个都不对,中断就是中断,跟线程没关系,用中断方式在中断函数里接收和发送,再给这个串口开一个线程处理 ...

感谢你的回复。

在CMSIS-Driver的文档里面,对于串口的中断的处理是采用回调函数的方式,在回调函数设置事件标志,然后在线程等待事件标志的触发。这样的做法应该比较合理?可以保证串口中断的处理时间尽量的短。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2020-2-17 13:56:50 | 显示全部楼层
snibelyh 发表于 2020-2-17 13:47
感谢你的回复。

在CMSIS-Driver的文档里面,对于串口的中断的处理是采用回调函数的方式,在回调函数设 ...

这不叫回调处理,回调处理是指直接在回调函数里处理,因为回调函数是在中断中执行,是一种特殊的cpu状态,直接处理很可能导致很多问题,所以rtx推荐用事件触发的方式。

你可以开一个或者多个线程,处理各种事件标志,可以将这些线程优先级置高。

这种做法的本质非常类似于二级缓冲。
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2020-2-17 14:13:43 | 显示全部楼层
myxiaonia 发表于 2020-2-17 13:56
这不叫回调处理,回调处理是指直接在回调函数里处理,因为回调函数是在中断中执行,是一种特殊的cpu状态 ...

多谢版主的回复。

目前比较倾向的方案是串口中断的处理方式都采用RTX推荐的事件触发方式,3个串口就需要3个对应的线程。然后所有的接收、发送消息都使用消息队列的方式,用一个线程来处理。这样可行吗?
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2020-2-17 19:15:17 | 显示全部楼层
snibelyh 发表于 2020-2-17 14:13
多谢版主的回复。

目前比较倾向的方案是串口中断的处理方式都采用RTX推荐的事件触发方式,3个串口就需 ...

为什么要3个线程,一个线程里处理不行吗,一个事件有至少16个事件标志
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2020-2-18 08:54:24 | 显示全部楼层
myxiaonia 发表于 2020-2-17 19:15
为什么要3个线程,一个线程里处理不行吗,一个事件有至少16个事件标志

懂了~在事件标志够用的情况下,线程越少越好。节省内存开销。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 01:28 , Processed in 0.185669 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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