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中。
热门推荐
小样本学习在深度学习的效果(综述)
十二生肖配对:探寻人际关系与姻缘的奥秘
安全座椅的安装步骤是怎样的?安装后如何检查其安全性?
华为手机隐藏APP图标教程及使用技巧
预防糖尿病的10大生活习惯,你做到了吗?
铁路专科大学是包分配吗?好就业吗?附大学名单及分数线
过度训练综合症详解:识别、预防与治疗指南
大脑5-HT2A受体结合与个性化抑郁风险标记的积极关联
2024英国大学宿舍租金排名出炉!哪所大学宿舍性价比最高?
潮汕游必备:十大景点,第4个简直美到不需要滤镜!
服装工厂中的无形浪费及解决方案
揭秘!0721背后的趣味梗是什么?
猫传染性腹膜炎(feline infectious peritonitis)
长期投资之道:掌握财富增长的秘密
腾格尔回应网友推荐:我都看见了
反复落枕往往是颈椎病前兆!医生提醒别久坐不动
肺多发结节临床决策病例分享:该手术还是继续随访?
上海到深圳有多远路程:千里之遥,路在何方?
期待!山东泰山新主场重大进展:6万座专业足球场加盖顶棚!
6个好习惯,助你开启健康生活
黑枸杞子的作用与功效:从古籍中探寻黑枸杞的养生智慧
FDA发布ICH M12药物相互作用研究Q&A
女人下巴长痘痘是妇科病吗?下巴长痘妇科会出现什么问题?
白玉兰奖报名截止,《繁花》或成大赢家,胡歌与王凯、范伟争视帝
石家庄地铁6号线施工新进展,首台盾构机“裕新1号”顺利始发
2025年机器人行业五大趋势:从AI到可持续性
中国男篮12人大名单预测,备战2025年亚洲杯挑战,来看看都有谁
如何在香港成功注册公司:详细步骤与注意事项
陇南康县:文旅花繁竞芬芳
让你OpenAI,你却Open开放了成人内容