这里存在一个明显的问题,即,一般来说锚点所在的c源文件并不知道用户目标函数的原型(function prototype),因此编译器会报告"implicit function declaration"一类的警告,甚至会将其视作编译错误。为了避免这类情况的发生,我们可以在定义插入宏时顺便引入对应的函数原型: externvoid...
RT-Thread实时操作系统为空闲线程提供了钩子函数(钩子函数:用户提供的一段代码,在系统运行的某一路径上设置一个钩子,当系统经过这个位置时,转而执行这个钩子函数,然后再返回到它的正常路径上),可以让系统在空闲的时候执行一些特定的任务,例如系统运行指示灯闪烁,电源管理等。 二、钩子函数 空闲钩子函数是空闲线程的钩...
在我们的rt_thread_create函数中,如果成功返回值是 线程句柄,类型为rt_thread_t,我们前面又讲过rt_thread_t是一个结构体指针,这个结构体是线程控制块结构体,所以在上面示例代码中返回句柄的意思 ,就是返回了一个指针,这个指针指向线程控制块。 (如果指针,指向指针的指针不明白,这是C语言基础知识,可以查看相关资料...
线程通过调用函数 rt_thread_create/init() 进入到初始状态(RT_THREAD_INIT);初始状态的线程通过调用函数 rt_thread_startup() 进入到就绪状态(RT_THREAD_READY);就绪状态的线程被调度器调度后进入运行状态(RT_THREAD_RUNNING);当处于运行状态的线程调用 rt_thread_delay(),rt_sem_take()rt_mutex_take(),rt_...
首先定义一个线程控制块指针(线程句柄),然后调用rt_thread_create()函数创建线程。 此线程的名字为“thread_test”;线程入口函数thread_entry;入口函数的参数为RT_NULL,无入口参数;线程栈的大小为 512 字节;线程优先级为 10;线程时间片为 5。 2. 静态创建线程 ...
在 uCOS、FreeRTOS 中,叫任务,RT-Thread 叫线程,只是叫的名称不一样,内容都是差不多的。然后再大概说说怎么计算的问题。也就是在空闲钩子函数里面,我们需要干什么事情才能到达CPU计算的目的。首先,第一步肯定是设置钩子函数,其次就是钩子函数该怎么写的问题。这个网上一搜就出现了(鱼鹰也是网上搜的代码),然后就要...
一、RT-Thread线程操作函数 RT-Thread线程操作包含:创建 / 初始化线程、启动线程、运行线程、删除 / 脱离线程。 1.1 动态创建线程 函数比较简单,具体的看注释就好(本文余下的函数介绍类似,看注释): /* demo,用来接收动态线程返回的句柄 比如led2_thread = rt_thread_create(...); */static...
首先定义一个线程控制块指针(线程句柄),然后调用rt_thread_create()函数创建线程。 此线程的名字为“thread_test”;线程入口函数thread_entry;入口函数的参数为RT_NULL,无入口参数;线程栈的大小为 512 字节;线程优先级为 10;线程时间片为 5。 2. 静态创建线程 ...
内存堆管理用于管理一段连续的内存空间,在第三章中介绍过 RT-Thread 的内存分布情况,如下图所示,RT-Thread 将“ZI 段结尾处” 到内存尾部的空间用作内存堆。 图: RT-Thread 内存分布 内存堆可以在当前资源满足的情况下,根据用户的需求分配任意大小的内存块。而当用户不需要再使用这些内存块时,又可以释放回堆...
可以插入任意代码块——其中就包括函数指针、对普通函数的调用等等 2、使用方法 2.1 总开关 在rtconfig.h定义宏开关RT_USING_HOOK将开启HOOK功能。默认情况下,在该宏未定义时,所有HOOK功能都将被强制关闭,不会生成任何代码。 2.2 向前兼容 在4.1.0之前,RT-Thread提供了一套基于函数指针运行时注册的HOOK机制。新版...