Ram*_*tra 5 c++ embedded constructor iar
我需要将所有代码都放在ram中(我正在编写Flash)。我正在使用IAR 7.80,并且所有__ramfunc功能都可以在每个函数中使用内在函数,但不适用于C ++构造函数。
例如,我有以下课程:
class Os_Timer {
private:
os_tmrcnt_t tmr;
public:
__ramfunc Os_Timer() { reset(); }
__ramfunc void reset() { os_TimerStart( &tmr ); }
};
Run Code Online (Sandbox Code Playgroud)
我还没有找到在ram中定义构造函数Os_Timer的方法。编译器抱怨
期望一个标识符
和
不允许对象属性
在构造函数行上。
IAR手册指出,__ramfunc必须将放在返回值之前,但构造函数没有返回值。
我尝试不成功地强迫这种__ramfunc行为:
_Pragma("location=\"section .textrw\"")
Run Code Online (Sandbox Code Playgroud)
和
_Pragma("location=\"RAM_region\"")
Run Code Online (Sandbox Code Playgroud)
有人知道该怎么做吗?
要应用于__ramfuncC++ 构造函数,您必须_Pragma("object_attribute=__ramfunc")按以下示例使用。
class Os_Timer
{
private:
os_tmrcnt_t tmr;
public:
_Pragma("object_attribute=__ramfunc") Os_Timer() { reset(); }
__ramfunc void reset() { os_TimerStart(&tmr); }
};
Run Code Online (Sandbox Code Playgroud)
请注意,要使其正常工作,os_TimerStart还应将其声明为__ramfunc,否则os_TimerStart将被放置在闪存中,并且可能会被您的闪存更新覆盖。__ramfunc为了帮助您检测到这一点,如果您尝试调用未从已声明的函数中声明的函数,编译器将发出警告。