本帖最后由 Simon21ic 于 2016-3-11 22:12 编辑
本来想在电子展上讲我们做的一些wifi IOT应用,不过后来想想,还是不针对特定项目,说一下我之后想做的一种开发分享甚至是外包方式 -- VSF repo。
其实以前不少人问过关于VSF的推广,即使到目前为止,我也不太想推广VSF。原因很简单,按照之前的找外包和兼职的经验,7-10个人里,只有一个能够用起来的。而对于VSF repo而言,这个问题就不太关键了。当然,虽然VSF repo可以提供一些有意思的特性,但也并不能解决所有问题。
大家可以发表自己的想法。
最近准备做文档了:
https://www.gitbook.com/book/versaloon/vsf-the-definitive-guide
VSF repo是啥?
VSF repo是一个仓库,可以是应用仓库,也可以是组件仓库、协议栈仓库、工具仓库等等。其实在MCU等级的软件开发中,就我所知,很早就有人想怎么做了。比如,几年前和coocox的经理聊的时候,就知道他们在做一些代码仓库,包括各种驱动等等,当然,不知道他们现在做了怎么样了。做这种代码仓库的话,会碰到一些现实的问题,比如,如果我的代码并不想公开,但是我希望别人能够试用,如果测试OK,有意向的话,可以来找我合作,那如果代码都公开了,别人直接自己开发生产就行了。这种情况下,代码仓库就无法解决问题了。甚至一些大公司,也有类似的想法,比如ARM,mbed不就是类似的代码仓库吗?
VSF repo是一个可执行文件的仓库,用户可以下载这些可执行文件,并且安装进自己的系统。这个可执行文件并不一定是最终的应用,可能只是一个tcpip协议栈,xml解析等等的功能模块。那么问题来了,市场上MCU种类辣木多,可能提供一个可执行文件,让那些不同的MCU在不同的硬件环境下使用?答案是。。。。不能。所以:
VSF repo是一个CortexM的可执行文件仓库。至少第一步会只做CortexM的支持,当然,以后也可能针对特定内核实现对应的仓库。那么问题又来了,即使只是CortexM,市场上的芯片种类也不少了,能提供一个可执行文件,在不同的芯片和硬件上跑?答案是。。。。这个可以有。VSF已经实现了,比如一个USB转串口的应用bin文件,可以下载在任何具备USB和串口以及GPIO的CortexM处理器上运行,并且得到一致的功能。但是,各个厂家的芯片,可能针对一些特殊应用,提供了特殊的功能,这些功能是依赖芯片资源的,所以:
VSF repo是一个通用功能的CortexM的可执行文件仓库。这里的通用功能,是指我可以通过通用接口,来实现的功能。比如,通过SPI和GPIO驱动wifi芯片,这个就属于通用功能。还有一些算法,相当于是使用MCU以及RAM来实现的功能,也属于通用功能。不过,需要注意的是,有一些算法对处理器有要求,比如,会要求FPU,那就需要实际处理的支持了,比如用CortexM4F。
这个听上去,像是linux的软件仓库。但是,linux的软件运行,依赖linux系统。VSF repo上的软件运行,也应该要依赖什么吧,不然怎么实现不同的处理器,运行同样的可执行文件?确实,VSF repo,顾名思义,就是利用了我们以前设计的VSF构架中的很多特性,所以:
VSF repo是一个基于VSF操作系统的通用功能的CortexM的可执行文件仓库。这里说的操作系统,并不是指RTOS这种系统,而是类似linux的操作系统,只是运行在了一般的CortexM处理器上。所以,VSF操作系统不单单包括多任务核心、IPC等基本功能,还会包括一个操作系统所需要具备的一些额外功能,比如内存管理、命令行界面等等。在命令行界面上,用户可以键入命令,下载安装各种需要的可执行文件(库),然后安装运行自己的应用。并且可以安装多个应用,自己选择运行那些(可以多个应用同时运行)。
VSF repo这么实现有啥用?
模块化的开发,这里简单举一个栗子,应用实现了一个特殊的USB设备,这个设备需要安装驱动,但是,为了方便用户,需要在USB设备上集成一个虚拟U盘,里面放驱动和应用程序就行。那么这个虚拟U盘如何实现。
1. 需要安装USB device协议栈以及MSC设备驱动
2. MSC设备驱动,需要接到一个SCSI设备,所以,安装SCSI库
3. 用SCSI设备实现起来很麻烦,我们需要用到fakefat32,把一个memfs(在内存里的文件系统)结构,模拟成mal(块设备),那就安装fakefat32
4. 安装mal2scsi,把mal块设备,转换成scsi设备,这样就可以连接到MSC设备驱动了
整个过程,基本上不用写什么代码,也不需要实际的U盘的存储空间,只是需要按照各个库的文档,定义相应的类的实例,然后在数据结构中,连接起来就行。当然,需要自己制作一个memfs的实例,这个也很简单,只是数据,没有代码。当然,前提是,这些模块都是VSF repo里现成的。
再举个栗子,要做一个wifi的网页服务器:
1. 选型好wifi模块,下载安装对应的netif驱动
2. 安装tcpip协议栈
3. 安装httpd
4. httpd是基于文件系统接口来找网页文件的,所以,安装文件组件
5. 如果网页在一个U盘里,那么,安装USBH协议栈
6. 安装MSC主机驱动
7. 安装malfs(块设备文件系统支持)以及fat文件系统
8. 设置好各个参数,也几乎不用写什么代码,就可以运行起来了,前提是,VSF repo里有这些模块。
9. 这么多东西,资源占用会不会很大?去掉VSF操作系统,直接整合各个模块的话,优化好甚至可以在64K flash/16K RAM的芯片上跑起来,当然,需要芯片支持相应的接口,比如USB host。
上面2个虽然只是栗子,但是,VSF里确实有(或者正在开发)这些模块。
MCU开发的产品一般受成本、效率等因素的影响,不可能使用这么大一套环境来实现一个产品。所以,基于VSF repo的应用一般不直接量产。要量产的话,也是直接整合各个库,加上应用再量产。但是,又有问题了,VSF repo里提供的可执行文件,是基于VSF操作系统的,怎么直接整合呢?
用了别人提供的东西,如果别人是开源的,那就不用多说了,如果别人是不开源的,那就找别人合作咯。比如,有人做了一套电机驱动的库,这个库一般基于GPIO、ADC、PWM、中断等通用的接口,那么可以下载下来,在安装好VSF操作系统的平台上测试运行,测试基本OK,但是需要一些功能和性能的完善(定制化)的要求的话,那就直接联系作者。
为啥是基于VSF构架,VSF如何实现这些功能的?
哪那么多为什么,如果我有空参加21ic的交流会的话,到时候再说了
先上一些命令行界面的截图吧:
|