- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在低级嵌入式开发中使用 C++(而不是将 C++ 处理为“具有一些额外功能的 C”)的一个障碍是由中断引起的。通常,在某些情况下,必须以单个 CPU 周期来测量时间,并且某些类在那里没有任何用途。隐式转换、复制构造函数和类似的东西在中断中使用时可能会导致问题,特别是当它们发生在幕后时。另一方面,一些精心设计的类可以在中断中有意义地使用。
这提出了一个问题:是否有一种优雅的方式来向编译器发出信号,指示特定的类、函数或变量(或只是代码行)在中断内使用时应抛出编译错误? (不必如此严重地依赖注释 //Never call this from an Interrupt!
)
<子>(如果没有,尝试将这样的内容纳入下一个 C++ 标准是否有意义?我正在考虑诸如 constexpr
说明符如何告知编译器函数或变量可以做什么的事情或不能用于。nointerrupt
说明符是否有意义,或者是否已经存在提供该功能的东西?)
最佳答案
与主系统上下文(以及任务函数,如果您使用的是操作系统)一样,中断服务例程只是其他上下文。 运行哪些代码(类的子集的方法)这个问题与(类)库本身的技术正交。
RTOS 库经常对 ISR 中可以调用的 API 施加“限制”(或者在具有给定优先级的 ISR 中) - 但这些限制“仅”是为了维护数据一致性所需要的,而不是出于硬件技术原因而强加的µC 基础设施。
您希望将现有类库的使用限制在某些上下文中,因为某些类实现消耗的资源(时间、堆栈内存空间?)超出了您在 ISR 中所能承受的范围,但这是您的部署问题SW 项目架构中的决策。
因此,从我的角度来看,最优雅的解决方案是回到软件架构级别,创建一份简洁的文档(也许 UML 部署图可能已经对您有很大帮助),并指定其中您想要执行哪些代码的上下文。您可能会发现,在 ISR 上下文中,只有一小部分代码要执行,因此标记应该在 ISR 上下文中运行的类子集(或类方法的子集)可能是可行的自上而下的视角。您可以通过在专用共享内存区域中设置/重置 ISR 特定标志来启动/完成每个 ISR 来备份此过程,并将断言语句添加到关键类/方法中以检测特定代码是否在不需要的 ISR 中运行上下文。
关于c++ - 如何防止从中断例程中调用特定函数或方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55828031/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!