ThreadX_01:基本概念


用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

#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
definemeaning
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_FILLING0
TX_ENABLE_EVENT_TRACE0
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

mutex内访问的资源,其他的线程不可以再去访问。

3.8 Event Flags

该服务创建一组32个事件标志。 所有32个事件标志组初始化为零。 每个事件标志都由一个位表示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值