导读:为何采用JAVA开发MCU应用?
传统的MCU是按照单任务系统来设计的,随着MCU功能越来越强大,现在也有许多针对MCU开发嵌入式系统。然而,很多开源的嵌入式系统并没有做到很好的内核封装,这就意味着如果要开发一款成熟的应用,开发者得到从底层汇编开始做起,然后是底层驱动、内核移植、协议栈定制……一直做到应用程序开发,不论哪个环节出了问题或者没有衔接好,都可能导致开发陷入僵局。 能不能像在Windows/Linux下开发应用程序一样开发应用。也就是说,拿到手上的单片机上已经整合好了系统,它给你提供了一整套可用的内核API,开发者只需要熟悉API的使用规范就能上手开发应用了。出于这个目的,作者设计一款圆景系统,已经将API封装好了,提供了应用开发的模板。但是在推广使用的时候,却遇到了一个重大的瓶颈:MCU没有MMU! 对的,所有的的MCU均不带MMU,否则就不叫MCU了。正是因为这个原因,导致在开发C/C++应用的时候,必须要手动指定程序入口和堆栈空间。这类操作风险很大,任何一步有问题都会导致系统崩溃,而且崩溃原因很难查找。当然,这也有例外:uCLinux是通过reloc段修正的方法来实现不需要指定上述参数,但是该方法存在一个缺陷:该操作涉及到大量的段拷贝的操作,该操作期间长期关闭中断,系统的实时性难以得到保障。 为了突破上述瓶颈,2014年作者曾尝试将Lua移植到圆景中,然而相对当时的MCU资源来说,Lua的消耗量还是挺可观的,后来曾经按照uBasic改良出来了一种LuBaC脚本语言,但脚本的执行速度远不尽如人意,最终不得不放弃。 LuBaC项目虽然最终失败了,但是它提供了一个很好的模型:一个虚拟机装载脚本执行,执行完毕以后将占用的所有资源全部释放掉;而且它还能同时装载多个应用同时执行,彼此之间互不干扰。于是,作者尝试将一款Java虚拟机按照LuBaC的模式,移植到圆景中去运行,在开发进度、执行速度、资源消耗等方面都得到了很好的均衡。 因此,使用Java开发MCU应用,最重要的是突破了MCU没有MMU的瓶颈;其次,才是Java高效率的进度开发。
|