文章目录
一、前言
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上查看到线程的细节。

&spm=1001.2101.3001.5002&articleId=117340434&d=1&t=3&u=8d9e0019611f47d5b8b71ed2e7aabf3a)
930

被折叠的 条评论
为什么被折叠?



