版权声明:转载引用请标明出处 https://blog.csdn.net/qq_42860728/article/details/89475367
在学习RTT的过程中发现一般的程序编写有下面几个特点,所以做一下不成熟的总结供日后套用。
1.声明
以下为例:
#include <rtthread.h>
#define THREAD_PRIORITY 8
#define THREAD_TIMESLICE 5
/* 指向线程控制块的指针 */
static rt_thread_t tid1 = RT_NULL;
static rt_thread_t tid2 = RT_NULL;
static rt_thread_t tid3 = RT_NULL;
static rt_mutex_t mutex = RT_NULL;
/* 指向互斥量的指针 */
static rt_mutex_t dynamic_mutex = RT_NULL;
static rt_uint8_t number1,number2 = 0;
ALIGN(RT_ALIGN_SIZE)
static char thread1_stack[1024];
static struct rt_thread thread1;
此部分包含:
引用库文件,宏定义(线程优先级,时间片,线程栈大小等),数据类型的声明。
线程入口函数
static void thread_entry(void* parameter)
{
…
…
}
在里面填入包括操作量(线程间同步量通信量等)的获取函数,操作过程,释放函数等想要实现的程序。
初始化
大致为:
int rtthread_sample(void)
{
……
操作量的创建等操作
……
rt_thread_init( …… );
rt_thread_startup(……);
}
这个部分相当于arduino程序中的setup()部分,主要包括:
- 操作量的创建
例如互斥量,信号量等的创建
/* 创建一个动态互斥量 */
dynamic_mutex = rt_mutex_create("dmutex", RT_IPC_FLAG_FIFO);
if (dynamic_mutex == RT_NULL)
{
rt_kprintf("create dynamic mutex failed.\n");
return -1;
}
- 线程的初始化和启动
- 创建
rt_thread_t rt_thread_create(const char* name,
void (*entry)(void* parameter),
void* parameter,
rt_uint32_t stack_size,
rt_uint8_t priority,
rt_uint32_t tick);
由于线程创建部分已在头文件中定义过,所以在调用库文件的情况下是不用进行此步操作。
- 初始化
rt_err_t rt_thread_init(struct rt_thread* thread,
const char* name,
void (*entry)(void* parameter), void* parameter,
void* stack_start, rt_uint32_t stack_size,
rt_uint8_t priority, rt_uint32_t tick);
- 启动
rt_err_t rt_thread_startup(rt_thread_t thread);
- ……
仅供学习参考,不喜勿喷@_@