文章目录
- 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
- TX_DISABLE_ERROR_CHECKING
- Fastest Configuration 执行速度最快
- TX_REACTIVATE_INLINE
TX_INLINE_THREAD_RESUME_SUSPEND
- TX_REACTIVATE_INLINE
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
未完待续。