您的位置:首页 > 编程语言 > C语言/C++

STM32 C++编程 001 工程模板

2016-09-04 01:18 253 查看

STM32的官方工程模板 修改为我们这套教材的:STM32 C++工程模板

我使用的 STM32 库的版本 : V3.5.0

注意:

  • 想学习本套 STM32 C++编程 的专栏是有点门槛的。你需要有一点点 STM32 基础 和 一点点 C++ 语言基础。

  • 完整的STM32 C++工程模板 的下载地址可以在本篇博客的最下面找到。

下面是:将 STM32的官方工程模板 修改为我们这套教材的 STM32 C++工程模板 的修改步骤:

1. 在启动文件中,增大了 的空间

原启动文件里堆栈的大小:

增大后:

  • 栈:
    编译器自动分配释放。比如说:函数语句的调用(存放函数的参数值,局部变量的值等等)、指针。

  • 堆:
    一般由程序员分配释放。由关键字
    new
    分配的内存,即对象,存放在 中。

Q: 为什么要增大启动文件 的空间?

A: 解释:
对于C++语言,相比C语言,它有对象的说法。如果你定义的一个对象需要分配的动态内存空间超出了STM32 启动文件里面设定的堆栈的大小,程序编译的时候是没有错误的,并且也可以烧到板子里面。但是在执行的时候没就出现错误,如果你在线调试程序,你会发现:程序死在了 stm32f10x_it.cpp 文件里的

HardFault_Handler()
中断函数里面出不来。

void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}

出现这种问题一般都是:数组越界,堆栈溢出所导致的,就是内存空间分配的问题。根据你的实际情况,解决办法就是:

  1. 增大数组的容量;增大启动文件中堆栈的大小。
  2. 对于我们使用C++变成,如果你不将STM32的启动文件中堆栈的大小调大一点,当程序使用了比较都的对象时,就会很容易死在
    HardFault_Handler()
    函数里面。

2. 将一些
.c
文件扩展名改为:
.cpp

将原模板工程里面的

main.c
stm32f10x_it.c
的后缀名改为:.cpp
修改后为:
main.cpp
stm32f10x_it.cpp

3. 在stm32f10x_it.cpp 文件中添加一些兼容C/C++的代码:

添加下面的声明:

#define ARMAPI extern "C"

这个声明是:在

.cpp
文件中,使用这个声明(
ARMAPI
)声明的函数,会被用 C语言 对待。
在用户可以使用的中断函数前面添加关键字:
ARMAPI
。比如:

ARMAPI void USART1_IRQHandler(void)
{
}

4. 我已经将一个Gpio类添加到了这个STM32 C++模板程序 里面。

Gpio类 下节再讲。

搞定

你可以到这里下载我已经做好的 STM32 C++工程模板
百度云 链接:http://pan.baidu.com/s/1bpbZ2MV 密码:esam
也可以在CSDN里面下载:http://download.csdn.net/detail/github_35160620/9621141

小结:
下一讲,我们来使用C++语言,创建一个STM32的Gpio类。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: