打印

从裸机编程到嵌入式Linux编程思想的转变

[复制链接]
1045|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szmzxyd|  楼主 | 2017-4-1 09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于裸机编程可能很多人比较熟悉,比如51单片机系列,那么裸机编程与嵌入式Linux编程思想上有什么不同呢?今天我们就来聊一聊。


首先,我们一起回顾一下51形式的编程方法,以一个简单的LED例子:通过串口向其发送一串指令,让LED灯闪烁,闪烁频率由串口发送的指令决定。

开始编程:一开始各种初始化晶振,初始化要用的功能模块:UART,GPIO,定时器。那么就会通过设置寄存器的各种位,把UART配置为中断模式,GPIO对应的LED引脚为输出模式,用于控制LED灯的暗灭,最后初始化定时器,来控制暗灭的频率。相信有过嵌入式裸机编程经验的朋友们一定都觉得这很简单,但是如果跑上了操作系统,那又应该怎么办?

嵌入式Linux分为驱动层和应用程序层。大家一定听过,对Linux设备的操作就像操作文件一样简单,打开,写入,关闭。听起来是很简单,听完就算了,也不知道到底说什么。

驱动层就相当于我们在51形式编程中的初始化功能模块,在Linux中,已经把所有函数封装好了。举例:用at91sam9260芯片,现在要把PB1 引脚设置为输出模式,且初始值为低电平,则调用系统封装好的函数:
1. at91_set_gpio_output(AT91_PIN_PB1, 0);  
这个函数位于Linux内核源代码arch/arm/mach-at91,要用到什么函数进去找。在arch/arm下有很多文件夹,以后需要自己根据自己的需求去选择相应的芯片找函数,这个可能是Linux不怎么人性化的地方,需要改进,只有很有经验的工程师才能轻松找到,初学者真的要费很大精力。

而我们那些晶振时钟初始化就不用写了,在Linux操作系统运行的时候已经帮你初始化好了。还有串口也已经初始化好了,在Linux有专门的操作函数,大家可以看看Linux下串口操作的相关资料,这里就不过多介绍了。当然驱动层完成的还不只这些工作,剩下的工作在讲玩应用程序层之后再介绍。

应用程序层:这是一个完全与硬件无关的层次,就相当于我们51形式编程的逻辑层一样。那么我们怎么和驱动层打交道呢?大家回忆那句话:像操作文件一样,操作硬件设备。没错,我们就是操作文件。每个硬件设备驱动会有一个设备文件(一般要手动生成,自动生成要在驱动中写好也行)。例如我们为LED灯取一个设备文件名字为leds,然后在dev/leds生成这个设备文件,应用程序用open方法打开文件后,得到文件描述符fd,那么以后操作LED这个设备就是操作这个fd。
1. fd = open (“dev/leds”, flags);  
到底怎么操作fd才能像操作文件一样操作硬件设备呢?就是命令机制!通过一个非常重要的函数ioctl(应用程序和驱动程序的接口之一)。

假设我们定义了命令 LED_ON和LED_OFF(定义命令的方法见前几篇**),那么我们要让LED闪烁,在应用层只要写:
1. while(1)  
2. {  
3.     ioctl(fd,LED_ON);  
4.     sleep(1);  
5.     ioctl(fd,LED_OFF);  
6.     sleep(1);  
7. }  

是在应用层看来这个是不是很简单?但是却苦了驱动层了。刚刚说到驱动层做的事情不只是初始化模块功能,不错她还有一个功能就是完善ioctl,根据相应的命令进行相应的动作。(ioctl是比较复杂的,这里只是举了一个最简单的例子,朋友们还是要多看一些书籍和实验),这里是不是连定时器的初始化都不用我们自己写,直接调用系统的休眠函数来达到延迟的目的咯~~~

让我们再次回到驱动层,驱动层就要完善这个ioctl了,因为驱动层可以直接对硬件操作,让输出高电平和低电平。

驱动的操作就比较复杂了,这里只能简单讲下概念了,因为这时已经是Linux设备驱动开发的内容了。


好了今天就介绍到这里,不知道各位嵌友有多少来自51单片机呢?在下方评论区留言一下吧。

相关帖子

沙发
fwggtzy| | 2017-4-1 10:24 | 只看该作者

使用特权

评论回复
板凳
619888476| | 2017-4-1 10:48 | 只看该作者
看看

使用特权

评论回复
地板
能把我领进大门麽

使用特权

评论回复
5
@若水| | 2017-4-1 13:23 | 只看该作者
+1

使用特权

评论回复
6
wzc86354120| | 2017-4-1 22:55 | 只看该作者
各有隔得好,各有各的发挥之地,Linux学好了还是很不容易的

使用特权

评论回复
7
落叶行健ywm| | 2017-4-2 08:11 | 只看该作者
我的感觉就是:在一定架构的指导下,封装封装再封装!封的让你追踪不到,但是懂了了架构后,游刃有余!

使用特权

评论回复
8
szmzxyd|  楼主 | 2017-4-2 09:54 | 只看该作者

有一定基础的学习还是比较容易的 最主要是看自己是不是真正的想学的哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

29

帖子

1

粉丝