文章目录
一、前言
RTX5与其他RTOS一样,创建线程的方式分别静态堆栈与动态堆栈两种。
今天先学习使用静态堆栈方式创建RTX5线程,分别是LED线程与Start线程。LED线程用于翻转两个LED,Start线程用于创建其他线程,并printf一些信息出来。
静态堆栈方式创建线程,线程的内存由用户自己分配,但RTX5也要继续为线程分配80bytes的内存。如果喜欢用静态堆栈方式创建线程的话,可以将RTX5的Global Dynamic Memory size设置小一些,因为Global Dynamic Memory是用于动态堆栈方式,且RTX5默认将它设置32K啊。所以,如果只用静态堆栈方式创建线程的话,必须将Global Dynamic Memory设小一些,将内存预留出来。
一定要多看官方手册。官方手册上对应的内容:
二、代码
2.1、main.h
可以不包含 “rtx_os.h”,因为不需要使用控制块方式创建线程。
2.1、main.c
至于,堆栈的类型为什么是uint64_t,官方有说明:
最后,编译程序。
三、DEBUG
从Event Recorder的Debug Viewer看到Start线程正在运行。观察板子,两个LED也在闪烁。
四、细节补充
4.1、使用静态堆栈方式创建的线程只占用一点点RTX5上的内存
静态堆栈方式创建线程,相当于用户自己为线程分配内存。虽然说静态堆栈方式创建线程时,线程的内存由用户自己分配,但是并不代表完全不需要RTX5为线程继续分配内存。经过使用Event Recorder调试发现,静态堆栈方式创建线程,RTX5也需要继续为此线程分配80bytes内存。
4.2、通过RTX RTOS窗口,可以观察线程的细节。
4.3、不建议将控制块定义为全局变量,应该由RTX动态分配。
osThreadAttr_t结构体的成员cb_mem使用默认NULL,cb_size使用默认0。它们都使用默认,RTX5负责管理控制块。
cb_mem与cb_size不使用默认值时,将无法在RTX RTOS上查看到线程的细节。