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

怎么做纪念网站德州百度推广公司

怎么做纪念网站,德州百度推广公司,在柬埔寨做网络销售推网站,苏州公司网站建设电话1. FreeRTOS 中断管理 1.1 FreeRTOS 的中断管理 ​ 在 STM32 中,中断优先级是通过中断优先级配置寄存器的高 4 位 [7:4] 来配置的。因此 STM32 支持最多 16 级中断优先级,其中数值越小表示优先级越高,即更紧急的中断。(FreeRTOS…

1. FreeRTOS 中断管理

1.1 FreeRTOS 的中断管理

​ 在 STM32 中,中断优先级是通过中断优先级配置寄存器的高 4 位 [7:4] 来配置的。因此 STM32 支持最多 16 级中断优先级,其中数值越小表示优先级越高,即更紧急的中断。(FreeRTOS 任务调度的任务优先级相反,是数值越大越优先,但是不要混淆了任务优先级中断优先级,这俩者是不同的俩方面)

​ FreeRTOS 可以与 STM32 原生的中断机制结合使用,但它提供了自己的中断管理机制,主要是为了提供更强大和灵活的任务调度和管理功能。

​ FreeRTOS 中,将 PendSV 和 SysTick 设置最低中断优先级(数值最大,15),保证系统任务切换不会阻塞系统其他中断的响应。FreeRTOS 利用 BASEPRI 寄存器实现中断管理,屏蔽优先级低于某一个阈值的中断。比如: BASEPRI 设置为 0x50(只看高四位,也就是 5),代表中断优先级在 5~15 内的均被屏蔽,0~4 的中断优先级正常执行。(默认状态下不屏蔽所有中断)

请添加图片描述

​ 也就是如果启用中断屏蔽,中断事件的优先级设置为 >=5 时,程序不会响应这个中断请求,该中断请求内容被暂时挂起,只有当 BASEPRI 解除屏蔽(设回 0)后,挂起的中断才会执行。

在中断服务函数中调用 FreeRTOS 的 API 函数需注意:

  • 中 断 服 务 函 数 的 优 先 级 需 在 FreeRTOS 所 管 理 的 范 围 内 , 阈 值 由configMAX_SYSCALL_INTERRUPT_PRIORITY 指定。
  • 建议将所有优先级位指定为抢占优先级位,方便 FreeRTOS 管理。
  • 在中断服务函数里边需调用 FreeRTOS 的 API 函数,必须使用带“FromISR”后缀的函数。

1.2 FreeRTOS 的屏蔽中断开关

​ FreeRTOS 屏蔽中断开关函数其实是宏定义,在 portmacro.h 中有定义,如下:

#define portDISABLE_INTERRUPTS()  					vPortRaiseBASEPRI()
#define portENABLE_INTERRUPTS()  					vPortSetBASEPRI( 0 )

​ 调用 portENABLE_INTERRUPTS() , 会取消屏蔽所有 FreeRTOS 管理中断
​ 调用 portDISABLE_INTERRUPTS() ,会屏蔽所有FreeRTOS 管理中断

1.3 FreeRTOS 的临界段代码

​ 临界段代码,又称为临界区,指的是那些必须在不被打断的情况下完整运行的代码段。例如,某些外设的初始化可能要求严格的时序,因此在初始化过程中不允许被中断打断。在 FreeRTOS 中,进入临界段代码时需要关闭中断,在处理完临界段代码后再重新开启中断。FreeRTOS 系统本身包含许多临界段代码,并对其进行了保护。在编写用户程序时,有些情况下也需要添加临界段代码以确保代码的完整性。

与临界段代码保护有关的函数有 4 个:

  • taskENTER_CRITICAL() :进入临界段。
  • taskEXIT_CRITICAL() :退出临界段。
  • taskENTER_CRITICAL_FROM_ISR() :进入临界段(中断级)。
  • taskEXIT_CRITICAL_FROM_ISR():退出临界段(中断级)。

​ 执行进入临界段函数,实际上会调用 portDISABLE_INTERRUPTS() 来屏蔽 FreeRTOS 所管理的中断,执行退出临界段函数会调用 portENABLE_INTERRUPTS() 来失能屏蔽管理的中断。

临界段函数嵌套使用:

​ 进入和退出临界段是成对使用的。每进入一次临界段,全局变量 uxCriticalNesting 都会加一,每调用一次退出临界段,uxCriticalNesting 减一,只有当 uxCriticalNesting 为 0 的时候才会调用函数 portENABLE_INTERRUPTS()使能中断。这确保了在存在多个临界段代码的情况下,不会因为某个临界段代码的退出而破坏其他临界段的保护。只有当所有的临界段代码都退出时,中断才会被重新使能。

1.4 实验目标

  • 设置管理的优先级范围:5~15。
  • 使用两个定时器,一个优先级为 4,一个优先级为 6。
  • 两个定时器每 1s,打印一段字符串。
  • task1:按下 KEY1,关中断,按下 KEY2,开中断。

注意!!!:为了正确观察实验现象,不要调用 freertos 的延时函数,底层会去调用 portENABLE_INTERRUPTS() 函数!!!

具体调用关系为:

vTaskDelay -> taskEXIT_CRITICAL -> taskEXIT_CRITICAL(同 vPortExitCritical) ->  portENABLE_INTERRUPTS

这样子会导致使用 vTaskDelay 会自动区别屏蔽管理的所以中断,导致实验不符合预期

1 ) 中断回调函数:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM4){scan_keypad();}if (htim->Instance == TIM2){printf("TIM2 priority 4, running... \r\n");}if (htim->Instance == TIM3){printf("TIM3 priority 6, running... \r\n");}if (htim->Instance == TIM1) {HAL_IncTick();}
}

