Notes on learning RT-Thread——程序编写的“套路”

版权声明:转载引用请标明出处 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()部分,主要包括:

  1. 操作量的创建
    例如互斥量,信号量等的创建
    /* 创建一个动态互斥量 */
    dynamic_mutex = rt_mutex_create("dmutex", RT_IPC_FLAG_FIFO);
    if (dynamic_mutex == RT_NULL)
    {
        rt_kprintf("create dynamic mutex failed.\n");
        return -1;
    }
  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);
  • ……

仅供学习参考,不喜勿喷@_@

猜你喜欢

转载自blog.csdn.net/qq_42860728/article/details/89475367