最近在尝试换一个平台编写51单片机(毕竟Keil的手感,用过的人都懂)然后就发现了PlatformIO,这里就不介绍如何在Clion上安装PlatformIO,有需要的童鞋可以参考下面的博客
https://blog.csdn.net/qq_26700087/article/details/121444631
这位博主写的很详细了哈~
但是!
新建完我就发现了很令人头秃的现象:有一堆波浪线(虽然此时是可以编译通过产生.hex文件的)这换哪个程序员看的不难受~最最关键的是没法自动补全了,太难受了。

于是!
就有了这篇文章
大家可以先看看自己项目的文件结构
有一个CMakeLists.txt文件,虽然PlatformIO依赖的sdcc工具链不需要依靠CMake,但是Clion是高度依赖CMake进行项目管理的,所以这个自动生成的CMakeLists.txt干了件坏事:没把依赖库的路径写全从而让Clion找不到依赖的文件。但是编译器不是通过CMakeLists.txt找文件的,所以能定位到依赖文件并成功编译产生十六进制文件。
找到了问题就好办了~既然自动生成的CMakeLists.txt里面没有路径,那我们就手动加上就ok啦
我们先来看看CMakeLists.txt中的内容,发现他还include了一个外部文件:

经过阅读后可以知道这个CMakeListsPrivate.txt里面正好包含了参考的路径

可以发现,51单片机用的<8051.h>或者<8052.h>的路径(
C:\Users\(用户名)\.platformio\packages\toolchain-sdcc\include\mcs51
和
C:\Users\(用户名)\.platformio\packages\toolchain-sdcc\include")并没有包含进去
那就手动添加下面下面这俩行就ok啦(注意路径中斜线方向)
include_directories("${ENV_HOME_PATH}/.platformio/packages/toolchain-sdcc/non-free")
include_directories("${ENV_HOME_PATH}/.platformio/packages/toolchain-sdcc/include/mcs51")
添加完成后点Reload Changes重载一下,可以看到头文件已经不报错了:


下面来解决GPIO的警告:
我们在<8052.h>上点一下,然后按Ctrl+b转到这个头文件:

哇,一片红
这里错误主要是由于__sbit和__at这俩家伙又让Clion找不到了, 这两个家伙藏在<lint.h>中,我们在<8051.h>中手动include即可:

最后,我们再往下看8051.h文件:

发现是报识别不了bool这个标识符,这好办,相信很多人都知道了,再在<lint.h>里include一个<stdbool.h>就ok啦 :(正常的话自动补全已经出现了哦)

最后再回到main.c,可以看到没有任何报错,且可以自动补全引脚,魔改成功!


一些特殊寄存器也可以成功自动补全:


最后再说几嘴:
1.这里gcc还是会报错,没事,不用管他,我们最后用的不是这条工具链:

2.这样魔改不会增加最终编译文件的大小:(对比第一张图可知)

喜欢就收藏一下吧~
3779

被折叠的 条评论
为什么被折叠?



