Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 作为中断服务例程的静态模板成员函数_C++_Templates_Interrupt_Avr - Fatal编程技术网

C++ 作为中断服务例程的静态模板成员函数

C++ 作为中断服务例程的静态模板成员函数,c++,templates,interrupt,avr,C++,Templates,Interrupt,Avr,在下面的类映射器中,静态成员函数timer0CompA用作中断服务例程。它在中断向量中获得名称“\uuuvector\u14” struct Mapper { static void timer0CompA() __asm__("__vector_14") __attribute__((__signal__, __used__, __externally_visible__)); }; void Mapper::timer0CompA(){} 如果我尝试对模板类使用相同的方法 te

在下面的类映射器中,静态成员函数timer0CompA用作中断服务例程。它在中断向量中获得名称“\uuuvector\u14”

struct Mapper {
    static void timer0CompA() __asm__("__vector_14") __attribute__((__signal__, __used__, __externally_visible__));  
};
void Mapper::timer0CompA(){}
如果我尝试对模板类使用相同的方法

template<typename T>
struct Mapper {...};
模板
结构映射器{…};
模板成员函数不会插入到中断向量中

struct Mapper {
    static void timer0CompA() __asm__("__vector_14") __attribute__((__signal__, __used__, __externally_visible__));  
};
void Mapper::timer0CompA(){}
我知道,如果它能够工作,这将是有问题的:不同的实例化将在汇编代码中获得相同的名称,因此我们将获得一个双定义符号。但在我的情况下,这将是有用的


有什么提示吗?

一个运行时解决方案,不完全是最优的:

  • 禁用设备上的中断
  • 建立一个中断数组,您将使用与isr向量数组相同的格式
  • 覆盖ISR闪存部分。确保保存flash页面中未使用的部分并将其写回
  • 重新启用设备上的中断
  • 但是,由于您需要一次编写一整页flash页面,因此最好一次完成所有内容

    注意:您可能会发现自己意外地重写了应用程序代码,因此请确保您用于执行更改的函数不在flash的该部分中,并且您会写回您不使用的页面部分