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

四川省建设厅招投标网站面试简历模板免费

四川省建设厅招投标网站,面试简历模板免费,互联网公司黑话,上海成品网站目录 中断流程分析我的解决办法优缺点 大家都在说STM32 HAL 库中断效率低下。具体哪里不行?如何优化? 我手里的项目要用到多个定时器TIM6、TIM7、TIM9、TIM10、TIM11、TIM12、TIM13,在处理这些定时器中断的时候,也发现了这个问题。…

目录

  • 中断流程分析
  • 我的解决办法
  • 优缺点

大家都在说STM32 HAL 库中断效率低下。具体哪里不行?如何优化?
我手里的项目要用到多个定时器TIM6、TIM7、TIM9、TIM10、TIM11、TIM12、TIM13,在处理这些定时器中断的时候,也发现了这个问题。
下面给出我的分析和解决办法。

中断流程分析

以TIM7 中断流程分析,中断条件满足之后,单片机从中断向量表中找中断服务函数TIM7_IRQHandler,然后跳转进去

; Vector Table Mapped to Address 0 at ResetAREA    RESET, DATA, READONLYEXPORT  __VectorsEXPORT  __Vectors_EndEXPORT  __Vectors_Size__Vectors       DCD     __initial_sp               ; Top of StackDCD     Reset_Handler              ; Reset HandlerDCD     NMI_Handler                ; NMI HandlerDCD     HardFault_Handler          ; Hard Fault Handler
......                               DCD     TIM6_DAC_IRQHandler               ; TIM6 and DAC1&2 underrun errors                   DCD     TIM7_IRQHandler                   ; TIM7

TIM7_IRQHandler内容如下,从这里HAL库开始接管

void TIM7_IRQHandler(void)
{/* USER CODE BEGIN TIM7_IRQn 0 *//* USER CODE END TIM7_IRQn 0 */HAL_TIM_IRQHandler(&htim7);/* USER CODE BEGIN TIM7_IRQn 1 *//* USER CODE END TIM7_IRQn 1 */
}

HAL_TIM_IRQHandler内容如下,为了方便阅读做了删减

	if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1)){/* Capture compare 1 event Process */}if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2)){/* Capture compare 2 event Process */}if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3)){/* Capture compare 3 event Process */}if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4)){/* Capture compare 4 event Process */}if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE)){/* TIM Update event Process *///我的定时器只用来做定时中断,所以关注TIM_IT_UPDATE中断if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE)){//清除标志位__HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE);	#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)//如果启用了回调函数注册执行这里,实际上我们重写下面一条语句的函数效果类似。htim->PeriodElapsedCallback(htim);#else//没有启用回调函数,执行这里。HAL_TIM_PeriodElapsedCallback是虚函数,用户自行重写HAL_TIM_PeriodElapsedCallback(htim);#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */}}if ((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)){/* TIM Break input event Process */}if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER)){/* TIM Trigger detection event Process */}if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM)){/* TIM commutation event Process */}

HAL_TIM_PeriodElapsedCallback的定义如下

/*** @brief  Period elapsed callback in non-blocking mode* @param  htim TIM handle* @retval None*/
__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{/* Prevent unused argument(s) compilation warning */UNUSED(htim);/* NOTE : This function should not be modified, when the callback is needed,the HAL_TIM_PeriodElapsedCallback could be implemented in the user file*/
}

可以看出来,不同中断公用一个最终的处理函数HAL_TIM_PeriodElapsedCallback,在该函数里用户自己靠传入的形参htim去区分是哪一个中断触发的。那么实际重写HAL_TIM_PeriodElapsedCallback的时候,应该是如下结构

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim == htim6){} else if(htim == htim7){}else if(htim == htim9){}else if(htim == htim10){}......
}

这样的处理方便倒是挺方便的,但是明显的效率低下。主要体现如下两部分:

  • 我不需要判断那么多中断事件,我对自己项目中定时器的作用非常清晰,不会用于做捕获、从机等,也就不用判断这些中断事件。
  • 不同定时器公用一个回调函数,在回调函数内再区分,效率低下。原本不同的定时器就有不同的中断服务函数的。
    在这里插入图片描述

我的解决办法

在TIM7_IRQHandler里写应用,然后直接返回

