KEIL中让程序在RAM中运行的办法
创作时间:
作者:
@小白创作中心
KEIL中让程序在RAM中运行的办法
引用
1
来源
1.
https://m.book118.com/html/2024/1226/7121001122010013.shtm
在嵌入式系统开发中,有时需要将程序代码从Flash迁移到RAM中运行,以提高执行效率或满足特定的系统需求。本文将通过一个STM32F411 Nucleo开发板的实例,详细介绍如何在KEIL开发环境中实现这一目标。
最近在使用KEIL时,经常遇到需要将部分或全部程序放到RAM中运行的问题。经过一番搜索和尝试,现将总结分享如下,希望能为大家节省时间。本文将以STM32F411 Nucleo开发板为例,介绍几种让程序在RAM中运行的方法。具体来说,我们将通过多种方式将LED翻转函数(ToggleLED)的代码放在RAM中运行。
ToggleLED函数从Flash中执行的情况
我们先来看看ToggleLED函数从Flash中执行的情况。下面是ToggleLED函数及其调用情况。在main函数的while(1)循环中调用ToggleLED。
void ToggleLED(void)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
/* Insert a 100ms delay */
HAL_Delay(100);
}
int main(void)
{
……
/*##-3-Toggle PA05 IO in an infinite loop #################################*/
while (1)
{
ToggleLED();
}
}
Linker的配置如下图所示:
从map文件可以看到,ToggleLED以及其中调用到的HAL_GPIO_TogglePin和HAL_Delay函数的地址都在FLASH中。
将翻转LED的程序放到SRAM中执行
方法一:通过#pragma arm section code="RAMCODE"和#pragma arm section
这种方式可以同时将多个函数放到指定的section。具体方法如下:
- 修改.sct文件,自定义一个叫做RAMCODE的section,放在RW_IRAM1执行区域,地址范围0x00。
LR_IROM1 0x00000000 { ; load region size_region
ER_IROM1 0x00000000 { ; load address = execution address
*.o(RESET,+First)
* (InRoot$$Sections)
.ANY(+RO)
}
RW_IRAM1 0x20000000 { ; RW data
*.o(RAMCODE)
.ANY(+RW+ZI)
}
}
在工程中使用前面修改的.sct文件
使用#pragma arm section code="RAMCODE"和#pragma arm section将需要放到RAMCODE section的函数包括进来。编译时,编译器会自动将这些函数放到RAMCODE所在地址区域。
#pragma arm section code="RAMCODE"
void ToggleLED(void)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
/* Insert a 100ms delay */
HAL_Delay(100);
}
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->ODR ^= GPIO_Pin;
}
uint32_t HAL_GetTick(void)
{
return tick;
}
void HAL_Delay(__IO uint32_t Delay)
{
uint32_t tickstart = 0;
tickstart = HAL_GetTick();
while ((HAL_GetTick() - tickstart) < Delay);
}
#pragma arm section
通过上述配置,编译后从map文件可以看到,ToggleLED以及其中调用到的HAL_GPIO_TogglePin和HAL_Delay函数的地址都在SRAM中。
热门推荐
从挖矿成本看比特币底部:42,000美元或成关键支撑位
在工作后,如何主动获取专业相关知识 (软件开发)
客户之声:利用反馈优化产品与服务,提升满意度之道
Excel中年龄段人数占比计算方法详解
太原自驾游西安旅游攻略,太原旅游路线攻略
优化库存周转:WMS系统如何精准控制库龄
空腹血糖正常并非为“真”!医生提醒:当心这10个隐性高血糖症状
创新火花比完美学分重要,多所高校铺开学业评价改革
婚前财产可以投资什么?一文详解婚前财产投资与协议要点
春分时节,这4种时令蔬菜正当季,营养美味,错过再等一年
银行的储蓄产品的税收优惠政策有哪些?
豪气干云、淡泊明志,蔡锷护国护法的“韬”与“范”
如何理解《道德经》中对“道”的描述?
他们探讨得越激烈,我就越清醒
一年级家长开学不到10天收到4次投诉!如何平稳度过一年级?资深班主任来支招
吉他乐理基础知识入门
2025年24节气养生指南:从立春到大寒的饮食调理全攻略
如何分析券商板块的市场表现?这些分析方法有哪些参考意义?
2025年东南亚投资市场深度剖析:机遇、挑战与投资建议
高阶产品如何有效管理需求?
左肾囊肿是什么病严重吗
沈阳钢结构的稳定设计有哪些?
面试规范化流程:从准备到反馈的全面指南
MBTI中的感觉与直觉:定义、应用、相互影响及相关维度
7月末我国货币乘数为8.32倍,今年2月以来连续6个月维持在8倍以上
大模型应用的10种架构模式
书面辞职证据应当怎么保留
咨询费合同系统的法律适用与合规管理
专家笔谈丨推动平台企业算法用工规则透明,制度层面还能做什么?
人民币汇率政策对中国经济发展的影响分析