首先,编程语言是不能运行的,它是可运行的计算机程序的一种表达方式,而编译器或者解释器把编程语言转换为计算机可执行的程序。
而操作系统也是一种可执行的计算机程序,它通常先在计算机上运行起来,作为一套中间层存在。我们都知道,中间层是为了提供抽象转换而存在的,而这套叫做操作系统的中间层,定义了一套规则,使得后续的可执行程序能够更容易的被运行起来,而且能更容易的利用各种硬件(显示,键盘等等),能够调用一些库来消除不同的程序间重复的运行逻辑。
总结下,编程语言是一种可执行程序的表达方式,编译器把编程语言的表达方式转换为可执行的程序,而编译器做转换的过程,可以操作系统相关(也就是转换出的程序运行在特定操作系统上),也可以操作系统无关(直接在裸机运行)。而操作系统,本身是一个程序,也可以是编程语言来表达的(编译后通常操作系统无关),也可以不是(直接写机器码),而操作系统这个特殊的程序,提供了库,硬件驱动,运行时环境,框架等,是为了让运行在其上的程序写得更容易。
驱动程序是什么:驱动程序与硬件相关,编写驱动程序要非常了解硬件,同时给应用层提供API函数接口,应用层可以调用这些接口去访问硬件而不必了解硬件。
如果有上层应用软件来控制硬件时,还可以这样理解:驱动程序就是衔接操作系统与外部的硬件的C代码。因为上层的应用软件最后都是会调用操作系统api去做事情的。那操作系统怎么和硬件做交互?答案就是通过驱动程序实现的。
通俗地解释:比如说你有一个应用是控制每天早上六点钟开灯.应用程序只负责在适当的时间做适当的事(到六点了,要开灯了,触发按键信号,这个信号由操作系统调度通过驱动程序相应的API接口下发至硬件);具体它不用知道为什么按下键就能开灯,因为按下键后开灯的事情就是驱动程序完成了,驱动程序再去控制硬件管脚发出高低电平信号去驱动灯的开关.
单片机驱动程序文件组成:以led点灯为例,包括三个文件led.h(包括宏定义,变量声明,函数声明),led.c(模块的具体代码实现),main.c(工程的主函数,调用模块函数并适当组合就可以完成工程的项目要求功能)三个文件。用keil编译
refer:单片机驱动程序编写