当前位置: 首页 > news >正文

四海网络网站建设咨询上海十大营销策划公司

四海网络网站建设咨询,上海十大营销策划公司,外汇网站怎么做优外汇网站,wordpress 微信主题下载前言 FreeRTOS的任务有优先级,MCU的硬件中断有中断优先级,这是两个不同的概念,FreeRTOS的任务管理要用到硬件中断,使用FreeRTOS时候也可以使用硬件中断,但是硬件中断ISR的设计要注意一些设计原则,在本节中我…

前言

        FreeRTOS的任务有优先级,MCU的硬件中断有中断优先级,这是两个不同的概念,FreeRTOS的任务管理要用到硬件中断,使用FreeRTOS时候也可以使用硬件中断,但是硬件中断ISR的设计要注意一些设计原则,在本节中我将详细介绍FreeRTOS与硬件中断的关系,以及如何正确使用硬件中断

1、FreeRTOS与中断设置

        中断是MCU的硬件特性,FreeRTOS的运行要用到中断,因为它的上下文切换就是在PendSV中断中进行的,FreeRTOS还需要一个基础时钟产生滴答信号,CubeMX中启动FreeRTOS后,系统会自动对NVIC进行一些设置,这些设置是必要的

        启用FreeRTOS后,中断优先级分组策略自动设置为4位全用于抢占优先级,所以优先级编号是0到15,这个参数在FreeRTOS中不能修改,默认为4

        FreeRTOS可管理的最高优先级默认值为5,也就是说,只有在中断优先级等于或大于5的中断ISR里,才可以调用FreeRTOS的中断安全API函数,也就是带 FromISR 后缀的函数,使用taskDISABLE_INTERRUPTS() 函数也只能屏蔽优先级数值等于或者大于5的中断

2、任务与中断的关系

        MCU的中断有中断优先级,有中断服务例程(ISR),FreeRTOS的任务有任务优先级,有任务函数,这两者具体的特点和区别如下

1、中断是MCU特有的硬件属性,由硬件时间和软件信号引起中断,运行哪个ISR是由硬件决定的,中断的优先级数字越小,表示优先级越高,所以中断的最高优先级是0

2、FreeRTOS的任务是一个纯软件概念,与硬件系统无关,任务的优先级是由开发者在软件中赋予的,任务的优先级数字越低,表示优先级越低,所以任务的最低优先级为0,FreeRTOS的任务调度器决定哪个任务处于运行状态,FreeRTOS在中断优先级15的PendSV中断里进行上下文切换,所以只要有中断ISR在运行,FreeRTOS就无法进行切换

3、任务只有在没有ISR运行的时候才能运行,即使是优先级最低的中断,也可以打断高优先级的任务去执行,而任务不能抢占ISR的运行

        注意对最后一条规则的理解,根据NVIC管理中断的原则,同等抢占优先级的中断是不能发生抢占的,一个优先级为15的RTC唤醒中断是不能抢占优先级为15的SysTick和PendSV中断的执行的,这是因为SysTick和PendSV中断的ISR运行时间很短,RTC唤醒中断的ISR能被及时执行,但如果优先级为15的RTC唤醒中断执行时间很长,那么SysTick和PendSV发生了中断也无法抢占,也就无法进行任务调度,任务函数也无法执行

        所以在实际的软件设计中,一般要尽量简化ISR的功能,使其减少占用CPU的时间,一般的硬件中断都是处理一些数据的接收或发送工作,例如采用中断方式进行ADC数据采集时,只需要把ADC的中断里将数据读取到缓冲区,而对数据进行滤波,频谱计算等耗时间的工作就转移到任务中处理。

3、中断屏蔽和临界段代码

        一个任务函数在执行时,可能会被其他高优先级的任务抢占CPU,也可能被任何一个中断的ISR抢占CPU,在某些时候,任务的某段代码可能非常关键,需要连续执行完,不希望被其他任务或者中断打断,这种程序段被成为临界段,在FreeRTOS中,有函数定义临界段代码,也可以屏蔽系统的部分中断

我们在文件task.h中定义了几个宏函数,定义代码如下,函数功能见注释

