snibelyh 发表于 2020-2-17 11:52:19

嵌入式操作系统线程分配管理

最近在学习RTX5,咨询下关于嵌入式操作系统线程分配的问题,比如有3个串口
方案一:每个串口中断分配一个线程,每个串口接收发送消息队列分配一个线程,共6个线程;
方案二:每个串口中断分配一个线程,所有串口接收发送消息队列分配一个线程,共4个线程;
这两种哪种比较合适?还是有其他方案?之前一直是在裸机下编程,对操作系统这块不是很了解。

taobaofarmer 发表于 2020-2-17 12:10:13

哪个都不对,中断就是中断,跟线程没关系,用中断方式在中断函数里接收和发送,再给这个串口开一个线程处理接收和发送打包的数据就行,能少开线程尽量少开

snibelyh 发表于 2020-2-17 13:47:39

taobaofarmer 发表于 2020-2-17 12:10
哪个都不对,中断就是中断,跟线程没关系,用中断方式在中断函数里接收和发送,再给这个串口开一个线程处理 ...

感谢你的回复。

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

myxiaonia 发表于 2020-2-17 13:56:50

snibelyh 发表于 2020-2-17 13:47
感谢你的回复。

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

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

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

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

snibelyh 发表于 2020-2-17 14:13:43

myxiaonia 发表于 2020-2-17 13:56
这不叫回调处理,回调处理是指直接在回调函数里处理,因为回调函数是在中断中执行,是一种特殊的cpu状态 ...

多谢版主的回复。

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

myxiaonia 发表于 2020-2-17 19:15:17

snibelyh 发表于 2020-2-17 14:13
多谢版主的回复。

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

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

snibelyh 发表于 2020-2-18 08:54:24

myxiaonia 发表于 2020-2-17 19:15
为什么要3个线程,一个线程里处理不行吗,一个事件有至少16个事件标志

懂了~在事件标志够用的情况下,线程越少越好。节省内存开销。
页: [1]
查看完整版本: 嵌入式操作系统线程分配管理