FeeRTOS功能和特点编辑用户可配置内核功能多平台的支持提供一个高层次的信任代码的完整性目标代码小,简单易用遵循MISRA-C标准的编程规范强大的执行跟踪功能堆栈溢出检测没有限制的任务数量没有限制的任务优先级多个任务可以分配相同的优先权队列,二进制信号量,计数信号灯和递归通信和同步的任务优先级继承免费开源的源代码F
eeRTOS原理与实现编辑任务调度机制是嵌入式实时 *** 作系统的一个重要概念,也是其核心技术
1 学习FreeRTOS的任务栈溢出检测方法一(模拟栈溢出)。
2 FreeRTOS的任务栈溢出检测方法一说明:
a FreeRTOSConfigh文件中配置宏定义:
#define configCHECK_FOR_STACK_OVERFLOW 1
b 在任务切换时检测任务栈指针是否过界了,如果过界了,在任务切换的时候会触发栈溢出钩子函数。
void vApplicationStackOverflowHook( TaskHandle_t xTask,
signed char pcTaskName );
用户可以在钩子函数里面做一些处理。本实验是在钩子函数中打印出现栈溢出的任务。
c 这种方法不能保证所有的栈溢出都能检测到。比如任务在执行的过程中发送过栈溢出。任务切换前
栈指针又恢复到了正常水平,这种情况在任务切换的时候是检测不到的。又比如任务栈溢出后,把
这部分栈区的数据修改了,这部分栈区的数据不重要或者暂时没有用到还好,如果是重要数据被修
改将直接导致系统进入硬件异常。这种情况下,栈溢出检测功能也是检测不到的。
d 本实验就是简单的在任务vTaskUserIF中申请过大的栈空间,模拟出一种栈溢出的情况,溢出后触
发钩子函数,因为我们将溢出部分的数据修改了,进而造成进入硬件异常。
#define configCHECK_FOR_STACK_OVERFLOW 1
/
函 数 名: StackOverflowTest
功能说明: 任务栈溢出测试
形 参: 无
返 回 值: 无
/
static void StackOverflowTest(void)
{
int16_t i;
uint8_t buf[2048];
(void)buf; / 防止警告 /
/
1 为了能够模拟任务栈溢出,并触发任务栈溢出函数,这里强烈建议使用数组的时候逆着赋值。
因为对于M3和M4内核的MCU,堆栈生长方向是向下生长的满栈。即高地址是buf[2047], 低地址
是buf[0]。如果任务栈溢出了,也是从高地址buf[2047]到buf[0]的某个地址开始溢出。
因此,如果用户直接修改的是buf[0]开始的数据且这些溢出部分的数据比较重要,会直接导致
进入到硬件异常。
2 栈溢出检测是在任务切换的时候执行的,我们这里加个延迟函数,防止修改了重要的数据导致直接
进入硬件异常。
3 任务vTaskTaskUserIF的栈空间大小是2048字节,在此任务的入口已经申请了栈空间大小
------uint8_t ucKeyCode;
------uint8_t pcWriteBuffer[500];
这里再申请如下这么大的栈空间
-------int16_t i;
-------uint8_t buf[2048];
必定溢出。
/
for(i = 2047; i >= 0; i--)
{
buf[i] = 0x55;
vTaskDelay(1);
}
}
/
函 数 名: vApplicationStackOverflowHook
功能说明: 栈溢出的钩子函数
形 参: xTask 任务句柄
pcTaskName 任务名
返 回 值: 无
/
void vApplicationStackOverflowHook( TaskHandle_t xTask, signed char pcTaskName )
{
printf("任务:%s 发现栈溢出\r\n", pcTaskName);
}
实验目的:
1 学习FreeRTOS的任务栈溢出检测方法二(模拟栈溢出)。
2 FreeRTOS的任务栈溢出检测方法二说明:
a FreeRTOSConfigh文件中配置宏定义:
#define configCHECK_FOR_STACK_OVERFLOW 2
b 在任务切换时检测任务栈指针是否过界了,如果过界了,在任务切换的时候会触发栈溢出钩子函数。
void vApplicationStackOverflowHook( TaskHandle_t xTask,
signed char pcTaskName );
用户可以在钩子函数里面做一些处理。本实验是在钩子函数中打印出现栈溢出的任务。
c 任务创建的时候将任务栈所有数据初始化为0xa5,任务切换时进行任务栈检测的时候检测末尾
的16个字节是否都是0xa5,通过这种方式来检测任务栈是否溢出了。相比方法一,这种方法的速度
稍慢些,但是这样就有效的避免了方法一里面的部分情况。不过依然不能保证所有的栈溢出都能检测
到,比如任务栈末尾的16个字节没有用到,即没有被修改,但是任务栈已经溢出了,这种情况是检
测不到的。另外任务栈溢出后,任务栈末尾的16个字节没有修改,但是溢出部分的栈区的数据修改
了,这部分栈区的数据不重要或者暂时没有用到还好,如果是重要数据被修改将直接导致系统进入硬
件异常。这种情况下,栈溢出检测功能也是检测不到的。
d 本实验就是简单的在任务vTaskUserIF中申请过大的栈空间,模拟出一种栈溢出的情况,溢出后触
发钩子函数,因为我们将溢出部分的数据修改了,进而造成进入硬件异常。
#define configCHECK_FOR_STACK_OVERFLOW 2
函数内容和上面一样:
static void StackOverflowTest(void)
void vApplicationStackOverflowHook( TaskHandle_t xTask, signed char pcTaskName )
何为 *** 作系统? 相信很大一部分读者对其没有一个概念,我在这里为大家,做一点解释: *** 作系统(Operating System 缩写成OS)是一种特殊的计算机系统软件,是用于管理和控制计算机系统的软、硬件资源,使用它们从分高校的工作,并使用户方便、合理的有效利用这些资源的程序的集合,是用户与计算机物理设备之间的接口,是各种应用软件赖以运行的基础。------- 简单来说: *** 作系统相当于人体整个大脑+神经网络,控制我们行走,完成各项动作。当然, *** 作系统不能进行独立的思考。
为什么要做 *** 作系统?
当前 *** 作系统电脑主流 *** 作系统: Windows,macOS,Linux的各种发行版和定制版(像某些国产 *** 作系统);
移动设备: Android(原版),iOS(苹果手机),padOS(iPad),各种Android深度定制版(小米的MIUI,华为的EMUI);
实时 *** 作系统---- 这类系统的最大特色是实时性,就是在接收数据、指令后尽快处理,得出处理结果后会在规定时间内执行。家庭用户购买的物联网设备都是安装的RTOS。RTOS的种类很多,一般用户常碰见的有:
1、RT-Thread:一个免费、开源的系统,诞生于2006年,由一名叫熊谱翔的开发者创立,目前由国内的开源社区维护,是一个地道的国产 *** 作系统,对硬件的要求很低。国内厂商出品的物联网设备,智能空调、共享充电宝、智能电热水器、智能手环、智能手表等等,大部分都运行着RT-Thread,是目前国内做得最成熟、也是装机量最大的物联网系统。
2、FreeRTOS:也是免费、开源的系统,对硬件的要求很低,获得了亚马逊的支持。国外厂商的物联网设备大部分安装的是FreeRTOS。
3、LiteOS:这是华为开发的开源系统,主要运行在支持华为智能家居服务的物联网设备上,还有华为的GT系列智能手表中。
4、QNX:一个闭源的 *** 作系统,而且授权费不低,目前归属于加拿大的黑莓公司。QNX是一个安全性、稳定性极高的 *** 作系统,长期以来被用于核电站、风力发电站、太空飞船、战斗机、CT扫描机、核磁共振扫描机等设备上。家庭用户购买到QNX设备主要有两类:一类是 汽车 ,由于QNX的高安全性、高稳定性,一直受到众多 汽车 厂商的青睐,比如宝马、保时捷、福特、小鹏 汽车 等等,QNX几乎占据车载系统市场60%的市场份额;另一类是扫地机器人,部分品牌的扫地机器人使用的是QNX系统,如iRobot。
介绍完这么多 *** 作系统,市面上已经有这么多 *** 作系统,为什么还需要做 *** 作系统呢?
我下期会带来详细介绍,感谢大家阅读。
freertos临界区不能能进行系统调度。
临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性;当有线程进入临界区时,其他线程或是进程必须等待。总的概括来说就是在执行该程序片段区间,不允许其他东西干扰到。
像我们在 MCU上面跑实时 *** 作系统,一般都是单核单进程的,而一个进程可以拥有多个线程;FreeRTOS是主要以抢占式任务调度为主(通过 PendSV中断),以时间片轮转调度任务为辅(通过 SysTick系统节拍器中断)的实时 *** 作系统,并且可支持同等优先级切换,具体配置可以看 FreeRTOS篇章之 FreeRTOSConfigh分析;而刚讲的线程其实就相当于我们用 xTaskCreate函数创建的各种任务。在这里,我们要实现临界区 *** 作,那么就相当于要保证当前所处在的需要保护的代码片段不要受其他任务(线程)的干扰(例如同等优先级的切换、中断的触发)。
以上就是关于FreeRTOS功能和特点有哪些全部的内容,包括:FreeRTOS功能和特点有哪些、FreeRTOS *** 作系统例程:任务栈溢出检测、好用的国产入门实时 *** 作系统-Oneos等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)