文章目录
4 Description of ThreadX Services
4.1 thread相关函数
tx_thread_create
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);
}
- 其中my_thread是一个TX_THREAD的结构体
- “My Thread” :线程名字
- my_thread_entry:线程实体程序入口
- 0x1234:传递给线程条目的32位值第一次执行时的功能。 这个的用途输入完全由应用程序确定。
- first_unused_memory:栈起始地址
- 1024:栈大小
- 3:优先级
- 3:抢占阈值
- TX_NO_TIME_SLICE:禁用时间切片
- TX_AUTO_START:指定线程是否立即启动或处于暂停状态。 法律选择是TX_AUTO_START(0x01)TX_DONT_START(0x00)。 如果是TX_DONT_START指定后,应用程序必须稍后调用tx_thread_resume以便线程运行。
tx_thread_delete
UINT tx_thread_delete(TX_THREAD *thread_ptr)
该服务删除指定的应用程序线程。 自指定线程必须处于终止或完成状态,该服务不能从试图删除自身的线程中调用。
tx_thread_sleep
将当前的thread挂起 n 个timer_ticks。
tx_thread_suspend & tx_thread_resume
- tx_thread_suspend此服务挂起指定的应用程序线程。 挂起之后,必须要用thread_resume来重新执行。
- 该服务恢复或准备执行一个已之前被tx_thread_suspend调用挂起。 另外,这个服务恢复没有自动启动而创建的线程。
tx_thread_terminate
UINT tx_thread_terminate(TX_THREAD *thread_ptr)
该服务终止指定的应用程序线程,无论线程是否被挂起。 线程可以调用此服务来终止自身。
4.2 tx_byte相关函数
tx_byte_pool_create
tx_byte_allocate
tx_byte_pool_create(&byte_pool_0, "byte pool 0", first_unused_memory, DEMO_BYTE_POOL_SIZE);//9120btye
tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);//分配1024byte
该服务在指定的区域中创建一个内存字节池,然后分配给pointer。
- bytrr_pool_0:类似thread也是要建立一个架构体变量
- “byte pool 0”:mem pool name
- first_unused_memory:起始地址
- size
4.3 tx_mutex相关函数
mutex内访问的资源,其他的线程不可以再去访问。
tx_mutex_create
tx_mutex_create(&my_mutex, "my_mutex", TX_NO_INHERIT);
- My_mutex:控制块
- “my mutex” :名字
- 指定此互斥锁是否支持优先级继承。 如果此值为TX_INHERIT,然后支持优先级继承。 但是,如果指定了TX_NO_INHERIT,优先级此互斥体不支持继承。
该服务尝试获取指定互斥锁的独占所有权。 如果调用线程已经拥有该互斥锁,则将增加一个内部计数器,并返回成功状态。
如果互斥锁由另一个线程拥有,并且该线程具有更高的优先级,并且在创建互斥锁时指定了优先级继承,则优先级较低的线程的优先级将暂时提高到调用线程的优先级。
tx_mutex_get
tx_mutex_get(&my_mutex, TX_WAIT_FOREVER);
得到互斥量
tx_mutex_put
tx_mutex_put(&my_mutex);
4.4 tx_event_flag相关函数
tx_event_flags_create
UINT tx_event_flags_create(TX_EVENT_FLAGS_GROUP *group_ptr, CHAR *name_ptr)
tx_event_flags_get
UINT tx_event_flags_get(TX_EVENT_FLAGS_GROUP *group_ptr,ULONG requested_flags, \
UINT get_option,ULONG *actual_flags_ptr, ULONG wait_option)
- group_ptr:控制块
- requested_flags:32位无符号变量,代表请求的事件标志。用户自定义这个事件的event_flag
- get_option:
TX_AND (0x02):所有事件需要被present
TX_AND_CLEAR (0x03):清楚所有
TX_OR (0x00):指定某个事件
TX_OR_CLEAR (0x01): - actural_flag_ptr:
- option:
TX_NO_WAIT (0x00000000)
TX_WAIT_FOREVER (0xFFFFFFFF)
timeout value (0x00000001through 0xFFFFFFFE)
tx_event_flags_set
UINT tx_event_flags_set(TX_EVENT_FLAGS_GROUP *group_ptr,ULONG flags_to_set,UINT set_option)
4.5 tx_timer相关函数
tx_timer_create
tx_timer_create (&stats_timer, "stats_timer", print_stats,
0x1234, 500, 500, TX_AUTO_ACTIVATE);
- stats_timer:控制块
- “status_timer”:timer名字
- print_stats:timer超时之后的调用函数
- 0x1234:超时时间
- 500:初始ticks
- 500:指定所有计时器的刻度数在第一个到期之后。 零参数使计时器成为一次性计时器。否则,对于定期计时器,合法值范围从1到0xFFFFFFFF。
- TX_AUTO_ACTIVATE:自动执行
tx_timer_get
start_time = tx_time_get();
4.7 tx_queue
tx_queue_create
tx_queue_create (&my_queue, "my_queue", QUEUE_MSG_SIZE,
queue_storage, QUEUE_TOTAL_SIZE);
queue_storage:队列的起始地址
tx_queue_send
UINT tx_queue_send(TX_QUEUE *queue_ptr,
VOID *source_ptr, ULONG wait_option)
tx_queue_receive
UINT tx_queue_receive(TX_QUEUE *queue_ptr,
VOID *destination_ptr, ULONG wait_option)