void TIM7_IRQHandler(void)
{/* USER CODE BEGIN TIM7_IRQn 0 */if(TIMER_Group.callback[1])				TIMER_Group.callback[1]();return;/* USER CODE END TIM7_IRQn 0 */HAL_TIM_IRQHandler(&htim7);/* USER CODE BEGIN TIM7_IRQn 1 *//* USER CODE END TIM7_IRQn 1 */
}

callback指向的函数内容如下

static void hwtimer2_callback(void)
{/* some app*/__HAL_TIM_CLEAR_FLAG(htim7, TIM_IT_UPDATE);//手动清除标志位
}

优缺点

优点:解决了中断效率低下的问题
缺点1:return后面HAL_TIM_IRQHandler(&htim7);任然参与编译,可能占用更多的Flash空间
缺点2:因为HAL_TIM_IRQHandler(&htim7);代码不可到达,会报


文章转载自:

http://eeyfcTdz.pbzgj.cn
http://Petm8Rqf.pbzgj.cn
http://OUjl0TVr.pbzgj.cn
http://Hypyq0AM.pbzgj.cn
http://0OUm96b6.pbzgj.cn
http://XVsOFF3X.pbzgj.cn
http://t506CELL.pbzgj.cn
http://9VAc5hrv.pbzgj.cn
http://JMtnIX0T.pbzgj.cn
http://t8hs7a7L.pbzgj.cn
http://0deiy9ql.pbzgj.cn
http://Th2KWKOt.pbzgj.cn
http://dZg6tE7u.pbzgj.cn
http://tdwOq2Fp.pbzgj.cn
http://Iq6PxZXP.pbzgj.cn
http://CfUT7U5k.pbzgj.cn
http://HdHalQGT.pbzgj.cn
http://KmNERfwy.pbzgj.cn
http://8NTd0KFw.pbzgj.cn
http://IZxIeGXm.pbzgj.cn
http://CxjxWPa9.pbzgj.cn
http://wQxTmWW2.pbzgj.cn
http://aiY1ywS3.pbzgj.cn
http://JRcDWRDp.pbzgj.cn
http://9a0s7RjA.pbzgj.cn
http://VZYNXX1I.pbzgj.cn
http://T5D9PmY1.pbzgj.cn
http://QOTEeQSl.pbzgj.cn
http://eQe0Qbes.pbzgj.cn
http://zU0kTVkC.pbzgj.cn
http://www.dtcms.com/wzjs/645001.html

相关文章:

  • 韩国美食网站建设目的宁波网站建设熊掌号
  • 青岛网站建设服务中心西安有哪些互联网公司
  • 网站建设中心怎么做淘宝上有做网站的吗
  • 网站建设规范布局有几部分emlog与wordpress
  • 百度收录左侧带图片的网站cms类型网站开发
  • 做放单主持的网站汕头网站建设备案
  • 造作网站开发上海网站定制团队
  • 建筑电工证查询网站网站空间 哪个公司好
  • 网站备案信息查询申请wordpress 调用内容代码
  • 网站建设门户外贸seo营销ppt
  • 做设计比较好的网站推荐广西建设网登录入口
  • 触屏手机网站设计网站外贸推广
  • 网站建设方案和报价管家通库存管理软件
  • 北京网站改版公司在线商城系统平台
  • 韶关营销型网站建设室内设计学校全国排名
  • 国外优秀营销网站设计登录中国沈阳网站
  • 站内免费推广有哪些网站建设中 敬请期待.
  • 设计工作网站阿里云域名注册口令
  • 教做视频的网站酒类产品网站设计
  • 在线可以做翻译的网站install.php空白 wordpress
  • 网站建站策划网站建设是属于软件开发费吗
  • 公司做网站是管理费用怎么做购物微信网站
  • 网站公告栏设计服务专业的网站建设公司
  • 门户网站内容管理系统wordpress 千易网盘
  • 太原百度网站快速排名广东东莞人才招聘网
  • 网约车后台平台网站建设网站建设报价ppt模版
  • 做网站的底图尺寸多大dw可以做wordpress
  • 开一家代做网站的公司手机做直播官方网站
  • 广告关键词有哪些手机版网站优化
  • 上海外贸网站建设找哪家wordpress ajax 插件