如果说,智能消费品即将进入全民编程时代的话,那么传统嵌入式系统即将进入全员编程时代。全民编程要解决的是接近自然语言的编程语言的话,那么全员编程需要解决什么呢?
首先,什么是全员编程,广泛嵌入呢?智能控制器发展初期,由于CPU性能和资源问题,一般用汇编编程,C语言编程就算是嵌入式系统了,而使用RTOS,就是非常复杂的嵌入式系统了。而今天,随着需求和CPU性能和资源的发展,原来很多用不了rtos的场合,现在可以用了;原来许多不需要rtos的场合,现在需要了,原来不需要智能的设备,现在需要了。今天用C语言编程,就像是当初的汇编编程一样,都不好意思说是嵌入式系统了。嵌入式系统的应用场景大大增加,无处不在,这就是广泛嵌入;原来只需要懂硬件的工程师,现在需要编rtos驱动了,原来只需要懂裸机编程的工程师,例如化工、冶金等工程师,现在要在系统下编程了,几乎全体研发人员,都需要懂得嵌入式系统,在嵌入式系统下编程,这就是全员编程。
在全员编程时代,嵌入式程序员需求大大增加,他们来自哪里呢?一是传统的PC、Android、iOS软件工程师,二是冶金、化工、医疗等行业工程师。前者虽然是专业的程序员,但无论是Windows、还是Android和iOS,都有完善的开发工具支撑,Windows程序员只需要从main甚至更高级的起点(例如JavaScript)开始编程,完全无须掌握底层知识;而后者呢,软件经验可能很匮乏,虽然可能有c编程经验,但对操作系统的底层机制知之不多。
面对全员编程,面对众多半路出家的嵌入式程序员,而RTOS,既是嵌入式系统的开发平台,又是运行平台,应该从这两方面做好支持。
作为开发平台,自然离不开开发工具,开发工具包括IDE、API、编译工具等。首先看看IDE,强大的IDE能降低hello world的门槛,但却不是核心,为啥呢,想想KeilMDK吧,它捆绑了rtx操作系统,作为发展了多年的、成熟的操作系统,却几乎没有人用,大多数KeilMDK的用户,甚至都不知道RTX的存在。
编译工具呢?虽然很重要,但c是标准化的语言,也注定了各种编译器之间不会有太大的区别,少量的语法扩展,不会有致命的影响,编译效率高一些或低一些,许多用户不太容易感觉到。编译器的影响,主要来自于一些开源软件,如果开源软件使用了某一个编译器的特殊扩展,移植到别的编译器,虽然不是很难,但你移植后,该开源软件发布了新版本,增加了新特性,或者修正了bug,跟踪新版本的成本,会非常高。所幸的是,大多数开源软件,都会考虑编译器之间的差异,但也有一些开源软件,是针对某一个编译器写的,由于gnu组织的显赫地位,支持gcc的开源软件最多,而且,gcc还能跨CPU平台移植(iar的编译器也可以,只是gcc支持的cpu多一些),因此,建议嵌入式项目使用gcc作为开发工具。
API,代表着系统的设计理念,直接描述了系统能够提供的服务,是系统的DNA,是系统的灵魂,直接决定了用户能否在这个系统上构建出强壮的产品,决定了系统使用的门槛。你需要的API能否找到,API的功能设计是否合理,对嵌入式程序员的影响,远远比能否快速编写出“hello world”程序来的严重。有灵魂的系统,能够发展自己的特色,逐步构建自己独有的生态链,让用户欲罢不能;而没有灵魂的操作系统,只能追求大而全,集成或开发一堆功能,很容易做出“功能很多,问题很多,跑起来易,用起来难。”的操作系统,最终归于沉寂。
首先,什么是全员编程,广泛嵌入呢?智能控制器发展初期,由于CPU性能和资源问题,一般用汇编编程,C语言编程就算是嵌入式系统了,而使用RTOS,就是非常复杂的嵌入式系统了。而今天,随着需求和CPU性能和资源的发展,原来很多用不了rtos的场合,现在可以用了;原来许多不需要rtos的场合,现在需要了,原来不需要智能的设备,现在需要了。今天用C语言编程,就像是当初的汇编编程一样,都不好意思说是嵌入式系统了。嵌入式系统的应用场景大大增加,无处不在,这就是广泛嵌入;原来只需要懂硬件的工程师,现在需要编rtos驱动了,原来只需要懂裸机编程的工程师,例如化工、冶金等工程师,现在要在系统下编程了,几乎全体研发人员,都需要懂得嵌入式系统,在嵌入式系统下编程,这就是全员编程。
在全员编程时代,嵌入式程序员需求大大增加,他们来自哪里呢?一是传统的PC、Android、iOS软件工程师,二是冶金、化工、医疗等行业工程师。前者虽然是专业的程序员,但无论是Windows、还是Android和iOS,都有完善的开发工具支撑,Windows程序员只需要从main甚至更高级的起点(例如JavaScript)开始编程,完全无须掌握底层知识;而后者呢,软件经验可能很匮乏,虽然可能有c编程经验,但对操作系统的底层机制知之不多。
面对全员编程,面对众多半路出家的嵌入式程序员,而RTOS,既是嵌入式系统的开发平台,又是运行平台,应该从这两方面做好支持。
作为开发平台,自然离不开开发工具,开发工具包括IDE、API、编译工具等。首先看看IDE,强大的IDE能降低hello world的门槛,但却不是核心,为啥呢,想想KeilMDK吧,它捆绑了rtx操作系统,作为发展了多年的、成熟的操作系统,却几乎没有人用,大多数KeilMDK的用户,甚至都不知道RTX的存在。
编译工具呢?虽然很重要,但c是标准化的语言,也注定了各种编译器之间不会有太大的区别,少量的语法扩展,不会有致命的影响,编译效率高一些或低一些,许多用户不太容易感觉到。编译器的影响,主要来自于一些开源软件,如果开源软件使用了某一个编译器的特殊扩展,移植到别的编译器,虽然不是很难,但你移植后,该开源软件发布了新版本,增加了新特性,或者修正了bug,跟踪新版本的成本,会非常高。所幸的是,大多数开源软件,都会考虑编译器之间的差异,但也有一些开源软件,是针对某一个编译器写的,由于gnu组织的显赫地位,支持gcc的开源软件最多,而且,gcc还能跨CPU平台移植(iar的编译器也可以,只是gcc支持的cpu多一些),因此,建议嵌入式项目使用gcc作为开发工具。
API,代表着系统的设计理念,直接描述了系统能够提供的服务,是系统的DNA,是系统的灵魂,直接决定了用户能否在这个系统上构建出强壮的产品,决定了系统使用的门槛。你需要的API能否找到,API的功能设计是否合理,对嵌入式程序员的影响,远远比能否快速编写出“hello world”程序来的严重。有灵魂的系统,能够发展自己的特色,逐步构建自己独有的生态链,让用户欲罢不能;而没有灵魂的操作系统,只能追求大而全,集成或开发一堆功能,很容易做出“功能很多,问题很多,跑起来易,用起来难。”的操作系统,最终归于沉寂。
有点累了,下回继续。
本文转载自 www。djyos。com/bbs