网站大量收购闲置独家精品文档,联系QQ:2885784924

KEIL中让程序在RAM中运行的办法.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

KEIL中如何让程序在RAM中运行

前言

最近老是遇到使用KEIL时需要将部分或者全部程序放到RAM中运行的问题。故此花了不少时间搜索资料和几番尝试,现将

其总结在本篇文章中,也是为大家以后的工作节省时间罢。本文中会介绍通过STM32F411Nucleo的一个例子来介绍几种让

程序在RAM中运行的方法。在该例子中,通过调用ToggleLED函数来翻转LED2亮灭。接下来,我们将通过多种方法将这

段代码放在RAM中运行。

ToggleLED函数从Flash中执行的情况

我们先来看看ToggleLED函数从Flash中执行的情况。下面是ToggleLED函数和它的调用情况。在main函数的while(1)

里调用ToggleLED。

voidToggleLED(void)

{

HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);

/*Inserta100msdelay*/

HAL_Delay(100);

}

intmain(void)

{

……

/*##-3-TogglePA05IOinaninfiniteloop#################################*/

while(1)

{

ToggleLED();

}

}

Linker的配置为,见下图:

Flash起始地址:0

RAM起始地址:0

编译后从map文件可以看到,ToggleLED以及其中调用到的HAL_GPIO_TogglePin和HAL_Delay函数的地址都在FLASH

中。

将翻转LED的程序放到SRAM中执行

方法一:通过#pragmaarmsectioncode=“RAMCODE”和#pragmaarmsection。参考Example1代码。

这种方式,可以同时将多个函数放到指定的section。具体方法如下:

1.修改.sct文件,自定义一个叫做RAMCODE的section,放在RW_IRAM1执行区域,地址范围00。

LR_IROM100{;loadregionsize_region

ER_IROM100{;loadaddress=executionaddress

*.o(RESET,+First)

*(InRoot$$Sections)

.ANY(+RO)

}

RW_IRAM100{;RWdata

*.o(RAMCODE)

.ANY(+RW+ZI)

}

}

2.在工程中使用前面修改的.sct文件

3.以#pragmaarmsectioncode=“RAMCODE”开头,以#pragmaarmsection结尾。将所有需要放到RAMCODEsection的

函数包括进来。编译时,编译器会自动将这些函数放到RAMCODE所在0开始的区域。

#pragmaarmsectioncode=RAMCODE

voidToggleLED(void)

{

HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);

/*Inserta100msdelay*/

HAL_Delay(100);

}

voidHAL_GPIO_TogglePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)

{

/*Checktheparameters*/

assert_param(IS_GPIO_PIN(GPIO_Pin));

GPIOx-ODR^=GPIO_Pin;

}

uint32_tHAL_GetTick(void)

{

returntick;

}

voidHAL_Delay(__IOuint32_tDelay)

{

uint32_ttickstart=0;

tickstart=HAL_GetTick();

while((HAL_GetTick()

文档评论(0)

工地殿小二 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档