📄 tx_api.h
字号:
/**************************************************************************/
/* */
/* Copyright (c) 1996-2000 by Express Logic Inc. */
/* */
/* This software is copyrighted by and is the sole property of Express */
/* Logic, Inc. All rights, title, ownership, or other interests */
/* in the software remain the property of Express Logic, Inc. This */
/* software may only be used in accordance with the corresponding */
/* license agreement. Any unauthorized use, duplication, transmission, */
/* distribution, or disclosure of this software is expressly forbidden. */
/* */
/* This Copyright notice may not be removed or modified without prior */
/* written consent of Express Logic, Inc. */
/* */
/* Express Logic, Inc. reserves the right to modify this software */
/* without notice. */
/* */
/* Express Logic, Inc. */
/* 11440 West Bernardo Court info@expresslogic.com */
/* Suite 366 http://www.expresslogic.com */
/* San Diego, CA 92127 */
/* */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** ThreadX Component */
/** */
/** Application Interface (API) */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* APPLICATION INTERFACE DEFINITION RELEASE */
/* */
/* tx_api.h PORTABLE C */
/* 3.0f */
/* AUTHOR */
/* */
/* William E. Lamie, Express Logic, Inc. */
/* */
/* DESCRIPTION */
/* */
/* This file defines the basic Application Interface (API) to the */
/* high-performance ThreadX real-time kernel. All service prototypes */
/* and data structure definitions are defined in this file. */
/* Please note that basic data type definitions and other architecture-*/
/* specific information is contained in the file tx_port.h. */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 12-31-1996 William E. Lamie Initial Version 3.0 */
/* 07-04-1997 William E. Lamie Added port-specific extension */
/* define to thread control */
/* block for port-specific */
/* information, resulting in */
/* version 3.0a. */
/* 11-11-1997 William E. Lamie Modified several comments */
/* and added return value for */
/* lifting delayed suspend */
/* condition by the thread */
/* resume service, resulting */
/* in version 3.0b. */
/* 01-01-1999 William E. Lamie Modified comment(s), */
/* resulting in version 3.0e. */
/* 11-01-1999 William E. Lamie Modified comment(s), */
/* resulting in version 3.0f. */
/* */
/**************************************************************************/
#ifndef TX_API
#define TX_API
/* Determine if a C++ compiler is being used. If so, ensure that standard
C is used to process the API information. */
#ifdef __cplusplus
/* Yes, C++ compiler is present. Use standard C. */
extern "C" {
#endif
/* Include the port-specific data type file. */
#include "tx_port.h"
/* Define basic constants for the ThreadX kernel. */
/* API input parameters and general constants. */
#define TX_NO_WAIT 0
#define TX_WAIT_FOREVER 0xFFFFFFFFUL
#define TX_AND 2
#define TX_AND_CLEAR 3
#define TX_OR 0
#define TX_OR_CLEAR 1
#define TX_1_ULONG 1
#define TX_2_ULONG 2
#define TX_4_ULONG 4
#define TX_8_ULONG 8
#define TX_16_ULONG 16
#define TX_NO_TIME_SLICE 0
#define TX_MAX_PRIORITIES 32
#define TX_AUTO_START 1
#define TX_DONT_START 0
#define TX_AUTO_ACTIVATE 1
#define TX_NO_ACTIVATE 0
#define TX_TRUE 1
#define TX_FALSE 0
#define TX_NULL 0
#define TX_FOREVER 1
/* Thread execution state values. */
#define TX_READY 0
#define TX_COMPLETED 1
#define TX_TERMINATED 2
#define TX_SUSPENDED 3
#define TX_SLEEP 4
#define TX_QUEUE_SUSP 5
#define TX_SEMAPHORE_SUSP 6
#define TX_EVENT_FLAG 7
#define TX_BLOCK_MEMORY 8
#define TX_BYTE_MEMORY 9
#define TX_IO_DRIVER 10
#define TX_FILE 11
#define TX_TCP_IP 12
/* API return values. */
#define TX_SUCCESS 0x00
#define TX_DELETED 0x01
#define TX_NO_MEMORY 0x10
#define TX_POOL_ERROR 0x02
#define TX_PTR_ERROR 0x03
#define TX_WAIT_ERROR 0x04
#define TX_SIZE_ERROR 0x05
#define TX_GROUP_ERROR 0x06
#define TX_NO_EVENTS 0x07
#define TX_OPTION_ERROR 0x08
#define TX_QUEUE_ERROR 0x09
#define TX_QUEUE_EMPTY 0x0A
#define TX_QUEUE_FULL 0x0B
#define TX_SEMAPHORE_ERROR 0x0C
#define TX_NO_INSTANCE 0x0D
#define TX_THREAD_ERROR 0x0E
#define TX_PRIORITY_ERROR 0x0F
#define TX_START_ERROR 0x10
#define TX_DELETE_ERROR 0x11
#define TX_RESUME_ERROR 0x12
#define TX_CALLER_ERROR 0x13
#define TX_SUSPEND_ERROR 0x14
#define TX_TIMER_ERROR 0x15
#define TX_TICK_ERROR 0x16
#define TX_ACTIVATE_ERROR 0x17
#define TX_THRESH_ERROR 0x18
#define TX_SUSPEND_LIFTED 0x19
/* Define the control block definitions for all system objects. */
/* Define the basic timer management structures. These are the structures
used to manage thread sleep, timeout, and user timer requests. */
/* Define the common internal timer control block. */
typedef struct TX_INTERNAL_TIMER_STRUCT
{
/* Define the remaining ticks and re-initialization tick value. */
ULONG tx_remaining_ticks;
ULONG tx_re_initialize_ticks;
/* Need to define remaining ticks, type, next and previous pointers, etc. */
VOID (*tx_timeout_function)(ULONG);
ULONG tx_timeout_param;
/* Define the next and previous internal link pointers for active
internal timers. */
struct TX_INTERNAL_TIMER_STRUCT
*tx_active_next,
*tx_active_previous;
/* Keep track of the pointer to the head of this list as well. */
struct TX_INTERNAL_TIMER_STRUCT
**tx_list_head;
} TX_INTERNAL_TIMER;
/* Define the timer structure utilized by the application. */
typedef struct TX_TIMER_STRUCT
{
/* Define the timer ID used for error checking. */
ULONG tx_timer_id;
/* Define the timer's name. */
CHAR_PTR tx_timer_name;
/* Define the expiration routine, parameter, initial expiration, and
reschedule expiration. */
/* Define the actual contents of the timer. This is the block that
is used in the actual timer expiration processing. */
TX_INTERNAL_TIMER tx_timer_internal;
/* Define the pointers for the created list. */
struct TX_TIMER_STRUCT
*tx_timer_created_next,
*tx_timer_created_previous;
} TX_TIMER;
typedef TX_TIMER * TX_TIMER_PTR;
/* ThreadX thread control block structure follows. Additional fields
can be added providing they are added after the information that is
referenced in the port-specific assembly code. */
typedef struct TX_THREAD_STRUCT
{
/* The first section of the control block contains critical
information that is referenced by the port-specific
assembly language code. Any changes in this section could
necessitate changes in the assembly language. */
ULONG tx_thread_id; /* Control block ID */
ULONG tx_run_count; /* Thread's run counter */
VOID_PTR tx_stack_ptr; /* Thread's stack pointer */
VOID_PTR tx_stack_start; /* Stack starting address */
VOID_PTR tx_stack_end; /* Stack ending address */
ULONG tx_stack_size; /* Stack size */
ULONG tx_time_slice; /* Current time-slice */
ULONG tx_new_time_slice; /* New time-slice */
/* Define pointers to the next and previous ready threads. */
struct TX_THREAD_STRUCT
*tx_ready_next,
*tx_ready_previous;
/* Define the port extension field. This typically is defined
to white space, but some ports of ThreadX may need to have
additional fields in the thread control block. This is
defined in the file tx_port.h. */
TX_THREAD_PORT_EXTENSION
/***************************************************************/
/* Nothing after this point is referenced by the target-specific
assembly language. Hence, information after this point can
be added to the control block providing the complete system
is recompiled. */
CHAR_PTR tx_thread_name; /* Pointer to thread's name */
UINT tx_priority; /* Priority of thread (0-31)*/
UINT tx_state; /* Thread's execution state */
UINT tx_delayed_suspend; /* Delayed suspend flag */
UINT tx_suspending; /* Thread suspending flag */
UINT tx_preempt_threshold; /* Preemption threshold */
ULONG tx_priority_bit; /* Priority ID bit */
/* Define the thread's entry point and input parameter. */
VOID (*tx_thread_entry)(ULONG);
ULONG tx_entry_parameter;
/* Define the thread's timer block. This is used for thread
sleep and timeout requests. */
TX_INTERNAL_TIMER
tx_thread_timer;
/* Define the thread's cleanup function and associated data. This
is used to cleanup various data structures when a thread
suspension is lifted or terminated either by the user or
a timeout. */
VOID (*tx_suspend_cleanup)(struct TX_THREAD_STRUCT *);
VOID_PTR tx_suspend_control_block;
struct TX_THREAD_STRUCT
*tx_suspended_next,
*tx_suspended_previous;
ULONG tx_suspend_info;
VOID_PTR tx_additional_suspend_info;
UINT tx_suspend_option;
UINT tx_suspend_status;
/* Define pointers to the next and previous threads in the
created list. */
struct TX_THREAD_STRUCT
*tx_created_next,
*tx_created_previous;
} TX_THREAD;
typedef TX_THREAD * TX_THREAD_PTR;
/* Define the semaphore structure utilized by the application. */
typedef struct TX_SEMAPHORE_STRUCT
{
/* Define the semaphore ID used for error checking. */
ULONG tx_semaphore_id;
/* Define the semaphore's name. */
CHAR_PTR tx_semaphore_name;
/* Define the actual semaphore count. A zero means that no semaphore
instance is available. */
ULONG tx_semaphore_count;
/* Define the semaphore suspension list head along with a count of
how many threads are suspended. */
struct TX_THREAD_STRUCT *tx_semaphore_suspension_list;
ULONG tx_semaphore_suspended_count;
/* Define the created list next and previous pointers. */
struct TX_SEMAPHORE_STRUCT
*tx_semaphore_created_next,
*tx_semaphore_created_previous;
} TX_SEMAPHORE;
typedef TX_SEMAPHORE * TX_SEMAPHORE_PTR;
/* Define the queue structure utilized by the application. */
typedef struct TX_QUEUE_STRUCT
{
/* Define the queue ID used for error checking. */
ULONG tx_queue_id;
/* Define the queue's name. */
CHAR_PTR tx_queue_name;
/* Define the message size that was specified in queue creation. */
UINT tx_queue_message_size;
/* Define the total number of messages in the queue. */
ULONG tx_queue_capacity;
/* Define the current number of messages enqueue and the available
queue storage space. */
ULONG tx_queue_enqueued;
ULONG tx_queue_available_storage;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -