1.初步认识:单片机可以跑操作系统,SD卡上面,类似树莓派,把操作系统镜像下载到SD卡里面,就可以在单片机上跑操作系统了,当然单片机有联网功能的话,可以ping一下看看有没有正常联网,ipcong看看其网络地址,然后到xshell远程连接进行开发,只有操作系统是远远不够开发单片机的,编译脚本即编译规则,交叉编译链,编译链,也是必要之一,一般官方会提供,直接下载就好,如果单片机性能好,自身自带编译链,官方会放到镜像里了,如果不行,那么就要用交叉编译链,因为ARM架构和电脑的操作系统的架构不一样,bin文件识别不了,就是把比如Linux的bin变成ARM下能识别的bin,开发开发板,我们一般不用开发板上的编译器,因为速度慢,所有用电脑操作系统开发开发板就是这么个道理,快,都是不同架构相互识别不了,故要交叉编译,固件库也是必要之一。
(下载交叉编译连,就是去下载包,然后解压到目录,然后在bin里,然后去环境变量里面export 声明路径就能用了,即.bashrc里加一个export PATH=&PATH:路径。)
固件库,单片机的固件库通常是由单片机的制造商或供应商提供的软件库,用于简化开发人员在单片机上编程和控制硬件的任务。这些库包含了各种函数和例程,可以用于配置和操作单片机的不同硬件模块,如GPIO(通用输入/输出)、定时器、串行通信等。
拿到的是一些静、动态库(二进制文件)和头文件(.h),没有.c,因为保密,给头文件是让你看得到里面有哪些函数,你只能应用,而不能看到具体实现。
这些库通常由单片机制造商提供,并且通常是针对特定型号或系列的单片机进行优化的。这些库是官方支持的,通常是免费提供给开发人员的。
第三方库则是由独立的开发人员或组织创建的库,用于扩展单片机功能或提供额外的功能。这些库可能涵盖更广泛的硬件平台,但不一定会像官方固件库那样与特定型号的单片机紧密集成。
所以,单片机的固件库可以是官方提供的,也可以是第三方开发的,具体取决于开发人员的需求和选择。官方库通常受到更好的支持和文档,但第三方库也可以提供特定领域的特定功能。
2.如果没有IDE,那我们就要手写编译规则,即编译脚本makefile。
(1)我们先说有IDE支持下的开发:首先,所有的功能都基于文件,举个例子,在没有运用到第三方库时,我们写了main.c,xxx.c,xxx.h,点击编译按钮,这个动作,ide将为我们做了以下工作:
***生成编译脚本,里面写了那些依赖关系,链接第三方库,包含第三方库路径,生产可执行文件等。
如果我们运用到第三方开发库时,我们就会在IDE中下载它,我们下载的就是别人生成的静态库或者动态库,下载过程,IDE就帮我们将这些库链接到我们的目标文件。拿到的是一些静、动态库(二进制文件)和头文件(.h),没有.c,因为保密,给头文件是让你看得到里面有哪些函数,你只能应用,而不能看到具体实现。
(2)如果没有IDE支持,那我们就要手写编译脚本,我们也可以将我们的功能封装成一个库,下载第三方库(别人生成的静、动态库)。手写编译脚本时,我们需要手动编写好那些依赖关系,然后添加头文件路径,包括自己定义的头文件、系统提供库头文件、第三方库下载库头文件,然后添加库文件路径,包括自己定义的库文件、系统提供库库文件、第三方库下载库库文件。
总一句话就是,如果是没有IDE,我们就要在开发过程中编写脚本文件,不断往上面添加我们自己的东西和链接别人的东西,最后生成可执行文件,如果有IDE,上面的工作就由IDE帮我们完成。
3.Cmake工具:提供一些函数完成脚本文件里一些写法,更加简洁,生成makefile,再用make执行。可建立多个CmakeFile.txt,即每个目录下可能放有不同功能的的文件,所有可以给每个目录建立一个CmakeFile.txt文件,形成父子关系,方便管理。
4.如何发布自己生成的静、动态库文件:用命令将.cpp生成库文件,然后就可以删掉.cpp,保留.h让使用者知道怎么应用,注意,静态库会被打包到可执行文件里被一起发布,而动态库不会,动态库会在程序执行过程中运用到与他相关的函数时才会被加载到内存里,故发布时,如果是静态库,则只需要发布一个可执行文件就行,当然,这是相对于文件中只有一个功能,如果是动态库,那我们就要可执行文件连同库文件一起发布。
所有,总结一下,在没有IDE的情况下,然后开发一款开发板:
1.下载官方提供的资料,包括镜像(如果是在单片机上跑操作系统)、系统(官方提供)固件库(外设的说明及封装函数,比如gpio口)、第三方固件库(如果引用到别人封装好的好用功能)、交叉编译链(如果是用服务器开发,为了快)。
2.我们在操作系统里建立一个工程文件夹,来存放工程相关文件,先写好我们自己定义的功能,写在xxx.c里面,头文件声明,再建立文件lib来存放要引用的第三方库文件和系统库,有时还会有自己的库文件,如果需要也可以分开装,建立文件include来存放头文件,再创建一个程序入口文件main.c,最后建立编译脚本文件,把这些文件的依赖和编译规则都写在里面,比如依赖关系,链接库,等。注意:交叉编译。
3.如果单片机上跑操作系统,那花样就多了,比如写shell脚本自启动等(shell用得最多是io插件形式,输入什么然后怎么输出什么),如果没有,那就用官方提供的下载工具,将我们make生成的可执行二进制文件下载到开发板上,开发板上电就会自动跳入程序入口,完成开发。
4.如果我们的功能写得很好,就可以发布出去,具体是先把工程中的.cpp生成库文件,然后删掉,这样我们就得到一个库文件,里面都是一些.so或者.a文件,这样我们就把这个库文件、头文件、一些说明文件及API说明文档打包成一个zip包发布,使用者下载到自己工程里,也是和第1、2、3点一样的步骤。