ThreadX_01:基本概念


文章目录

  • 1 Introduction to ThreadX
  • 2 Installation and Use of ThreadX
  • 2.2 Configuration Options
  • 3 Functional Components of ThreadX
    • 3.1 Execution Overview
    • 3.2 memory usage
    • 3.3 initialization
    • 3.4 Thread Execution
      • 3.4.1 Thread Execution States
      • 3.4.2 Thread Priorities
      • 3.4.2 Thread Scheduling
  • 3.5 Message Queues
  • 3.6 Counting Semaphores
  • 3.7 Mutexes
  • 3.8 Event Flags

用vs code调了一整天的环境没有解决,然后用vs2010直接打开就能跑,哎。后面看一下项目中是怎么引用的tx.lib。
在这里插入图片描述
在这里插入图片描述
1 Introduction to ThreadX
2 Installation and Use of ThreadX

  • demo中有4个文件,使用时需要接入tx.a,并且要包含tx_api.h和tx_port.h

在这里插入图片描述

  • 1) 应用threadx 函数或者数据结构时,需要include tx_api.h
  • 2)main函数中调用tx_kernal_enter来开始threadX
  • 3)编写tx_application_define函数,用于初始化系统资源。
  • 4)编译源程序,并与ThreadX运行时库tx.lib链接。 生成的image可以下载到目标并执行!

void tx_application_define(void *first_unused_memory) 函数
my_threadx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "tx_api.h"
#include <stdio.h>
void my_thread_entry(ULONG thread_input);
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. */
  printf("my_thread_counter = %d\n",my_thread_counter);
  tx_thread_sleep(1);
 }
}

在这里插入图片描述

2.2 Configuration Options

在tx_user.h中对一些option进行配置。

  • Smallest Configuration 占用代码最小的配置
    • TX_DISABLE_ERROR_CHECKING
      TX_DISABLE_PREEMPTION_THRESHOLD//抢占阈值
      TX_DISABLE_NOTIFY_CALLBACKS
      TX_DISABLE_REDUNDANT_CLEARING
      TX_DISABLE_STACK_FILLING
      TX_NOT_INTERRUPTABLE
      TX_TIMER_PROCESS_IN_ISR
  • Fastest Configuration 执行速度最快
    • TX_REACTIVATE_INLINE
      TX_INLINE_THREAD_RESUME_SUSPEND
define meaning
TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO
TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO
TX_DISABLE_ERROR_CHECKING 默认0。不使能error check,前提是在代码充分debug之后,可以降低代码大小,提高执行速度
TX_DISABLE_NOTIFY_CALLBACKS 默认0,不使能通知信息的回调函数
TX_DISABLE_PREEMPTION_THRESHOLD 默认0,抢占阈值
TX_DISABLE_REDUNDANT_CLEARING 默认0
TX_DISABLE_STACK_FILLING 0
TX_ENABLE_EVENT_TRACE 0
TX_ENABLE_STACK_CHECKING
TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO
TX_INLINE_THREAD_RESUME_SUSPEND 定义后,ThreadX可以改善tx_thread_resume和通过tx_thread_suspend API调用内联代码。 这增加了代码大小,但增强了这两个API调用。
TX_MAX_PRIORITIES
TX_MINIMUM_STACK
TX_MISRA_ENABLE
TX_MUTEX_ENABLE_PERFORMANCE_INFO
TX_NO_TIMER 禁用tx计时器
TX_NOT_INTERRUPTABLE 定义后,ThreadX不会尝试最小化中断锁定时间。 这样可以更快执行但略有增加中断锁定时间
TX_QUEUE_ENABLE_PERFORMANCE_INFO
TX_REACTIVATE_INLINE
TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO 收集信号量的信息
TX_THREAD_ENABLE_PERFORMANCE_INFO 收集tx的性能信息
TX_TIMER_ENABLE_PERFORMANCE_INFO
TX_TIMER_PROCESS_IN_ISR
TX_TIMER_THREAD_PRIORITY 定义内部的优先级ThreadX系统计时器线程。 的默认值为优先级0,即ThreadX中的最高优先级。 默认值定义在tx_port.h
TX_TIMER_THREAD_STACK_SIZE 定义timer_thread 的堆栈大小

3 Functional Components of ThreadX

3.1 Execution Overview

程序执行分为4个部分,1 初始化 2 线程执行 3 中断服务函数 4 应用时钟
在这里插入图片描述

  • 初始化。初始化包括处理器复位和线程调度循环的入口之间的所有程序执行。
  • 线程执行。初始化完成之后,threadx进入调度环,调度环去寻找一个thread区执行。
  • ISR。一旦检测到中断,处理器会保存关于当前执行程序的关键信息,然后执行ISR。
  • 应用时钟。App Timer 类似于ISRs,只不过AT是最频繁的中断,但是AT之间不可以相互中断。
    在这里插入图片描述

3.2 memory usage

3.3 initialization

  • 1)main 中包括tx_kernel_enter 函数来进入tx
  • 2)tx_kernel_enter 。这个进入函数会调用tx_application_define函数。
  • 3)tx_application_define函数定义了所有初始应用程序线程,队列,信号量,互斥锁,事件标志,内存池和计时器。 它是也可以创建和删除系统资源。 但是,所有初始应用程序资源在这里定义。

3.4 Thread Execution

  • 调用tx_thread_create 来创建线程

3.4.1 Thread Execution States

在这里插入图片描述

3.4.2 Thread Priorities

默认32的优先级 0-31,可以扩展到1024,每次增加32.

3.4.2 Thread Scheduling

调用基于优先级,如果是相同优先级那么遵循FIFO的原则。

3.5 Message Queues
3.6 Counting Semaphores
3.7 Mutexes
3.8 Event Flags

未完待续。