吉游网提供最新游戏下载和手游攻略!

STM32程序仅存储于RAM并执行测试:无Flash存储方案

发布时间:2024-10-21浏览:39

之前写个一篇文章 (STM32 启动代码分析 及stm32 启动代码 实现|C语言 )写道,cortext-m4 的启动过程:

1,在系统reset时会去找异常向量表中前4个字节指向的地址作为栈顶

2,第4-8个字节是reset handler函数的地址,然后PC会load这个地址,并运行。这个reset 向量指向的函数是我们能写代码控制的最开始的位置。 cortext-m4 从向量表中把reset异常的函数地址加载到PC寄存器并运行是纯硬件行为,而且是无法更改的,那么如何做到从RAM运行了,就需要解决:

1,默认的向量表是在Nor Flash最开始的位置,现在就需要修改向量表到RAM中。

2,如何让PC寄存器从RAM中向量表开始加载reset_handler 函数地址。---显然我们是没法用软件控制的,我们的软件的第一行代码都跑不到。

一个个的搞。

如图片把向量表,和指令text 段都放在了 RAM地址空间中,所以解决第一个问题主要是修改连接脚本。把原先从FLASH加载改到RAM加载,这时在coretx-m4 眼里已经没有了nor_flash。

连接脚本改了后:

arm-none-eabi-nm 工具看一下

RAM中地址是0x20000000开始的,对比flash地址0x08000000。 cortext-m4 眼中的VMA已经全部是在RAM中,还有一个问题就是 cortext-m4 怎么知道 向量表在RAM中了。

直接看图片抓重点,有个VTOR寄存器可以更改向量表的位置。

直接指定VTOR为RAM开始的地方

,其实我的程序现在还比较小,也没其他的中断,可以不指定这个,但是你一当把程序下载到ram中,在按复位按钮,或者产生其他的异常及中断,因为没指定VTOR,程序肯定跑飞。还是加上了

2,第二个问题,更改PC到新的reset_handler函数出怎么解决了。首先这个你是没法通过改自己的编写的代码去做到的, 因为跑不到你的第一行代码那儿去。我的调试环境一直都是openocd +gdb。

先是下载到ram中。

看一下RAM 和 编译的程序,没问题。

dump来看reset 是调用函数地址是0x2000006b

这个CPU 目前最初始的状态

其实到这里就可以让CPU直接跳到0x2000006b处就行。

程序也是正常的跑起来了,但是我们写代码是肯定不知道reset异常对应handler 函数在哪位置了。

现在是0x2000006b,如果这个文件前面加个一些函数就可能0x2000008b了反正不能确定编译器把它放在哪里?

都到这地方了,就是函数地址不固定了,那就固定他就好了,最好的是把它固定在向量表紧接着的位置。

向量表最后一个位置是0x000001A8.紧接着它的位置就是0x200001AC改一下代码及脚本。

把这个reset_handler 放到.reset_fun 段中。

然后连接脚本加上这段,并且把VMA放到0x200001AC位置。

好了地址固定了,最后VScode也好,还是命令行调试,最后就一句话写到脚本里

openocd.exe -f F:\OpenOCD-20200729-0.10.0\share\openocd\scripts\interface\stlink-v2-1.cfg -f F:\OpenOCD-20200729-0.10.0\share\openocd\scripts\target\stm32l4x.cfg -c init -c "reset halt" -c "load_image hello.bin 0x20000000" -c "resume 0x200001AC"

下载及运行都成功。

代码路径 https://gitee.com/android_life/stm32_freertos_opensource/tree/master/assembly/run_code_on_ram

前面说了这个

用户评论

太易動情也是罪名

STM32太酷了!把程序加载到RAM就能直接运行,无需闪存,节省空间。

    有18位网友表示赞同!

蔚蓝的天空〃没有我的翅膀

玩这个设备让编程体验更流畅,程序运行速度快得惊人。

    有6位网友表示赞同!

权诈

对于初学者来说 STM32 简直是一块跳板,让你深入理解内存管理和效率。

    有6位网友表示赞同!

不相忘

我的代码量增加,而STM32处理起来依然游刃有余!无需担心闪存空间问题了。

    有18位网友表示赞同!

凉城°

能够直接在RAM中测试程序,大大提高了开发过程中的效率和便利性。

    有10位网友表示赞同!

巷陌繁花丶

STM32解决了我之前面对的很多存储限制问题,运行速度也更快了。

    有16位网友表示赞同!

風景綫つ

这个技术使得硬件调试更加方便迅速,不用担心闪存写入次数受限的风险。

    有18位网友表示赞同!

|赤;焰﹏゛

对于喜欢挑战和追求高效能的程序员来说,STM32是绝佳的选择,不依赖闪存让操作更直接。

    有10位网友表示赞同!

丢了爱情i

我的项目因STM32的能力而受益良多,程序加载和运行变得更加轻松自如。

    有18位网友表示赞同!

此刻不是了i

在STM32上运行代码时无需考虑闪存大小限制,开发过程变得不再受束缚。

    有18位网友表示赞同!

安陌醉生

这种技术使得设备响应时间明显缩短,极大地提升了用户体验感。

    有16位网友表示赞同!

花花世界总是那么虚伪﹌

对于寻求更高效、快捷开发流程的工程师们,STM32提供了前所未有的便利。

    有8位网友表示赞同!

惯例

自从改用了STM32,我的代码执行效率提高了数倍,不再有闪存耗尽的困扰。

    有17位网友表示赞同!

独角戏°

使用STM32感觉就像是进入了编程的新世界,无需考虑任何闪存货不足的问题。

    有5位网友表示赞同!

眉黛如画

在RAM中运行程序让我的项目瞬间得到了飞跃,性能优化效果显著。

    有8位网友表示赞同!

暮光薄凉

STM32为那些追求极致性能和速度的游戏开发者提供了一款强大的工具。

    有5位网友表示赞同!

几妆痕

不再受限于闪存存储容量的限制,开发变得更加灵活、自由。

    有12位网友表示赞同!

傲世九天

得益于STM32的特点,我可以更专注地对程序进行优化和迭代而不受空间束缚。

    有20位网友表示赞同!

你是梦遥不可及

在RAM中执行游戏意味着更快的游戏启动时间与更流畅的操作体验。

    有13位网友表示赞同!

酒笙倾凉

这款设备帮助我克服了以往项目中的存储瓶颈问题,运行效率显著提升。

    有18位网友表示赞同!

热点资讯