本帖最后由 tyustli 于 2019-6-8 14:04 编辑
在 STM32 上使用 C++
如何使用在搭载了 RT-Thread 系统的 STM32 平台上使用 C++ ,这里介绍了包括 C++ 的配置和应用等。并给出了在意法半导体 STM32F411 nucleo 开发板上验证的代码示例。
硬件平台简介
本文基于意法半导体 STM32F411 nucleo 开发板,给出了 C++ 的具体应用示例代码,由于 RT-Thread 上层应用 API 的通用性,因此这些代码不局限于具体的硬件平台,用户可以轻松将它移植到其它平台上。
STM32F411 nucleo 是意法半导体推出的一款基于 ARM Cortex-M4 内核的开发板,最高主频为 100Mhz ,该开发板具有丰富的板载资源,可以充分发挥 STM32F411RE 的芯片性能。
throw_exceptions.png (18.04 KB, 下载次数: 0)
下载附件
2019-6-8 13:59 上传
附录 main.cpp 程序源码:
- /**
- * @file main.cpp
- * @time 2019-6-8 13:31:39
- * @author tyustli
- * @platform w10 + mdk5 + rtthread 4.0.0
- */
- #include <rtthread.h>
- #include <rtdevice.h>
- #include <board.h>
- /* defined the LED0 pin: PA5 */
- #define LED0_PIN GET_PIN(A, 5)
- int main(void)
- {
- int count = 1;
- /* set LED0 pin mode to output */
- rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
- while (count++)
- {
- rt_pin_write(LED0_PIN, PIN_HIGH);
- rt_thread_mdelay(500);
- rt_pin_write(LED0_PIN, PIN_LOW);
- rt_thread_mdelay(500);
- }
- return RT_EOK;
- }
- using namespace rtthread;
- class tran
- {
- public:
- void getnumber(int a, int b)
- {
- x = a;
- y = b;
- }
- void out(tran & s)
- {
- rt_kprintf("x = %d, y = %d
", x, y);
- }
- private:
- int x, y;
- };
- int test_cpp(void)
- {
- tran s;
- s.getnumber(13, 54);
- s.out(s);
- return 0;
- }
- MSH_CMD_EXPORT(test_cpp, test cpp);
- #include<math.h>
- #define MIN_VALUE (1e-4)
- #define IS_DOUBLE_ZERO(d) (abs(d) < MIN_VALUE)
- double div_func(double x, double y)
- {
- if (IS_DOUBLE_ZERO(y))
- {
- throw y; /* throw exception */
- }
- return x / y;
- }
- void throw_exceptions(void *args)
- {
- try
- {
- div_func(6, 3);
- rt_kprintf("there is no err
");
- div_func(4, 0); /* create exception*/
- rt_kprintf("you can run here
");
- }
- catch(double) /* catch exception */
- {
- rt_kprintf("error of dividing zero
");
- }
- }
- MSH_CMD_EXPORT(throw_exceptions, throw cpp exceptions);
复制代码
跟编译器有关,gcc支持,但貌似其他编译器一些只支持到03(IAR?)
MBED 默认是03,但可以修改配置文件支持11
貌似不支持
一周热门 更多>