ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

freertos与rt-thread在应用上的一些区别

2021-09-27 10:03:06  阅读:785  来源: 互联网

标签:rt freertos thread 队列 中断 API


1、中断管理上的区别
freertos进入临界区时,不响应优先级低于设定阈值的中断,此时若需要一个绝对的定时时间来做一些采样业务,那么采样周期就有可能被打断。
若把中断优先级设定高于设定阈值,就不能使用freertos的API,但是这个中断又需要用到队列来存储数据。使用全局变量就有悖使用操作系统的初衷。
rt-thread进入临界区时,仅是不切换任务,对于所有中断都是可以响应的,这对于需要绝对周期的采样任务是友好的,而且所有中断里也可以使用API函数。
但是,对于临界区里的操作,也有被众多中断打断的风险,若是该临界区对操作时序的要求较高就会有些许影响。
在该管理上,对于我需要使用内部API,又需要采样中断的绝对时间,显然rt-thread更符合应用需求

基于中断的管理,freertos在中断里使用内部API,出中断时还需多一步操作检查任务切换,较为麻烦

rt-thread与freertos内部API,版本对比(FreeRTOS-9.0.0)(rtthread-nano-master-3.1.5)
freertos的内部API比rt—thread丰富,举以下例子:
1、软件定时器:
获取定时器状态:
freertos:xTimerIsTimerActive(timer)
rt-thread:操作上多一步
uint8_t state;
rt_timer_control(timer, RT_TIMER_CTRL_GET_STATE, &state)
获取定时器周期:
freertos:xTimerGetPeriod(timer)
rt-thread:无
freertos几乎提供了所有应用上可能用到的API

2、队列:
rt-thread:
仅提供了写入队列尾,写入队列头、读出删除、复位操作
freertos:
在此基础上同时提供了
覆盖写入:xQueueOverwrite(Queue, pxStack);
读出不删除:xQueuePeek(Queue,pxStack,0);
这个API在一些应用上有很好的用处,例如创建一个队列,周期性的向其写入,但只需保存最新的数据即可,覆盖写入就符合需求
相同如对于某一队列,在不同的任务中需要读出,且该队列只会在某处保存写入一次,就需要在读出时不清除队列数据,读出不删除队列就符合需求。

3、事件
rt-thread
对于事件的操作也只有写入、读出、复位
freertos
在此基础上同时提供了
对事件bit位的单独操作
等待某一bit位:xEventGroupWaitBits()
清除某一bit位:xEventGroupClearBits()

仅限于以上提到的两个版本对比,freertos的内部API比rt-thread丰富,使用上比较灵活,可以适应各种复杂的应用场景。但其他的rtt版本还没未看过。
rt-thread类linux提供了驱动层,使应用层和硬件层分离开(当然也可以不用),而freertos的硬件驱动与应用结合在一起,提供任务调度,内存管理,消息队列等
 

标签:rt,freertos,thread,队列,中断,API
来源: https://blog.csdn.net/lnwechag/article/details/120502624

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有