印度网站开发成本,办公空间设计平面图,张店网络推广公司,泉州网站设计制作前言#xff1a;之前的基于单片机的闭环控制步进电机项目其实已经完成了#xff0c;但很多时间都花在调试和生产上#xff0c;实在没时间去做总结笔记#xff0c;现在又开始做新项目了#xff0c;从单片机到了Linux#xff0c;想用这个平台来督促自己继续学习#xff0c…前言之前的基于单片机的闭环控制步进电机项目其实已经完成了但很多时间都花在调试和生产上实在没时间去做总结笔记现在又开始做新项目了从单片机到了Linux想用这个平台来督促自己继续学习所以新开一章。之前的单片机项目应该还是会补全的。 Linux到底是什么 我之前只是听过并没有深入学习过Linux我之前会以为它是一个和单片机同级别的概念现在发现是大错特错且很业余。我现在理解的相关概念是这样的。
- Linux是一个操作系统OS和Windows, MACOS, Android, IOS是同级别的概念
- Linux和Android是完全开源的甚至Android的底层是Linux但其他几种OS都不是
- 单片机可以说是CPU的一种之前学习的STM32又是单片机的一种
- 操作系统是运行在CPU之上例如Windows运行在Intel的CPU上MACOS运行在苹果的M系列芯片上IOS运行在A系列芯片上
- Linux操作系统可以运行在很多个CPU上例如NXP的I.MX6UL这也是我开发板使用的CPU
- 之前单片机也学习到了FreeRTOS是一种轻量化的操作系统如果需要网络文件系统GUI等需要开发者自行移植
- 如果要学习一个功能完善的操作系统Linux是非常合适的选择
- Linux的多任务管理、存储管理、设备管理、文件管理和网络都是单片机缺少或者不那么强大的功能我选择从搞明白Makefile开始Linux的学习
之前学习单片机的时候是有IDE这个东西的最开始的Keil后来的Clion都是很出色的单片机IDE。我们只需要在IDE上写代码它可以帮我们自动补全代码加上HAL库和CubeMX的支持单片机的开发难度大大降低。
在Linux中就没有CubeMX这样的神器至少目前没有所以系统的初始化需要自己写代码完成。
最重要的是IDE给我们提供了编译和链接的功能它使我们甚至都不知道编译这件事情的存在只要点击一个按钮IDE就会自动给我生成**.hex或者.bin**文件让我们烧写到单片机里。当然是编译没有错误的情况
Linux的嵌入式编程情况不太一样
首先Linux的可执行文件必须在Linux系统中编译一般是在Windows中用虚拟机建一个Ubuntu系统下使用命令行来做编译和链接Ubuntu系统和MACOS非常像在开发项目的时候可以先在Windows下的IDE进行代码编写之后使用FTPFileZilla传输到虚拟机中基于命令行和gcc编译器进行编译、链接还有种方法是在Ubuntu下直接使用图形化的IDE工具例如VSCode来做代码编写工具而且也能进行简单的编译亲测功能和Windows版本的VSCode基本一致我看很多文章都说源文件很多的情况下用VSCode编译会有问题但我目前还没有碰到用VSCode编译存在的问题用命令行gcc编译一样也会跳出来可能目前用的源文件还是不够多吧 等等什么是编译什么又是链接至少我是一直没有明确概念。 编译是将源文件(C, C, python等等)转换成中间代码文件中间代码文件在Windows中是**.obj文件**在Linux中是**.o文件**即ObjectFile编译器需要的是语法的正确函数与变量声明的正确 由于一个工程里包含的源文件很多所以编译得到的ObjectFile也会很多所以把大量的ObjectFile合成执行文件的动作叫做链接Link。链接器会在所有中间文件中找寻函数的实现如果找不到会报链接错误码。 好了从这里进入Makefile是一个比较好的时机。上面说了每一个源文件都需要编译成中间文件我们当然可以使用合适的IDE实现傻瓜操作但也可以自己写makefile来证明具备完成大型工程的能力。 makefile关系到了整个工程的编译规则。一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作。makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。 接下来详细的学习Makefile 未完待续