完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
这篇不做强制要求,感兴趣的同学可以了解。
目前我接触过的大部分单片机ide都是支持c++的基础特性的。(除了51 c++中相对来说更强调封装性一点,比如类啊,namespace啊,还有inline啊 对于单片机来说,使用c++最大的优点是可以很快速的移植网上海量的arduino库, 因为arduino就是c++的一层接口 ps:由于单片机并没有很大的内存。也没有专门的内存管理,所以一般编程还是推荐使用静态的数据,不要使用malloc。即使是实时操作系统作用也不大,可以当做是了解系统的一环去学习吧。平时编写单片机还是少用malloc。 当你决定使用c++的时候,意味着接口层最好也是使用c++编写的,不使用c++也是可以的,但是要被c++调用的头文件中属于c的内容要加上像这样的包着 #ifdef __cplusplusextern "C" {#endif #ifdef __cplusplus}#endif 接下来就来尝试把我们的整个通用库转换为c++吧 1.首先我在当前的实例项目上创建cpp的分支,并且子模块部分也创建了cpp项目的分支 这篇cpp教程就会在这个分支下 进行 2、把所有库内文件都变成cpp 3.去nativeInterface.h,也就是我们存放所有原生接口的头文件里。给它包上上面所说的 4.其实到此为止我们已经转变为了c++了 5.接下来让我们的矩阵键盘更加c++一点 由于矩阵键盘这种,一般只可能出现一个,也就是所谓的单例,所以我这里有两种写法, 一个是namespace,一个是class 先来试试namespace的 keypad.h中 keypad.cpp中 keypad_drv.h中 keypad_stm32h7_hal.cpp中 像这样之后 在keypad内部逻辑调用内部驱动可以直接执行drv::readRow() drv::readCol() 而我们app应用层调用keypad的内容则直接 keypad::init() keypad::scan() 另外顺带一提的是。像这里mymain中的myMainEvent函数是要被main.c这个c语言调用的。所以我们的myMain.h里不要include一些c++的内容,我这边为了防止混淆,把它重命名成myMain_C.h 至此为止已经完成了。 接下来我们来试试c++的class版本的,这边我直接复制keypad部分,并且改为ClassKeypad 这一次它长这样 cpp文件里呢是这样 然后去头文件中添加驱动层函数 由于驱动层是不希望暴露给外部的。所以我们放在private 然后对应的cpp 那么这里我们怎么去使用这个库呢 内部直接调用或通过this调用 外部应用层 首先通过getinstance获取单例指针,然后调用scan(); 至此,已经完成了 |
|
|
|
只有小组成员才能发言,加入小组>>
2557 浏览 0 评论
1158浏览 2评论
761浏览 1评论
514浏览 0评论
271浏览 0评论
447浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 05:09 , Processed in 1.242723 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号