这里存在一个明显的问题,即,一般来说锚点所在的c源文件并不知道用户目标函数的原型(function prototype),因此编译器会报告"implicit function declaration"一类的警告,甚至会将其视作编译错误。为了避免这类情况的发生,我们可以在定义插入宏时顺便引入对应的函数原型: externvoid...
/* 线程栈起始地址做内存对齐 */ALIGN(RT_ALIGN_SIZE)char thread_stack[1024];/* 定义线程控制块 */struct rt_thread thread;/* 线程入口函数 */void thread_entry(void *parameter){...}/* 初始化线程控制块 */rt_thread_init(&thread, "thread_test", thread_entry,RT_NULL, &thread_stack[0], ...
在我们的rt_thread_create函数中,如果成功返回值是 线程句柄,类型为rt_thread_t,我们前面又讲过rt_thread_t是一个结构体指针,这个结构体是线程控制块结构体,所以在上面示例代码中返回句柄的意思 ,就是返回了一个指针,这个指针指向线程控制块。 (如果指针,指向指针的指针不明白,这是C语言基础知识,可以查看相关资料...
rt_thread_idle_entry,//空闲线程入口函数RT_NULL,//入口函数参数为空&rt_thread_stack[0],//空闲线程栈地址sizeof(rt_thread_stack),//栈大小,默认为128字节,若使用钩子函数或动态堆时为256字节,在idle.c中宏定义RT_THREAD_PRIORITY_MAX -1,//空闲线程优先级最低32);//时间片为32个时钟节拍/*startup*...
内存堆管理用于管理一段连续的内存空间,在第三章中介绍过 RT-Thread 的内存分布情况,如下图所示,RT-Thread 将“ZI 段结尾处” 到内存尾部的空间用作内存堆。 图: RT-Thread 内存分布 内存堆可以在当前资源满足的情况下,根据用户的需求分配任意大小的内存块。而当用户不需要再使用这些内存块时,又可以释放回堆...
在 uCOS、FreeRTOS 中,叫任务,RT-Thread 叫线程,只是叫的名称不一样,内容都是差不多的。然后再大概说说怎么计算的问题。也就是在空闲钩子函数里面,我们需要干什么事情才能到达CPU计算的目的。首先,第一步肯定是设置钩子函数,其次就是钩子函数该怎么写的问题。这个网上一搜就出现了(鱼鹰也是网上搜的代码),然后就要...
首先定义一个线程控制块指针(线程句柄),然后调用rt_thread_create()函数创建线程。 此线程的名字为“thread_test”;线程入口函数thread_entry;入口函数的参数为RT_NULL,无入口参数;线程栈的大小为 512 字节;线程优先级为 10;线程时间片为 5。 2. 静态创建线程 ...
一、RT-Thread线程操作函数 RT-Thread线程操作包含:创建 / 初始化线程、启动线程、运行线程、删除 / 脱离线程。 1.1 动态创建线程 函数比较简单,具体的看注释就好(本文余下的函数介绍类似,看注释): /* demo,用来接收动态线程返回的句柄 比如led2_thread = rt_thread_create(...); */static...
本文使用了rt-thread自带的钩子函数和显示函数进行了实验,从rt-thread自带的延时函数rt_thread_delay()函数入手,对rt-thread系统的调度器进行分析。主要参考资料是野火的rt-thread手册和rt-thread官方文档,汇编部分的指令是参考的cortex-M3权威参考手册,实验版本是rt-thread3.1.5 ...
这篇重点介绍 RT-thread 提供的线程管理相关的接口函数,以及实战演示。 线程创建 在RT-Thread 中,创建一个线程的方式有两种: 动态创建方式,线程的栈和线程控制块由系统从动态内存堆上分配。 静态创建方式,线程的栈和线程控制块由用户定义分配。 1. 动态创建线程 动态创建线程,用户不需要考虑线程栈和线程控制块空间...