"); //-->
# 作者:Roff Segger,麦克泰技术测试、翻译和编写
我们使用SEGGER公司的Embedded Studio开发环境进行测试:在一个Cortex-M微控制器上,看看需要使用多少Flash存储器才能够完成一个LED灯的闪烁?
目标:
· 使用少于100个字节的程序完成一个闪烁应用
· 使用人眼容易看到的切换频率(即1-5Hz范围)
· 主程序用C/C++语言编写
· 使用方便得到的硬件
· 不使用或禁用工具链的运行时系统初始化
本文将大致介绍我们要使用的每一个字节和每一条指令。这是一个了解系统启动时到底发生了什么,即在到达main()函数之前“底层”发生什么的好途径。
简而言之:使用Embedded Studio开发环境可以在使用不到100字节的程序内完成这个工作。
01
硬件
我们使用的硬件是一块STM32跟踪参考板。它非常简单,只有一个STM32F407微控制器、3个LED、一个调试/跟踪接口和一个USB供电端口。
每个J-Trace仿真器交付中包含该开发板,然而,在这里,我仅仅使用常规的J-Link功能下载和调试程序。用户也可以选择任何带LED的硬件测试。
02
生成项目
非常简单,打开Embedded Studio开发环境,从菜单中选择File -> New Project,选择第一个选项,创建可执行文件。
根据提示,选择使用默认值,单击next几次后,我最终得到了一个小项目,如下面的Project Explorer窗口中所示。
选择Build->Build Mini或按F7构建我们的程序。
Debug -> Go或F5启动调试器。
我们现在没有连接硬件,所以Embedded Studio要求我们使用内置模拟器。
点击Yes或点击Enter启动模拟器。
调试器停在main()函数处,这是一个标准的 “Hello world”应用程序。
现在,为了实现最小的应用程序,我们将其简化为一个基本上是空的循环。
int main(void) {
int i;
do {
i++;
} while (1);
结果只占用了158字节的Flash。这已经非常不错了,但是在添加实际LED闪烁功能之前,我需要了解内存的占用,以及如何使我的程序最小化。
为了做到这一点,我可以查看Memory Usage Window、链接器映射文件、生成的ELF文件,或者简单地查看Project Explorer。
从Project Explorer窗口可以知道,这个可执行文件由3个源程序文件构成,以及它们使用了多少Code + RO空间。请注意,这些是编译器生成对像的数值。对于最终的可执行文件,链接器可以消除未使用的功能,或者在必要时添加一些结合层代码(从Flash跳到RAM或从Thumb指令跳到ARM指令)和填充(如:保证4字节对齐)。
另一个使用Flash存储器的地方,可能是从库中链接进来的代码,例如:C运行时库。然而,我们的小项目并没有使用库函数,因此我们不必考虑库代码的空间占用。
而且,Project Explorer展示了每个源文件的内存使用情况(2、128和24字节)和项目可执行文件总的内存使用情况:158字节。这和我们在Output窗口中看到的数值相同。
03
理解项目结构
这三个文件的用途?我们的应用程序只是一个简单的main()函数。为什么我还需要另外两个文件呢?
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
eleaction01 阅读:2919