本帖最后由 john_lee 于 2011-6-29 10:52 编辑
所谓的“钩子(hook)”,在C中是很常用的。但钩子有个缺点:但在没有钩子函数的时候,还是需要调用一个空函数,效率不高(回调函数也类似,需要判断回调函数指针是否为空)。
在LOOK中,并不使用钩子函数,而使用C++中常用的继承(inheritance)和覆盖(overriding)机制。在派生类中覆盖基类的虚函数,在覆盖的函数中实现类似钩子函数的逻辑,并根据需要调用被覆盖的基类函数。
例如,systick设置为10ms周期中断: class mysystick_t : public systick_t { // 继承systick_t
public:
inline mysystick_t() // 构造函数
: systick_t(计数器重装值, 中断优先级)
{
}
protected:
bool isr(int vector); // 覆盖isr()
};
bool mysystick_t::isr(int vector)
{
// TODO: 你需要实现的10ms/次的代码逻辑
return systick_t::isr(vector); // 调用原isr()
}
|