基于操作系统编程与裸机编程的区别

     因为学的是控制,刚开始的时候玩的单片机比较多,单片机进行开发的一个重要的特点就是裸机编程。也就是说内核跑的完完全全是你的代码。但是在操作系统上编程就完全不一样,因为你的程序大部分都在调用操作系统的接口函数,从而间接的管理硬件。操作系统搭好了框架,实现硬件抽象,文件存储管理,进程管理,本质上就是对cpu,i/o和存储器搭了一个管理框架,这种间接的管理方式使我刚接触ROS开发时产生了极大的不适应,我不知道我应该写什么,不知道函数和硬件之间的关系。就是当时很难理解接口的概念,总是在纠结底层。

   基于操作系统编程理解的第二个难点我觉得是进程,像我们写的应用程序,以windows举例,exe文件并非直接读取执行,而是有一个映射到进程管理空间的过程,windows是由PE装载器完成。

    整个过程我觉得可以分为五步,第一步是通过屏幕鼠标网络,u盘等I/O口将源码写入硬盘,第二部是进行编译,第三步是创建进程,第四步是进行映射,也就是映射到进程空间,第五步调用链接库时进行链接

  暂时先写这么多,有时间再补充,欢迎讨论。

21年7.15更新

 上班一周了,做的偏上层,自动驾驶的规划算法。因此被迫升级自己的C++能力,同时代码也是基于linux系统的。这两天又有了一些新的理解。

   废话不多说。

   人类科技水平发展的过程从另一个角度来看是偷懒的过程,有偷懒的需要,也就有了进步,编程语言也是这么发展的,汇编是针对硬件的语言,是机器语言直接对应过来的,与硬件的关联有个非常重要的问题就是程序不具备移植性,硬件变了代码也就变了。因此,c语言就出现了,目的就是减少与硬件过程的管理性,但是有可以对硬件进行操作,比如说可以管理内存,但是是一种统一的操作方式。

    操作系统也是如此的目的,是对硬件的抽象,因此你就无须直接操作硬件,因此当你需要操作硬件时,你的思维就应该转变了,不是去找相应的寄存器,而是去找相应的接口函数也就是API,即使不同操作系统的API存在差异,但是都会存在。

   这里随便插点题外话,c++相比其它语言对硬件又更加关注,对底层运行的控制更加精准,注重的是效率。

你可能感兴趣的:(单片机,操作系统)