MurphyZhao 发表于 2019-6-6 11:12:42

RT-Thread 自动初始化的困惑

这里有人用 RT-Thread OS 吗?

RT-Thread 里有一个自动初始化序列,有个小困惑,项目中,哪些初始化适合放到自动初始化序列里面,有没有一个应用原则?

ps:
我以前都是随便用的,只要初始化顺序 OK 就行了,没有深入思考过。
通常,我把硬件驱动相关的放进初始化序列里,项目的业务代码放到 main 任务里启动。

大家都怎么用?

我夏了夏天 发表于 2019-6-6 15:13:58

我觉得除了应用代码之外的初始化,都可以放在自动初始化里面。

jjj 发表于 2019-6-6 15:41:29

main()之外都自动初始化,我的理解,

进来就编应用程序。

tuy0326 发表于 2019-6-6 22:32:52

我是在Application里初始化线程,线程里先初始化自己这个线程要使用的硬件,然后while (1)
每个线程自己各管各的硬件

如果所有硬件在线程启动之前放在一起初始化的话,太乱了。。。。

tyustli 发表于 2019-6-10 09:07:56

tuy0326 发表于 2019-6-6 22:32
我是在Application里初始化线程,线程里先初始化自己这个线程要使用的硬件,然后while (1)
每个线程自己 ...

楼上机智了

MurphyZhao 发表于 2019-6-10 10:53:14

tuy0326 发表于 2019-6-6 22:32
我是在Application里初始化线程,线程里先初始化自己这个线程要使用的硬件,然后while (1)
每个线程自己 ...

都创建一个线程管理,那岂不是很占用资源

tuy0326 发表于 2019-6-10 15:44:32

MurphyZhao 发表于 2019-6-10 10:53
都创建一个线程管理,那岂不是很占用资源

不是每个硬件都需要一个线程管理,而是你这个线程用到的硬件由你这个线程自己管理

MurphyZhao 发表于 2019-6-10 17:04:12

tuy0326 发表于 2019-6-10 15:44
不是每个硬件都需要一个线程管理,而是你这个线程用到的硬件由你这个线程自己管理 ...

哦,明白了。这在线程间互不干扰的情况下,是很好的一个方式。但,很多情况下,硬件是共享给系统中的很多线程使用的,比如 uart,这个时候就不是那么灵活。

tuy0326 发表于 2019-6-10 17:23:08

MurphyZhao 发表于 2019-6-10 17:04
哦,明白了。这在线程间互不干扰的情况下,是很好的一个方式。但,很多情况下,硬件是共享给系统中的很多 ...

如果有共享的,那么你就要另作个线程,每个线程要用的时候发消息给他,然后由这个线程排队发出去,否则你就加锁

MurphyZhao 发表于 2019-6-10 18:11:33

tuy0326 发表于 2019-6-10 17:23
如果有共享的,那么你就要另作个线程,每个线程要用的时候发消息给他,然后由这个线程排队发出去,否则你 ...

嗯,这个思路是合适的。
很多情况下,硬件(尤其是传感器)初始化过程很慢,如果放到自动初始化序列,那就会阻塞启动过程,启动时间会很长。
所以,这种情况,可以使用 work queue 对硬件进行初始化,然后操作硬件的时候,加锁互斥操作,或者使用消息队列异步操作。
页: [1]
查看完整版本: RT-Thread 自动初始化的困惑