IAR 下将函数指定到RAM中

1.  利用关键字__ramfunc

IAR中提供了关键字来声明将某个函数放在RAM中运行。该函数用关键字__ramfunc声明后,编译器将这段程序和其他的需要初始化的变量一起放在一个具有读/写属性的区域(SECTION),系统启动时自动和其他的需要初始化的变量一起被从ROM拷贝到RAM。使用__ramfunc关键字的缺点就是,不能指定具体的RAM位置。

在定义为__ramfunc的函数中调用非__ramfunc函数,会出现下面的警告:“Warning[Ta022]: Possible rom access (array) fromwithin a __ramfunc function ”而且在ramfunc的函数中调用不是ramfunc的函数会降低执行速度。

2.使用链接文件定义段

先在.icf文件中创建一个新段 

place  in m_func_write_region                { section FuncWriteTable };

然后给这段指定地址是在RAM区中

define  region m_func_write_region = mem:[from m_data_start to m_data_end];

最后指定需要初始化做复制这到这段 initialize by copy  在程序启动时自动执行初始化。

initialize  by  copy  { readwrite, section FuncWriteTable };




将程序中的函数放在指定的RAM区中

#pragma location = "FuncWriteTable"//指定接下来的一个变量或者函数在指定的段中
void fun()
{
		……
}
下方的可以指定多个函数到指定段
#pragma default_function_attributes = @"FuncWriteTable"//把之后的代码放在指定的段中
void fun1()
{
		……
}
void fun2()
{
		……
}

#pragma default_function_attributes =//指定的这个段到此结束,用这两句限定指定区域

至此就可以完成指定Flash中的程序到RAM中运行

接下来是对于项目中遇到的片外Flash程序的复制到RAM中的特殊情况

之前的步骤一致,只是要多一个操作

3.指定整个.c文件到RAM

先指定该.c文件编译的得到的.o文件到RAM所在区域内的.text

然后指定在初始化的时候做拷贝


在程序中调用数据区的初始化

__iar_data_init3();

在片外的程度段中需要执行一次这个初始化函数,保证片外Flash也做一次初始化,主要是复制指定的Flash到RAM中,去过缺少则无法完成片外Flash到RAM,这个其实等同于片内Flash的操作,只是片内的初始化已经自动执行额,片外的则需要我们自己操作执行。




  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值