gpt4 book ai didi

c++ - 作为中断服务程序的静态模板成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:00 26 4
gpt4 key购买 nike

在下面的Mapper类中,静态成员函数timer0CompA作为一个中断服务程序。它在中断 vector 中获得名称“__vector_14”。

struct Mapper {
static void timer0CompA() __asm__("__vector_14") __attribute__((__signal__, __used__, __externally_visible__));
};
void Mapper::timer0CompA(){}

如果我尝试对模板类使用相同的方法

template<typename T>
struct Mapper {...};

模板成员函数没有插入中断 vector 。

我知道如果它可行的话会有问题:不同的实例化会在汇编代码中获得相同的名称,因此我们会得到一个双重定义的符号。但就我而言,这会很有用......

有什么提示吗?

最佳答案

运行时解决方案,并非完全最优:

  1. 禁用设备上的中断。
  2. 构建一个中断数组,您将使用与 isr vector 数组相同的格式。
  3. 覆盖 ISR 闪存部分。确保保存闪存页面中未使用的部分并将它们写回。
  4. 在设备上重新启用中断。

但由于您需要一次编写整个 Flash 页面,因此最好一次性完成所有工作。

注意:您可能会发现自己不小心覆盖了应用程序代码,因此请确保您用来执行更改的函数不在 Flash 的那个部分,并且您写回了您不使用的页面部分。

关于c++ - 作为中断服务程序的静态模板成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40636652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com