不管不管就不管,我就要用c++开发!【C++ NO.1】!!!
一直在用的语言都是C【单片机】,前段时间学OPENCV,又重新拾起了C++。虽然但是,眼馋的不是C++语言的特性(面向对象是思想,不是语言特性,c语言也可以实现c++ 继承 封装 多态),而是C++那令人眼花缭乱、经过千锤百炼的各种库(包括标准库)。以前也看过单片机用C++开发的相关博文,讲的没那么仔细,对初学者有帮助但是没那么大(本人愚笨,参考别人的博文搞不定)所以有了本文!!!(废)话多不表,开整!!!
工程包:用的STM32CUBEMX生产的工程
RTOS:FreeRTOS,官网最新的FreeRTOS包(我是自己移植的,移植步骤查资料)
目的:用C++写一个简单的测试程序,对FreeRTOS任务做简单的封装
原则:不要在同一个.c(c源文件)或者.cpp(c++源文件)或者.hpp(c++头文件)或者.h(c头文件(暂时就这么叫吧))文件中c和c++混编。.cpp(c++源文件)和.hpp(c++头文件)只做和C++有关的,.c(c源文件)和.h(c头文件)只做和C有关的。最好是C代码嵌入到C++代码中,而不要C++嵌入到C代码中
用法举例:
在工程中建了用c++写的测试代码,有3个文件
.cpp文件:c++相关的代码
.hpp文件:类的声明,c语言头文件的引用(要加extern "C",看图)以及用c++写的对外函数的接口的声明(要加extern "C",看图)
.h文件:最不可思议的就是这个头文件了,所做的事就是把用c++写的对外函数的接口用extern“引用”,如果其他.c文件中的函数要调用c++写的接口,只需要包含这个头文件就可以了。
1)KEIL的设置:去掉勾选的MircoLIB。去掉勾选的原因如下:
2)RTE环境的设置,这一步的目的就是 串口对C++的标准输入输出重定向。
3)接下来就是C++标准输入输出重定向的实现
第二步做完以后,工程目录会多出compiler,如下图所示!我们需要对int stdout_putchar (int ch)进行实现(cin没有实现,因为不知道怎么进行阻塞。retarget.c目前是只读权限,文件修改不了,可以进到文件夹去修改权限,将STDOUT_CR_LF 和 STDERR_CR_LF 宏定义改成1 ,不然endl无法换行),int stdout_putchar (int ch)的实现就不讲解了;
4)接下来就是c++程序的编写
…………
…………
至此,就可以愉快的用c++开发啦