RT-thread常用API函数汇总

一.内存管理:


  • 申请内存:
void *rt_malloc(rt_size_t size)

如果申请成功返回指针,申请失败,返回常量RT_NULL


  • 释放内存:
void rt_free(void *rmem)

  • 批量设置内存数据:
void *rt_memset(void *s, int c, rt_ubase_t count)

  • 在已分配内存的基础上,重新分配内存块的大小(增加或减少),内存原数据不变,如果减少,会截断原内存
void *rt_realloc(void *rmem, rt_size_t newsize)

二.创建线程(任务):


  • 静态创建线程
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_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_startup(rt_thread_t thread)

注意:静态创建线程需要指定任务栈的起始地址以及传入任务控制块参数,而动态创建线程不需要考虑两者,并且动态创建线程的返回值是线程控制块

一个任务被创建之后,需要调用rt_thread_startup才会使这个任务进入就绪列表(开始被任务调度器调度)


三.延时函数:

  • 第一个延时函数很简单,原型如下:
rt_err_t rt_thread_delay(rt_tick_t tick)//延时指定时钟节拍

延时期间,任务挂起,延时结束,任务进入就绪态。还有一个rt_thread_sleep与此函数完全等效


  • 第二个延时函数做了一些细节处理:原型如下:
rt_err_t rt_thread_mdelay(rt_int32_t ms)

毫秒级延时,延时期间,任务挂起,延时结束,任务进入就绪态。

由于系统节拍精度限制,延时误差在1个系统节拍之内。例如,系统节拍周期是10ms,则指定延时502ms,实际上会延时510ms,因为多出来的2ms仍然被系统认为差一个系统节拍


四 .GPIO驱动架构驱动IO:


#include //使用GPIO驱动框架必须包含该头文件

  • IO初始化:
void rt_pin_mode(rt_base_t pin, rt_base_t mode)

对stm32而言,参数二相关宏定义如下

#define PIN_MODE_OUTPUT         0x00
#define PIN_MODE_INPUT          0x01
#define PIN_MODE_INPUT_PULLUP   0x02
#define PIN_MODE_INPUT_PULLDOWN 0x03
#define PIN_MODE_OUTPUT_OD      0x04

  • 写IO
void rt_pin_write(rt_base_t pin, rt_base_t value)

参数一索引表在drv_gpio.c文件中,参数二相关宏定义如下

#define PIN_LOW                 0x00
#define PIN_HIGH                0x01

  • 读IO
int  rt_pin_read(rt_base_t pin)

返回值参考rt_pin_write参数二


五.关于线程栈合适大小的确定

在命令行调用list_thread命令打印出结果如下:


msh >list_thread
thread pri  status      sp     stack size max used left tick  error
------ ---  ------- ---------- ----------  ------  ---------- ---
tshell  20  ready   0x00000080 0x00001000    07%   0x00000005 000
tidle   31  ready   0x00000040 0x00000100    34%   0x00000009 000

第一列:任务名称
第二列:任务优先级
第三列:任务状态
第四列:sp指针
第五列:任务栈大小
第六列:任务在运行过程中占用任务栈的最大比例
第七列:不知道(xix)
第八列:不知道(xixi)


这里重点关注第六列这个数,它反应了任务运行内存占用任务创建时分配的任务栈的最大比例,所以它越小就表明任务栈的浪费越严重,需要把任务栈分配的再小一些,这个比例在70%左右最为稳妥!


六.

你可能感兴趣的:(嵌入式硬件,单片机,stm32)