【03】ThreadX多线程Demo学习(一)

目录

 

简介

ThreadX标准开发流程


简介

上一篇我们介绍了如何在Windows下搭建ThreadX开发环境。

这一篇我们开始分析ThreadX官方多线程Demo,并学习ThreadX的标准开发流程。

注意,由于是演示Demo,因此能够直接编译出.exe文件,并且可以在Windows环境运行。但官方通过特制的tx.lib限制了可以使用的最大系统资源数量,如下所示:

11 Threads
9 Timers
2 Event Flag Groups
2 Mutexes
3 Queues
2 Semaphores
1 Block Pool
1 Byte Pool


ThreadX标准开发流程

Demo解压后的源码目录结构如下图:

【03】ThreadX多线程Demo学习(一)_第1张图片

先不考虑example、vs工程文件和说明文档,我们重点关心上图红框框框出的几个文件(三个框连一起你会读么 O_o):

  • tx.lib:ThreadX C静态库。
  • tx_api.h:头文件,包含所有跨平台的数据结构定义和服务原型定义。
  • tx_port.h:头文件,包含平台相关的数据结构定义和所有开发工具接口定义。
  • tx_initialize_low_level.c:定时器中断的配置与实现,默认采用平台提供的接口,也可根据项目需求自行修改。
  • demo_threadx.c:一个简单的示例程序。

使用ThreadX看来还是比较容易的,官方也给出了一套标准开发流程:

  • Step1:在所有使用ThreadX服务或数据结构的应用程序源码中包含tx_api.h文件。
  • Step2:实现标准C main(),main()中最终必须调用tx_kernel_enter()以启动ThreadX。不涉及ThreadX的特定于应用程序的初始化流程可以放在tx_kernel_enter()之前进行(PS:为啥tx_kernel_enter()要放在最后执行呢,因为这个函数类似于事件循环,程序运行到这里后就阻塞了)。
  • Step3:实现tx_application_define(),在该函数中初始化ThreadX系统资源。包括线程、队列、内存池、事件标志组、互斥锁和信号量。
  • Step4:使用tx.lib或tx.a静态编译应用程序源码,生成映像,下载到目标板执行,调试。。。

通过这四个步骤,我们可以轻松写出一个练习程序。该程序调用ThreadX核创建了一个优先级为3的线程,线程内循环进行计数器自增和延时操作。

#include "tx_api.h"

unsigned long my_thread_counter = 0;
TX_THREAD my_thread;

main()
{
    /* Enter the ThreadX kernel. */
    tx_kernel_enter();
}

void tx_application_define(void *first_unused_memory)
{
    /* Create my_thread! */
    tx_thread_create(&my_thread, "My Thread",
                     my_thread_entry, 0x1234, first_unused_memory, 1024,
                     3, 3, TX_NO_TIME_SLICE, TX_AUTO_START);
}

void my_thread_entry(ULONG thread_input)
{
    /* Enter into a forever loop. */
    while (1)
    {
        /* Increment thread counter. */
        my_thread_counter++;
        /* Sleep for 1 tick. */
        tx_thread_sleep(1);
    }
}

下一篇我们接着分析ThreadX官方的多线程Demo。

你可能感兴趣的:(ThreadX源码分析)