[STM32F1] STM32实现钩子函数

[复制链接]
2671|19
 楼主| 墨羽谨年 发表于 2014-12-24 10:38 | 显示全部楼层 |阅读模式
我正在用STM32开发,使用的是IAR编译器,现在准备把底层控制硬件的函数编译成一个库文件(.lib),有这样一个问题:外部中断处理函数、定时器中断处理函数也会被打包到库里,但是中断处理函数里的任务以后是需要编程修改的,我现在的做法是,在中断处理函数中加入一个函数(函数A),用于处理任务,但是函数A不在底层程序(.lib)中实现。不知道这样是否可以实现呢?

例如:
外部中断0处理函数:
  1. void EXTI0_IRQHandler(void)
  2. {
  3.         EXTI0_Hook();
  4.        
  5.         EXTI_ClearITPendingBit(EXTI_Line0);
  6. }
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,实现了我上来通知下,谢啦~
 楼主| 墨羽谨年 发表于 2014-12-24 11:25 | 显示全部楼层
SLHSu37 发表于 2014-12-24 11:19
我觉得可以给个标志····

有些任务必须在中断里处理,如果是给标志位的话,那中断就没有中断的意义了。
 楼主| 墨羽谨年 发表于 2014-12-24 11:54 | 显示全部楼层
结贴了,已测试,可以实现上述功能。
mmuuss586 发表于 2014-12-24 12:26 | 显示全部楼层

需要改动的程序就不要生成LIB文件了;
SLHSu37 发表于 2014-12-24 13:23 | 显示全部楼层
怎么生成LIB?
 楼主| 墨羽谨年 发表于 2014-12-24 17:13 | 显示全部楼层
mmuuss586 发表于 2014-12-24 12:26
需要改动的程序就不要生成LIB文件了;

主要是为了把底层封起来,不让看出来下面具体用什么实现的。
:)
 楼主| 墨羽谨年 发表于 2014-12-24 17:14 | 显示全部楼层
SLHSu37 发表于 2014-12-24 13:23
怎么生成LIB?

可以自行百度下,关键词“STM32”“IAR”“生成库”:)
mmuuss586 发表于 2014-12-24 18:16 | 显示全部楼层
墨羽谨年 发表于 2014-12-24 17:13
主要是为了把底层封起来,不让看出来下面具体用什么实现的。

:loveliness:
恩,每个人的习惯不一样;
dirtwillfly 发表于 2014-12-24 20:50 | 显示全部楼层
mmuuss586 发表于 2014-12-24 18:16
恩,每个人的习惯不一样;

生成库应该更有利于产权和专利的保护
lkl0305 发表于 2014-12-24 23:01 | 显示全部楼层
关注中!!!
wzd5230 发表于 2014-12-25 09:30 来自手机 | 显示全部楼层
楼主能说下是怎么实现的吗?
 楼主| 墨羽谨年 发表于 2014-12-25 17:27 | 显示全部楼层
wzd5230 发表于 2014-12-25 09:30
楼主能说下是怎么实现的吗?

额,我个人理解是这样的,这个名词看起来比较高端,其实就是在一个函数里调用另一个函数而已。
就好像我提问里描述的,假设中断处理函数是函数A,那么一般来说我们会把中断中要处理的任务代码写在函数A里,但是,如果我们要把中断处理函数给封成库,不让别人看见里面代码,那我们就没法去修改函数A里的代码了,所以,我们在函数A里调用函数B(钩子函数),函数B在其他的.c文件里,可以进行修改。这样就完成了钩子函数,也就是我问题描述的内容。
(个人见解不当之处望大家指出,谢谢)
 楼主| 墨羽谨年 发表于 2014-12-25 17:28 | 显示全部楼层
dirtwillfly 发表于 2014-12-24 20:50
生成库应该更有利于产权和专利的保护

:)是的,老板是出于这样的目的才要求我这样做的。
dirtwillfly 发表于 2014-12-25 20:39 | 显示全部楼层
对钩子程序的理解,可以参考windows消息处理机制
http://baike.baidu.com/link?url= ... lEzz71lRJRGAoD8gjj_
gmgmgm 发表于 2014-12-25 21:17 | 显示全部楼层
嗯,我也正想找个这样的方法,把一个核心涵数做成一个LIB 这样其它同事就找不到源代码,有利于给自己留条后路
Ryanhsiung 发表于 2014-12-28 15:49 | 显示全部楼层
可以的
我的模块代程序就是这么写的

若只是中断,则STM32的中断全部都是虚函数(C++的概念),可以直接在其它文件中定义使用。
kfliuyan 发表于 2014-12-28 19:14 | 显示全部楼层
了解一下啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

110

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部