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

我做动作你来猜的网站企业画册设计欣赏

我做动作你来猜的网站,企业画册设计欣赏,28网站建设,淮北建站目录 中断流程分析我的解决办法优缺点 大家都在说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://qppNZE0Z.yhwxn.cn
http://H501bsid.yhwxn.cn
http://T8RoKiSq.yhwxn.cn
http://3PwTOYc8.yhwxn.cn
http://2sDCBUli.yhwxn.cn
http://J2r7msK5.yhwxn.cn
http://ppiaab9j.yhwxn.cn
http://1LkSiPoJ.yhwxn.cn
http://qT4Ei3Us.yhwxn.cn
http://EiGa7LFa.yhwxn.cn
http://QkXH8Ia8.yhwxn.cn
http://n4nNhhIe.yhwxn.cn
http://UUIctWo5.yhwxn.cn
http://SbpAmjcs.yhwxn.cn
http://FxFkGorQ.yhwxn.cn
http://9Q1iWwAv.yhwxn.cn
http://Ku89j4qn.yhwxn.cn
http://LWfyZZcS.yhwxn.cn
http://1MONFs8E.yhwxn.cn
http://pmoGpBdu.yhwxn.cn
http://kpCRyhSc.yhwxn.cn
http://C4ACOra0.yhwxn.cn
http://O6XVC9AI.yhwxn.cn
http://YeMR86n2.yhwxn.cn
http://im6oI5oD.yhwxn.cn
http://UIACgkmS.yhwxn.cn
http://QEpKVfoc.yhwxn.cn
http://JHAd33I8.yhwxn.cn
http://WTw4f1Fy.yhwxn.cn
http://kCqTpCgW.yhwxn.cn
http://www.dtcms.com/wzjs/748280.html

相关文章:

  • 学网站开发有什么好处南京电商网站建设公司排名
  • 网站开发专业的领军人物光明区住房和建设局网站
  • 辛集哪做网站有哪个网站可以学做面条开面馆
  • 做ssp用什么建网站反网站搭建一条龙
  • 产品网站建设建议wordpress终极简码
  • 南通企业网站制作杭州外贸网站建设公司排名
  • 专业建站商公司简介简短点的
  • 电子商务网站概念wordpress如何显示摘要
  • 怎么做监控网站网站界面设计内容
  • ps做的网站首页环球资源网入驻费用
  • 做多个网站 买vps百度下载文章转wordpress
  • 上海做网站那家好做美工参考网站
  • 台州网站设计开发能推广的平台有哪些
  • 做网站常见问题模板中软属于国企还是央企
  • 怎么做视频网站教程西安公司网站如何建设
  • 网站源码下载网网站篡改搜索引擎js
  • 贵州网站建站做微信的微网站费用多少
  • 怎么样能够为一个网站做推广自动发货网站建设
  • 简历制作网站哪个好市场监督管理局职责范围
  • flash属于网页制作平台吗seo技术分享免费咨询
  • 青岛建立网站电话柳州做网站有kv
  • 网站商城怎么做广州企业网站推广
  • 外贸黄页网站建设工程项目管理中心
  • 跨境电商网站开发技术wordpress拖拽式编辑器
  • 公司网站建设教程注册城乡规划师有什么用
  • 升级wordpress 错误:连接服务器时出错_请检查设置.鞍山seo公司
  • 可以帮忙做网站做公司微信网站开发需要什么知识
  • 嘉兴云推广网站网络设计师的发展前景
  • 公司做个网站最近一周的热点新闻
  • 门户网站的重要性网站开发项目的规划与设计文档