硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3434|回复: 3
收起左侧

[HAL] HAL库里面多个同种类外设使用同一个中断回调函数的确是不爽

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2018-7-28 11:39:51 | 显示全部楼层 |阅读模式

个人认为设计的不合理,应该每个中断都单独配一个回调,而不是整一个公共的回调,详情看下面说明:




比如我们要用多个定时器实现多个功能,且用到中断,中断里面都会用下面这个函数HAL_TIM_IRQHandler

void TIM1_UP_IRQHandler(void)
{
        HAL_TIM_IRQHandler(&htim1);
}


void TIM7_IRQHandler(void)
{
        HAL_TIM_IRQHandler(&TimHandle);
}


从而会有一个公共回调函数:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        if(htim->Instance==TIM7)
        {
                HAL_IncTick();
        }
        else if(htim->Instance==TIM1)
        {
                SEGGER_RTTProcess();
        }
}


早期使用标准库的时候,就因为中断集中在 stm32h7xx_it.c文件里面处理给移植带来不必要的麻烦,经常移植的时候忘了看这个文件,很坑。所以就统一的放在对应的驱动代码里面实现。

现在莫名的有多了个公共回调,怎么处理好些,继续走回老路子,统一在 stm32h7xx_it.c里面处理? 这一点真是坑。







回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2018-7-28 11:51:48 | 显示全部楼层
既然HAL已经比较臃肿了,不妨统一在HAL里面再臃肿下,每个外设都配套一个回调。反正用户自己写也得判断。

最好的解决办法就是:一臃到底,省的用户操心了。
回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
发表于 2018-7-28 11:58:07 | 显示全部楼层
hal的特点就是套来套去,define来回套,函数来回调,没几下就把人绕晕,不但人看着累,编译器都晕,编译一下就好几分钟,等的抓心!
不过呢我说这些是问题,有些人会认为这是优点。喜欢的就继续写“规范化”的代码,反正我是不用。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2018-7-28 12:00:25 | 显示全部楼层
jinggx 发表于 2018-7-28 11:58
hal的特点就是套来套去,define来回套,函数来回调,没几下就把人绕晕,不但人看着累,编译器都晕,编译一 ...

是的,程序员比较喜欢,偏硬件的不太喜欢。

感觉他这个地方设计的不太合理,应该每个中断都配套一个回调。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 17:34 , Processed in 0.154494 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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