2 )初始化函数:

HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);
HAL_TIM_Base_Start_IT(&htim4);
HAL_UART_Init(&huart1);

3 )任务函数:

void task(void *pvParameters)
{while (1){for (int i = 0; i < 16; i++){if (key[i].flag == 1){if (i == 0){printf("Disable Interrupt Masking....\r\n");portDISABLE_INTERRUPTS();}else if (i == 1){printf("Enable Interrupt Masking...\r\n");portENABLE_INTERRUPTS();}key[i].flag = 0;}}/* 使用 HAL_Delay 前提:HAL 时钟修改成其他定时器(非sysTick),并且中断优先级高于 freertos 的管理范围 */HAL_Delay(100);}
}

1.5 总结建议

  • 可以设置中断优先级高于 FreeRTOS 管理的最高中断优先级的 ISR,但是不能在这些高优先级 ISR 里调用 FreeRTOS API,否则会破坏系统的稳定性和任务调度。

​ 如果 ISR 必须使用高优先级(高于FreeRTOS管理最高优先级),且仍然需要执行 FreeRTOS 相关操作,可以 让高优先级 ISR 只设置标志位,然后让低优先级任务来调用 FreeRTOS API:

volatile bool exti0_flag = false;void EXTI0_IRQHandler(void)
{// 高优先级 ISR 仅设置标志位,不调用 FreeRTOS APIexti0_flag = true;
}void exti_task(void *pvParameters)
{while (1){if (exti0_flag){exti0_flag = false;xQueueSend(myQueue, &data, portMAX_DELAY); // 任务调用 FreeRTOS API}vTaskDelay(10);}
}
http://www.dtcms.com/wzjs/6149.html

相关文章:

  • 网站动态背景怎么做常用的seo网站优化排名
  • wordpress做外贸站营销知识和技巧
  • 毕业设计做网站大小有什么要求seo外链论坛
  • sqlite 做网站数据库百度收录排名
  • 网站怎么做效果更好手机百度app最新版下载
  • 网站 主办单位性质 个人网站快速排名的方法
  • 网站建设的设计方案seo基础知识培训
  • 雅奇小蘑菇做网站好不好用个人网站设计毕业论文
  • 网站开发项目设计文档泰安网站优化公司
  • nas做网站服务器seo网站推广杭州
  • 建网站维护需要多少钱虚拟主机搭建网站
  • 做外语网站的公司yandx引擎入口
  • 珠海做网站优化网站建设方案及报价
  • 班级网站怎么做网站免费推广网站
  • 广告网站建设流程中文域名的网站
  • 福田网站建设新闻网络推广专员所需知识
  • 电商网站开发意义嘉兴seo外包
  • 用dw个人网站怎么建立seo学习网站
  • 百度这个网站怎么做windows7系统优化工具
  • 网站开发设计手册营销网站建设教学
  • 网站建设公司如何挖掘客户交换链接的作用
  • dedecms网站的源码如何安装磁力猫torrent kitty
  • 郑州英语网站建设网站设计与建设
  • 呢喃wordpress 模板合肥网站seo费用
  • 西安博威建设工程有限公司招聘网站做网站seo优化
  • 展示用网站模板网站优化 福州
  • 做网站开发需要学什么软件厦门seo优化外包公司
  • 石家庄学网站建设如何进行百度推广
  • 哪些ppt网站是免费的做网站需要哪些技术
  • 做网站被黑后怎么办网络推广是啥