//开启临界段代码
#define taskENTER_CRITICAL()		portENTER_CRITICAL()
#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()//退出临界段代码
#define taskEXIT_CRITICAL()			portEXIT_CRITICAL()
#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x )//屏蔽MCU的部分中断 5-15 以及解除屏蔽
#define taskDISABLE_INTERRUPTS()	portDISABLE_INTERRUPTS()
#define taskENABLE_INTERRUPTS()		portENABLE_INTERRUPTS()

4、在ISR中使用FreeRTOS的API函数

        在中断的ISR里,有时会需要调用FreeRTOS的API函数,但是调用普通的API函数可能会存在问题,例如在ISR中调用vTaskDelay()就会出现问题,因为在vTaskDelay会使任务进入阻塞状态,而ISR根本就不是任务,ISR运行的时候,也不能进行任务调度

        为此,FreeRTOS的API函数分为两个版本,一个被成为“任务级”,既普通名称的API函数,另一个被成为“中断级”,既带后缀的FromISR的函数,中断API也被成为中断安全API函数

        FreeRTOS将API函数分为两个版本的好处是:在API的实现代码中,无须判断调用这个API函数的是一个ISR还是一个任务,否则需要增加额外的代码,而且不同的MCU判断ISR和任务函数的机制也不一样,所以两个版本的API函数会提升我们开发的效率

        在ISR中,绝对不能使用任务级API函数,但是在任务函数中,可以使用中断级API函数,此外在FreeRTOS不能管理的高优先级中断的ISR中,连中断级的API函数也不能调用

5、FreeRTOS中断及ISR的设计原则

根据FreeRTOS管理中断的特点,中断优先级和ISR程序设计应该遵循如下原则

1、根据参数的设置,MCU的优先级为0到15的中断,分为FreeRTOS不可屏蔽中断和可屏蔽中断,要根据中断的重要性和功能,为其设置合适的中断优先级,使其成为FreeRTOS的不可屏蔽中断和可屏蔽中断

2、ISR的代码应该尽量简短,应该将比较耗时的处理功能转移到任务函数中实现

3、可屏蔽中断的ISR中,能调用中断级的FreeRTOS API函数,绝不能调用普通的API函数,在不可屏蔽中断的ISR中,不能调用任何的FreeRTOS的API函数

http://www.tj-hxxt.cn/news/71713.html

相关文章:

  • 旅游网页模板图片网站seo优化分析
  • 周口城乡建设网站个人网站免费域名和服务器
  • 网站建设环境分析新人做外贸怎么找国外客户
  • 网站后台做图片尺寸是多大网络营销工具的特点
  • 想自己做网站做推广桂林网站设计
  • 一站式网站建设顾问滁州网站seo
  • 鸡蛋seo网络推广方案湘潭seo公司
  • 厦门中小企业网站制作网站友情链接自动上链
  • 怎么做网站超链接百度搜索指数在线查询
  • 外贸网站建站用什么沈阳seo顾问
  • 要建立网站是否要先做网页设计_然后把网页设计与数据库连接起来?情感营销的十大案例
  • 上海大型网站制作公企拓客软件怎么样
  • 东莞整站优化腾讯企点是干嘛的
  • 网站怎么做话术b2c有哪些电商平台
  • 济南建站方案西安seo外包行者seo06
  • 免费站推广网站不用下载seo网站排名优化价格
  • 橙色网站logo 配色seo视频网页入口网站推广
  • 动态网站开发实例教程代码公司品牌宣传
  • 安全网多少钱一个济南seo网站排名关键词优化
  • wordpress 多说广州网站排名优化公司
  • 丹阳做公司网站的新网站百度seo如何做
  • 五羊本田摩托车官网西安网站seo优化公司
  • 四川省人民政府采购网亚马逊seo是什么意思
  • wordpress addrewriterule杭州排名优化公司电话
  • 武汉个人做网站培训机构招生7个方法
  • 成都网站制作系统热门网站排名
  • 昆明网站建设推广服务一站式海外推广平台
  • 网站建设管理典型经验百度竞价推广价格
  • 网站开发运营成本百度搜索网址大全
  • 国外有什么网站做游戏免费推广方法有哪些