电子大讲堂 猴赛雷系列!单片机与嵌入式的那点区别

-回复 -浏览
楼主 2021-04-05 07:48:14
举报 只看此人 收藏本贴 楼主
时代在变,现在人人都说从事嵌入式开发而非单片机开发,自从ARM公司推出CORTEX系列后,工程师面临芯片和技术选型的两难选择。下面随小编一起,从技术的角度分析单片机和带操作系统的系统的软件开发的异同点。


1、单片机与ARM等新处理器的基础比较
从表1里面各种芯片的资源,大概就可以猜知它们的应用场合。51单片机通常被用来做一些比较简单的控制,比如采集信号、驱动一些开关。AT89S51的Flash只有4K,一个稍微复杂的程序就不止4K了。SST89E564RD是一种扩展的51单片机,它的Flash达到64KB,可以外接最多64KB的SRAM。在SST89E564RD上的程序可以写得更复杂一些,但是它对外的接口也比较少。

CORTEX-M3系列的处理器,对外接口极其丰富,这使得它的应用面更广,但是限于它的Flash、内存还是比较小,一般不在上面运行操作系统,它算是一个性能非常突出的单片机。

HI3510是海思半导体公司的一款用于监控设备的芯片,一般上面运行Linux系统,通过摄像头采集数据、编码,然后通过网络传输。另一端接收到数据之后,再解码。在上面运行的程序非常复杂,有漂亮的图片界面、触摸屏控制、数据库等等。对声音图像的编解码更是用到DSP核。

S3C2440是一款通用的芯片,它与“高级单片机”STM32F103相比,多了存储控制器和NAND控制器──这使得可以外接更大的Flash、更大的内存;多了内存管理单元(MMU)──这使得它可以进行地址映身(虚拟地址、物理地址之间的映射)。可以在S3C2440上运行Linux系统,运行更大更复杂的程序。

在具体工作中,怎么选择这些芯片呢?一句话:成本!进行任何产品的开发都要考虑性价比,一切应该从“成本”出发。成本不仅包括芯片的价格,也包括整个系统的硬件、软件设计及维护的难易。
芯片价格可以在电子市场问到,也可以上万能的淘宝。

基于不同的应用,处理器和其他外设的选择是要统一考虑的,如果要实现一个简单的U盘读写功能,那么可以选择带USB控制器的CORTEX-M3芯片,也可以选择8051外接一个USB控制器比如SL811,就看哪种方案成本更低。进行芯片选型时,必须基于整个系统来考虑。

工程师的偏好和知识结构也是一个很重要的因素,如果你对ATMEL的芯片比较熟,也就不会倾向于三星;如果你不会Linux等操作系统,那么选型时就不会有操作系统的概念。选择自己不熟悉的芯片和技术,最后的成本也可能更高。
2. 带操作系统与不带操作系统的软件开发的区别
基于操作系统的软件资源非常丰富,你要写一个Linux设备驱动时,首先在网上找找,如果有直接拿来用;其次是找到类似的,在它的基础上进行修改;如果实在没有,就要研究设备手册,从零写起。而不带操作系统的驱动开发,一开始就要深入了解设备手册,从零开始为它构造运行环境,实现各种函数以供应用程序使用。
举个例子,要驱动一块LCD,在单片机上的做法是:
1

首先要了解LCD的规格,弄清楚怎么设置各个寄存器,比如设置LCD的时钟、分辨率、象素
2

划出一块内存给LCD使用
3

编写一个函数,实现在指定坐标描点。比如根据x、y坐标在这块内存里找到这个象素对应的小区域,填入数据。

基于操作系统时,我们首先是找到类似的驱动,弄清楚驱动结构,找到要修改的地方进行修改。

这并不表示代码Linux的驱动程序就比单片机的驱动程序好写,怎么在几万个文件中找到要修改的代码,这也是需要艰苦的学习的。基于操作系统的驱动开发,既要懂得芯片的具体操作,也要理解操作系统的软件结构。
2.1.2 是否通用
有些单片机厂家也给客户提供了大量的驱动程序,比如USB HOST驱动程序,这可以让客户很容易就可以在它的上面编写程序读写U盘。但是客户写的这些程序,只能在这种芯片、这个驱动程序上使用;更换另一种芯片后,即使芯片公司也提供了驱动程序,但是接口绝对不一样,客户又得重新编写应用程序。

基于操作系统的驱动程序要遵循统一的接口,比如对于不同的芯片的USB HOST驱动,它们都要向上提供一个相同的数据结构,在里面实现了各自的USB操作。
2.2. 应用程序开发的区别
2.2.1 对于不带操作系统的应用编程,应用程序和驱动程序之间的间隔并不明显。

举个例子,要在LCD上显示字母“a”,在单片机上的做法是:
1

事先在Flash上保存“a”的点阵数据,假设它的象素大小是8x8,那么这个点阵大小就是8x8=64 bits,即8字节
2

应用程序读取这64bit数据,逐个象素地在LCD上描点

相对的,基于操作系统的应用编程,就不需要懂得硬件知识,执行一个简单的“echo a > /dev/tty1”就可以在LCD上显示“a”了。
2.2.2 不带操作系统的应用程序,可借用的软件资源很少;
带操作系统的应用程序,网上各种开源的软件很多。

比如要做一个播放器,在不带操作系统上实现会非常困难;如果是在Linux下,有现成的。
2.2.3 不带操作系统的应用程序,各个任务是串行执行的;
带操作系统的应用程序,各个任务是并行执行的。
2.2.4 不带操作系统的应用程序,一旦发生程序错误,整个系统将崩溃
带操作系统的应用程序,即使发生了程序错误,操作系统本身并不会崩溃
点击菜单→电子大讲堂
可阅读更多内容。
↓↓↓


我要推荐
转发到

友情链接