搜索
bottom↓
回复: 6

HAL库中的中断,在callback回调函数和中断函数中处理有何区别

[复制链接]

出0入0汤圆

发表于 2016-11-9 14:04:12 | 显示全部楼层 |阅读模式
HAL库中的中断,在callback回调函数和中断函数中处理有何区别
比如定时中断
在it.c中的中断函数基本不处理内容
void TIM2_IRQHandler(void)
{
  /* USER CODE BEGIN TIM2_IRQn 0 */

  /* USER CODE END TIM2_IRQn 0 */
  HAL_TIM_IRQHandler(&htim2);
  /* USER CODE BEGIN TIM2_IRQn 1 */

  /* USER CODE END TIM2_IRQn 1 */
}

真正的处理在
main.c中的
        void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
        {
                //if(htim == (&htim1))
                if(TIM1 == htim->Instance)
                {
                }

        }

如果闲callback麻烦,直接在.c中处理可以吗?他们有什么区别吗?

出0入0汤圆

发表于 2016-11-9 20:48:33 | 显示全部楼层
没什么区别,通过判断霍尔电平来执行换相函数也可以。但是通过捕获进行中断的方式更容易实现。

出0入0汤圆

发表于 2016-11-12 10:03:34 | 显示全部楼层
说的是HAL库吧,跟霍尔没关系

出0入0汤圆

发表于 2016-11-12 10:53:56 | 显示全部楼层
是没啥区别,但是st官方硬是弄出这些区别来
反而觉得这样会不会效率更低呢

出0入22汤圆

发表于 2016-11-12 16:47:41 来自手机 | 显示全部楼层
回调函数是分层设计的结果,因为底层在中断时候只管调用一个函数指针而不需要管具体的处理。具体的处理是上层回调函数实现的。这样底层就可以基本固定。

出0入0汤圆

发表于 2016-11-12 16:56:54 | 显示全部楼层
没啥区别,ST只是想让你忘掉这些中断服务函数和各种的清标志位处理罢了,做到你不用去关系这些玩意,踏踏实实写你那份代码,其他的他来处理,所以HAL对不懂的人来说好方便啊,对懂的人来说,好臃肿啊。

出0入0汤圆

发表于 2017-1-13 15:32:30 | 显示全部楼层
多了一些 标志的清理,效率更低点,兼容性更好点。没别的   OS上都这样做的。   我也当了一回小白鼠,HAL库很多BUG   还是得手动去改。  TIM3  SPI  WWDG 都不能用,USART1 变成了UART1  可是中断允许还得自己加,把这个HAL库工程师累死了,结果还是不好用。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 07:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表