文章目录
在前一章我们学习了怎么去创建一个静态线程,但是这样需要预先定义好全局变量。所以这一章我们介绍一下怎么去创建动态线程,这也是我们经常使用的方式。
前言
我们创建一个线程,线程使用的栈和线程控制块是在创建线程的时候RT_Thread动态分配的,并不是预先定义好的全局变量。
动态内存空间的堆从哪里来?
在SRAM里面定义一个大数组供RT_Thread的动态内存分配函数使用,这些代码在board.c开头实现。
一、测试LED
请参考上一章的说明。
二、创建动态线程
1.定义线程栈
使用动态内存的时候,线程栈在线程创建的时候创建,不用跟使用静态内存那样要预先定义好一个全局的静态的栈空间。
2.定义线程控制块指针
线程控制块是在线程创建的时候创建,线程创建函数会返回一个指针,用于指向线程控制块,所以要预先为线程栈定义一个线程控制块指针。
3.定义线程函数
和静态时定义的一样。(请看上一章)
4.创建线程
在使用静态内存时,使用rt_thread_init()来初始化一个线程,使用动态内存时,使用rt_thread_create()函数来创建一个线程。
5.启动线程
三、编译下载
可能出现的问题
当我们出现这个错误,是因为我们没有开启使用堆。
开始使用堆
在编译
效果
LED1会以500ms频率闪烁。
四、扩展实验
这和前一章的一样,可以自行去照猫画虎。