欢迎来到皮皮网网首页

【兑奖网站源码】【sync源码详解】【kvm源码pdf】thread源码下载

来源:anki源码分析 时间:2024-11-28 19:18:21

1.ThreadX系列 | 最新v6.1.6版本在MDK中的源码移植方法
2.【Poco笔记】线程Thread

thread源码下载

ThreadX系列 | 最新v6.1.6版本在MDK中的移植方法

       本文分享了在MDK中移植ThreadX系列最新v6.1.6版本的方法,特别强调了更新过程及与之前的下载移植体验的比较。移植的源码开发板为小熊派IoT开发板,主控为STMLRCT6。下载首先,源码用户需要准备一份包含「正常使用printf串口输出的下载兑奖网站源码裸机工程」,推荐使用cubemx生成。源码

       接着,下载从GitHub开源仓库获取ThreadX源码,源码将源码添加到MDK工程中。下载具体步骤包括创建threadX/common分组,源码将threadX/common/src下的下载所有c文件添加到此分组,以及新建threadX/ports分组,源码根据编译环境(例如使用AC5编译器)添加相应的下载.s文件。设置编译器为AC5,源码sync源码详解并添加头文件路径,以确保移植过程的顺利进行。

       在移植过程中,用户可能会遇到ThreadX官方提供的底层适配文件tx_initialize_low_level.s,该文件中的函数用于处理器的底层初始化。然而,ThreadX在v6版本及其后续版本中对这个文件进行了修改,kvm源码pdf试图接管处理器的底层初始化,包括设置堆栈环境、重新定义向量表以及接管复位程序,这引起了一些争议。尽管ThreadX的意图可能是为了提供更全面的系统支持,但这种做法在某些方面可能并不合适,因为它直接接管了系统中断,电脑版源码而中断管理通常是操作系统的责任。尽管如此,移植工作仍需继续,用户可以通过创建自定义的适配文件来解决与原始文件的不兼容问题。

       具体步骤包括复制tx_initialize_low_level.s文件,并创建自定义适配文件tx_initialize_low_level_bearpi.S,其中包含了对原有代码的指标源码打包修改以适应特定的移植需求。例如,修改与STM启动文件相关的代码,如设置时钟频率、初始化Systick定时器、处理堆栈环境等。在适配文件中,用户需要注释掉ThreadX定义的中断向量表和复位处理程序,并根据实际需求调整底层初始化函数。

       此外,为了兼容现有代码,用户需要注释掉HAL库提供的中断服务函数,如PendSV和Systick中断服务函数。完成这些步骤后,用户可以编写应用代码,包括创建任务和启动内核。在main.c中包含ThreadX头文件,并在main函数中初始化内核,以完成整个移植过程。通过编译和下载,用户可以在串口终端观察到系统运行结果。

       本文分享的移植过程提供了对最新ThreadX版本在特定环境中的应用指南,以及在遇到官方修改时的调整策略。虽然在某些方面存在争议,但通过适当的适配和调整,用户仍能成功地将ThreadX移植至其目标开发板,实现稳定且高效的操作系统功能。

【Poco笔记】线程Thread

        Poco的Thread是对标准库std::thread的封装,同时它类似Java一样,提供了Runnable接口。所以使用上是对标Java的。

        与标准库不同的是,Poco::Thread创建和运行时相分离的。这一点标准库设计确实不太友好。例如下面例子。

        同样看例子

        由上面可见,使用基本跟Java类似。创建与运行也分离了。

        看一下主要的运行接口,摘自Poco1.9源码

        源码文件主要包含

        1.Thread.h/Thread.cpp

        提供外部调用接口

        在Thread.cpp中定义了两种Holder, RunnableHolder和CallableHolder。Holder技术是Poco框架中经常用到的,是对某一种类型对象的指针包装。

        Runnable为线程运行类的基类,

        Callable为带一个参数的方法

        2.Thread_POSIX.h/Thread_POSIX.cpp

        3.Thread_VX.h/Thread_VX.cpp

        4.Thread_WIN.h/Thread_WIN.cpp

        5.Thread_WINCE.h/Thread_WINCE.cpp

        这几个文件,每个文件中都定义了ThreadImpl,用于不同平台下的具体实现,Thread私有继承ThreadImp,ThreadImp用于哪一个文件由编译宏决定。

        顺便说一下POSIX系统下的实现。因为使用的是c++,当时没有thread类,所以所有的实现都是使用pthread库来实现的。具体的使用请参考pthread技术文档。

        6.ThreadLocal.h/ThreadLocal.cpp

        ThreadLocal中定义了三个类, TLSAbstractSlot类, TLSSlot类, ThreadLocalStorageç±»

        TLSAbstractSlot是基类,TLSSlot是模板类,通过模板技术包裹了具体的类型。ThreadLocalStorage是用于线程存储,具体是通过一个map来实现。

        因为1.9使用的是c++,还没有引用local_thread关键字,所以这里是通过这种方式实现。

        ThreadLocalStorage定义如下

        那么Poco::Thread的tls是如何定义的?

        源码文件比较少,主要如下文件

        1.Thread.h/Thread.cpp

        2.Thread_STD.h/Thread_POSIX.cpp/Thread_VX.cpp/Thread_WIN.cpp

        Thread.h 主要对实现类ThreadImp的包装,并定义了对外接口。

        Thread_STD.h定义了内部实现,主要提供了ThreadImpç±»

        Thread_POSIX.cpp/Thread_VX.cpp/Thread_WIN.cpp分别定义不同平台下的兼容实现

        在Thread_STD.h中定义了几个重要类型

        在Thread.cpp中增加了两种

        private修饰的ThreadData,定义了线程内部数据。 1.9中源码分别定义在各个平台实现类中,这里抽离出来定义在Thread.cpp中。较之前的定义,这里额外的是新增了std::thread指针。因为直接引用了c++中的thread,有些实现直接借助于它。