【发布时间】:2019-09-21 20:54:15
【问题描述】:
我需要将所有代码放入 ram 中(我正在编写闪存)。我正在使用 IAR 7.80,并且每个函数的 __ramfunc 内在函数都可以正常工作,但对于 C++ 构造函数则不行。
例如我有以下课程:
class Os_Timer {
private:
os_tmrcnt_t tmr;
public:
__ramfunc Os_Timer() { reset(); }
__ramfunc void reset() { os_TimerStart( &tmr ); }
};
我还没有找到在 ram 中定义构造函数 Os_Timer 的方法。编译器抱怨
需要一个标识符
和
对象属性不允许
在构造函数行。
IAR 手册说__ramfunc 必须放在返回值之前,但构造函数没有返回值。
我尝试强制 __ramfunc 行为没有成功:
_Pragma("location=\"section .textrw\"")
和
_Pragma("location=\"RAM_region\"")
有人知道怎么做吗?
【问题讨论】:
-
C++ 标准有一个答案——像这样的属性应该写成
[[__ramfunc]]。但似乎 IAR 并没有遵循 C++ 标准并组成了自己的扩展。正是这种与标准的偏差直接导致了您的问题。
标签: c++ constructor embedded iar