单片机与嵌入式linux应用层到操作硬件底层的区别

        在单片机与嵌入式linux的应用与驱动操作层中对于单片机由于单片机可以直接通过寻址去直接操作单片机内部的RAM和GPIO等,至于能够进行此操作的原因在于单片机的寻址空间上,所谓的寻址空间,就是PC指针的寻址范围,以下列80C51单片机指令系统寻址方式为例,多数指令执行时都需要使用操作数,所以存在如何取得操作数的问题,这个叫做指令的寻址方式,下面的7种寻址方式能够直接保证单片机CPU单元能够直接调用硬件驱动资源。

        虽然当下会有很多人说单片机的程序操作分为应用层和驱动层,但是在上述的观点看来,单片机的应用层和驱动层之间的界限并不明显,因此在其分层上是因为单片机编程人员技术足够高超后,为了便于区分和读写程序才如此进行的。需要进一步了解的人可以通过STM32CubeMX所创建的hal库编程文件来对其硬件资源和分配进行进一步的了解

        对于linux来说,由于其CPU所发出的地址需要经过其特带的MMU单元所设定的权限判定,才可以访问硬件与寄存器资源,因此对于linux来说驱动层的存在是必要的,是能够与应用层区分开来的(虽然常说linux的驱动层也就相当于寄存器的映射)。

        另外,linux的应用层需要访问到驱动层的话,需要通过读,写或者open等操作方可,俄且其需要让硬件产生如同单片机中断系统般的“故障”实事处理操作方可,其核心就是执行一条汇编指令,即执行“swi #o”指令,其为内核所提供的swi异常处理函数也被称为软中断指令(软中断指令中包含了一个24位的立即数,这个立即数表达了用户所请求的特定的SWI功能)。linux中所执行的read或者write也是需要通过swi异常处理函数,方可对硬件资源进行访问。

arm异常与中断处理异常向量表

        在执行swi异常处理函数的过程中,SWI指令中包含了一个24位的立即数,这个立即数指示了用户请求的特定的SWI功能,即这个立即数表示的是SWI指令所想要触发中断的中断号(可以稍微理解为单片机中断的触发标志位),在后面所进入的swi异常处理函数中则需要将其中的24位立即数提取出来,以此来访问用户所需的驱动与硬件资源。

 由上图可以看出,虽然看起来我们在Linux调用open,read,write时看似是在直接操作硬件资源,但是实际上所经历的步骤比表面上复杂得多,这就是linux从应用层到驱动层的工作逻辑,这样子严格的分层能够保证Linux系统能够得到更加稳定的运行。

        好了,以上为我的部分学习成果总结,所述如有不当,还望各位不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值