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仍然被系统认为差一个系统节拍
#include //使用GPIO驱动框架必须包含该头文件
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
void rt_pin_write(rt_base_t pin, rt_base_t value)
参数一索引表在drv_gpio.c文件中,参数二相关宏定义如下
#define PIN_LOW 0x00
#define PIN_HIGH 0x01
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%左右最为稳妥!