打印
[STM32F1]

STM32实现钩子函数

[复制链接]
1926|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
墨羽谨年|  楼主 | 2014-12-24 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我正在用STM32开发,使用的是IAR编译器,现在准备把底层控制硬件的函数编译成一个库文件(.lib),有这样一个问题:外部中断处理函数、定时器中断处理函数也会被打包到库里,但是中断处理函数里的任务以后是需要编程修改的,我现在的做法是,在中断处理函数中加入一个函数(函数A),用于处理任务,但是函数A不在底层程序(.lib)中实现。不知道这样是否可以实现呢?

例如:
外部中断0处理函数:
void EXTI0_IRQHandler(void)
{
        EXTI0_Hook();
       
        EXTI_ClearITPendingBit(EXTI_Line0);
}
EXTI_Hook()就是所说的函数A。

如果有知道的朋友,麻烦给我说一下,非常感谢。(上文可能描述的不甚清楚,如有不明白的可以提出)
沙发
zylaputa| | 2014-12-24 11:16 | 只看该作者
keil我这么用过,是可以的。iar没用过,不过应该没问题。

使用特权

评论回复
板凳
SLHSu37| | 2014-12-24 11:19 | 只看该作者
我觉得可以给个标志····

使用特权

评论回复
地板
墨羽谨年|  楼主 | 2014-12-24 11:24 | 只看该作者
zylaputa 发表于 2014-12-24 11:16
keil我这么用过,是可以的。iar没用过,不过应该没问题。

正在try,实现了我上来通知下,谢啦~

使用特权

评论回复
5
墨羽谨年|  楼主 | 2014-12-24 11:25 | 只看该作者
SLHSu37 发表于 2014-12-24 11:19
我觉得可以给个标志····

有些任务必须在中断里处理,如果是给标志位的话,那中断就没有中断的意义了。

使用特权

评论回复
6
墨羽谨年|  楼主 | 2014-12-24 11:54 | 只看该作者
结贴了,已测试,可以实现上述功能。

使用特权

评论回复
7
mmuuss586| | 2014-12-24 12:26 | 只看该作者

需要改动的程序就不要生成LIB文件了;

使用特权

评论回复
8
SLHSu37| | 2014-12-24 13:23 | 只看该作者
怎么生成LIB?

使用特权

评论回复
9
墨羽谨年|  楼主 | 2014-12-24 17:13 | 只看该作者
mmuuss586 发表于 2014-12-24 12:26
需要改动的程序就不要生成LIB文件了;

主要是为了把底层封起来,不让看出来下面具体用什么实现的。
:)

使用特权

评论回复
10
墨羽谨年|  楼主 | 2014-12-24 17:14 | 只看该作者
SLHSu37 发表于 2014-12-24 13:23
怎么生成LIB?

可以自行百度下,关键词“STM32”“IAR”“生成库”:)

使用特权

评论回复
11
mmuuss586| | 2014-12-24 18:16 | 只看该作者
墨羽谨年 发表于 2014-12-24 17:13
主要是为了把底层封起来,不让看出来下面具体用什么实现的。

:loveliness:
恩,每个人的习惯不一样;

使用特权

评论回复
12
dirtwillfly| | 2014-12-24 20:50 | 只看该作者
mmuuss586 发表于 2014-12-24 18:16
恩,每个人的习惯不一样;

生成库应该更有利于产权和专利的保护

使用特权

评论回复
13
lkl0305| | 2014-12-24 23:01 | 只看该作者
关注中!!!

使用特权

评论回复
14
wzd5230| | 2014-12-25 09:30 | 只看该作者
楼主能说下是怎么实现的吗?

使用特权

评论回复
15
墨羽谨年|  楼主 | 2014-12-25 17:27 | 只看该作者
wzd5230 发表于 2014-12-25 09:30
楼主能说下是怎么实现的吗?

额,我个人理解是这样的,这个名词看起来比较高端,其实就是在一个函数里调用另一个函数而已。
就好像我提问里描述的,假设中断处理函数是函数A,那么一般来说我们会把中断中要处理的任务代码写在函数A里,但是,如果我们要把中断处理函数给封成库,不让别人看见里面代码,那我们就没法去修改函数A里的代码了,所以,我们在函数A里调用函数B(钩子函数),函数B在其他的.c文件里,可以进行修改。这样就完成了钩子函数,也就是我问题描述的内容。
(个人见解不当之处望大家指出,谢谢)

使用特权

评论回复
16
墨羽谨年|  楼主 | 2014-12-25 17:28 | 只看该作者
dirtwillfly 发表于 2014-12-24 20:50
生成库应该更有利于产权和专利的保护

:)是的,老板是出于这样的目的才要求我这样做的。

使用特权

评论回复
17
dirtwillfly| | 2014-12-25 20:39 | 只看该作者
对钩子程序的理解,可以参考windows消息处理机制
http://baike.baidu.com/link?url= ... lEzz71lRJRGAoD8gjj_

使用特权

评论回复
18
gmgmgm| | 2014-12-25 21:17 | 只看该作者
嗯,我也正想找个这样的方法,把一个核心涵数做成一个LIB 这样其它同事就找不到源代码,有利于给自己留条后路

使用特权

评论回复
19
Ryanhsiung| | 2014-12-28 15:49 | 只看该作者
可以的
我的模块代程序就是这么写的

若只是中断,则STM32的中断全部都是虚函数(C++的概念),可以直接在其它文件中定义使用。

使用特权

评论回复
20
kfliuyan| | 2014-12-28 19:14 | 只看该作者
了解一下啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

110

帖子

2

粉丝