Skip to content

Latest commit

 

History

History
executable file
·
80 lines (45 loc) · 3.95 KB

嵌入式开发的那点儿事儿.md

File metadata and controls

executable file
·
80 lines (45 loc) · 3.95 KB

嵌入式开发的那点儿事儿

前言

在做软件开发之前,总认为这是格外高精尖的工作,当踏入这个领域,发现也就那么回事儿。后来应聘嵌入式的工作,面试官问:你没有这方面的经验,这个不是你想象的那么简单。潜在意思就是你做不了,后来有幸入行,发现也就那么回事儿。再后来面试服务端的工作,人事说:嵌入式那么小的程序怎么能跟服务端的复杂比?iphone开发又说:客户端跟后台开发两码事,你会UI么,网络请求使用哪个类库什么方法?

一路走来,发现也就那么回事儿。如果你是新手,不要相信他们怎么说,坚持自己的,一点儿问题没有。

准备工作

在开始进入工作之前,有点儿基础知识能事半功倍:

  • 懂点儿数据结构、算法
  • 懂点儿数字电路,一点儿就行
  • c语言要会

你看,一点儿都不难。现在嵌入式基本都带操作系统了,所以会点儿操作系统原理和linux比较好。

接下来,我们正式进入项目开发,嵌入式的项目一般较小,只要控制好存储和运行效率就没大问题了。

项目需求

在嵌入式设备上开发一个txt文本阅读器。 假如你用手机看过txt小说,对,需求就是这个,实现上下翻页,自动滚屏,书签等常用功能。

这里的嵌入式设备不带操作系统的,都是裸机。

项目技术分析

为了简化理解,突出核心主题,省略旁枝末节的依赖,我们的开发资源只有一个:帧缓冲。简单吧。

我们知道最终数据都是绘制到帧缓冲区,通过硬件中断将帧缓冲的数据显示到显示器上。那么就可以这么理解:帧缓冲就是我们的绘制区域。

下来干什么?

我们的资源只有帧缓冲,那么要想显示文字,首先要创建文字,这是标准的废话,但确确实实需要自己实现。

  1. 实现文字显示

    文字是一种图形图像,也就分为两种格式:位图和矢量图。这里我们使用位图,比较简单。

    位图就是一个个的像素点组成,也就是字库了,首先要建造自己的字库。简单理解就是在pc上找个字库,自己写个工具,把pc上的字库转换为适合帧缓冲显示的字库。

    显示某个字,就是查找字库中对应的像素信息,拷贝到帧缓冲区。

    至于字间距,行间距,段落间距,字体颜色等,由你全方位控制。然后你会发现,直接控制底层更简单,原理很容明白,而衍生的上层建筑也就很容易理解,所谓一通百通就是这个道理。

  2. 文本格式识别

    输出搞定,下面就是输入了。常见的文本编码有gbk、ucs和uft-8,至于ASCII都被兼容。当然还要处理一些细节如BMP、BOM以及大小端等,但这都不是问题。

    字符编码转换:

    • ucs和utf-8之间的转换有内在规律,很简单
    • gbk与utf-8之间完全没规律,怎么办?做个映射表。怎么做?当然是写个工具喽。
    注意:文本内容编码和文件名称编码可能不同的,要分开处理
    

实现

两大主要问题解决了,就可以实现功能了。

功能实现都是逻辑问题,不复杂。需要注意的的是嵌入式开发ROM和RAM都很小,需要些技巧,尽量少的占用资源。如:

  • 如何实现ram对大文件的加载
  • 如何绘制帧缓冲不闪烁
  • 如何在8位机上实现真色彩
  • 如何在滚屏滑动时不卡顿
  • 如何实现外存的热插拔
  • 如何解决栈空间小无法递归

至于UI问题,我们实现了一套简单的动画库,用美工切图加动画效果做出漂亮的界面,当然,这是另外一个故事了。

总结

嵌入式开发对数据结构和算法应用较多,因为资源有限,我们的c库连malloc都不支撑,所有代码都需要自行搭建。程序员的快乐是解决问题,如果很巧妙的解决了问题,那种快乐是不言而喻的。