对一般电子应用嗜好的Maker而言,可能已很熟悉Arduino、Raspberry Pi,只要依据一些教学示范撰写几行程序,操作IDE当中的几个选单步骤,就可以看到灯亮、声响、东西动,很有成就感。
不过,对于专业的电子控制产品开发来说,可就没有这么简单了。以Intel Quark D2000为例,就是针对专业开发者提供,因此若使用者过往只接触过Arduino、Raspberry Pi的话,在学习摸索上有很高的难度,很有可能搞不清楚什么是什么,甚至可说是从零重新开始。
因此,本文尝试先解释与Quark D2000程序开发相关的四个名词,大家对这几个词有些了解后,再来接触摸索Quark D2000,应该能更快进入状况。
1. BSP
Intel Quark D2000是一颗微控制器(MicrocontrollerUnit, MCU)芯片,但只有芯片其实不好试制其应用电路、控制电路,所以会以芯片为基础、为核心设计出一片开发者板(Developer Board,注1),开发者对开发者板进行接线,就可以快速、容易地试行与验证控制电路。
但是只有开发板是不够的,开发板能开机,其实是要有启动加载程序(Boot Loader)的。而除了主控芯片(这里是指Quark D2000)外,板子尚也可能放有其他与主控芯片连接的芯片,或相关的硬件电路设计等,这些主控芯片外的芯片与电路,若想要能驱动与操控,还需要配套的驱动程序(Driver)。另还有一些操控板子所需的工具程序(Utility)等。
与开发板相关的各种软件(也包含韧体,已烧在板子上的芯片内),就统称为Board Support Package(BSP),其实就是指一整挂与这片开发板相关的韧软件。
若根据维基百科,BSP这个词起源自1981年,但时至今日已是电子产业专业开发领域的常用词,当一个专业的开发设计人员拿到一片新的系统开发板时,通常会顺便问:这片板子的BSP(附带相关软件)呢?
值得一提的是,BSP软件通常是开发板厂商(有时就是芯片商本身,有时则是芯片商的协力业者)自己开发完成后随板子一同附上的;专业的BSP软件通常是封闭源代码的,因为撰写得相当好,可以完全发挥硬件功效,具有商业竞争力。
然而随着Maker风气兴起,有些芯片商也开始推出开放源代码的BSP,Quark D2000所附的即是(注2),但是,为了保有商业竞争力,芯片商所开放源代码的BSP,只是让硬件能正常动作,通常不会达优化(优化)运作的水平。
2. ISSM/IDE
已经使用过Arduino的人,可能知道开发Arduino控制应用程序(也称为Sketch)的软件叫做Arduino IDE,而IDE指的是整合开发环境。IDE跟前述的BSP一样,是专业开发领域常见的广泛通词。
如果说,开发Arduino用的控制程序,其软件开发工具、开发环境称为Arduino IDE,那么,用来开发Intel Quark D2000、Quark SE C1000用的控制程序,其软件开发工具、开发环境则为ISSM,即Intel System Studio for Microcontroller。
老实说,ISSM并不是Intel从无到有100%自己开发的,而是以开放源代码项目「Eclipse」(日蚀)为基础所修改、衍生开发成;过往有专业程序学习、撰写经验者,通常已接触过Eclipse,特别是Java程序语言学习时。Quark D2000/SE C1000的控制程序撰写需使用ISSM开发环境,而使用的程序语言则为C/C++。
Intel ISSM软件画面,画面左编可看到开发人员自己撰写的程序代码,右边则是程序代码反组译后所得的组合/机器语言码,右下为程序执行后的缓存器数值/状态。
IDE通常是开发时的主工具,透过这个工具来开发程序,但实际上业者通常在此工具之外,也随附其他与开发相关的软件,如此整个含括来说,会统称为工具链(Toolchain)或软件开发工具包(Software Development Kit, SDK)。用Toolchain来统称时,通常是这些随附的东西比较松散、尚待完整或更紧密的整合;反之则称SDK。
3. QMSI/HAL
BSP、IDE是专业领域的通用词,ISSM则是Intel专属的词,再来这个词也是Intel专属的,即QMSI(QuarkMicrocontroller Software Interface)。QMSI其实是个硬件抽象层(HardwareAbstraction Layer, HAL)。
所谓抽象,其实有简化的意思,这里简单譬喻一下为何要简化。假设有一间餐厅,餐厅内有20个客桌、5个服务生、1个店经理,这个经理把每4个客桌设定给1个服务生,例如桌1~桌4是由服务生A负责,桌5~桌8是服务生B的责任区,依此类推。
一旦桌5有客人抱怨,店经理就呼喊服务生B前来服务;一旦桌3有客人弄翻东西,店经理就呼喊服务生A前来服务。而服务生A/B/C/D/E这5个人,其实随着人员加入、离职、调班、临时工读等,可能由不同人担任,店经理可能也无法详记每个人名,只要懂得桌X有状况,对应呼叫A~E即可,A~E即是个简称。
程序撰写也是如此,要程序设计师详记每个硬件的对应地址,实在太多、太杂、太痛苦,倘若新的芯片修改了硬件地址,程序设计师就需重头检视过往所撰写过的,并再逐一对应修改。
为了避免这种麻烦,Intel为芯片内的各种硬件功能,逐一给予简称,程序设计师只要引用这套简称来撰写,也可以适用于未来的新芯片,不再需要逐一检视修改,而这一套简称即是HAL,Intel为Quark D2000/SE C1000设计的HAL就称为QMSI。HAL也是专业领域的通用词,而QMSI是Intel的专有词。
QMSI所涵盖的硬件,有些只有SE C1000才有,而D2000所没有的,例如Mailbox、ARC support等;其他多数是D2000与SE C1000所共通的。
4. Zephyr/RTOS
大家都知道PC最常用的操作系统是Windows,Windows是一套数据处理取向的操作系统,运用微处理器(Microprocessor Unit, MPU)芯片来执行,数据处理即是指跑Word字处理、Photoshop图像处理等应用程序。
但对微控制器芯片而言,其硬件资源、硬件效能不若微处理器芯片;且应用取向不同,并非数据处理,而是控制,控制灯号亮灭、控制马达转动等,而不是跑Word、Photoshop。
控制取向的操作系统,有别于数据处理的操作系统,一是要求轻巧,须在很少的硬件资源、硬件效能下也能运作;另一是要求实时反应,必须在限定的毫秒时间内完成灯号点亮,或闸门放行等,不得有延误,否则后果严重,可能会发生事故,例如交通号志控制、工厂产线控制。
相对的,数据处理取向的操作系统,追求同时间能执行很多东西,追求硬件资源与效能的最大化压榨,执行慢一点不要紧,所以大家有时会看到Word执行缓慢、Excel也执行缓慢的情况。
所以,微控制器用的是轻巧的嵌入式(Embedded)操作系统,若还要兼顾控制反应,则要使用实时操作系统(Real-Time Operating System, RTOS)。
对于Maker而言,可能已经接触过ESP8266,ESP8266的操作系统即是开放源代码的FreeRTOS,本质上就是一套实时操作系统。
而Quark D2000/SE C1000也有其对应的实时操作系统,称为Wind River Rocket,其实是2009年Intel购并Wind River(风河)公司,成为下辖部门,而2015年Wind River针对嵌入式应用、物联网应用发展出一套实时操作系统,称为Rocket。
2016年Rocket转交给Linux基金会接手发展,并改名为Zephyr开放项目。不仅IntelQuark D2000/SE C1000支持与使用Zephyr(或称Zephyr OS),NXP(恩智浦)公司、Synopsys(新思科技)也支持与使用Zephyr。
所以,ESP8266芯片的实时操作系统是FreeRTOS(也是一个开放项目),Quark D2000/SE C1000的实时操作系统是Zephyr。RTOS这个词是专业领域的通用词,FreeRTOS、Zephyr则是专有词。