英创Linux主板上运行Python, C#应用程序

 2020-9-24 14:40:20     作者:Emtronix    

  英创公司的工控主板支持Linux和Windows CE两种软件平台。随着Linux系统的不断发展完善,它已成为嵌入式系统开发的主流平台。传统的嵌入式Linux平台的应用程序均采用C/C++语言来开发,包括Qt本质上都是C/C++的。C/C++属于较为底层的语言,相对说来入门门槛较高,因此能熟练掌握C/C++编程技术的工程师也就变成了“稀缺资源”。而在实际应用中,一旦产品目标确定,都需要尽快完成开发,以最短的时间把产品投入市场。这时C/C++编程的固有难度,就往往成为整个产品开发的瓶颈,延缓客户经营目标的实现。


  针对客户在产品开发中的C/C++编程问题,结合当前多种编程语言的发展情况,英创将在其主要的Linux平台主板型号ESM8000、ESM7000和ESM6800H上,配置Python和C#两种语言的运行环境,即支持客户采用标准Python或C#来开发应用程序。相对C/C++,Python和C#是更为高级、安全的编程语言,因为更接近人的自然语言,因此学习难度大大降低,或者说入门门槛很低。Python几乎成Linux系统的主流语言,在计算机应用的方方面面都有广泛的使用,在高校也大量教授,这让企业很容易获得Python工程师。而C#则在过去多年的工业PC应用中,受到广大从事工业控制的工程师的认可,包括大量使用英创WinCE主板的老客户,他们可通过C#自然过渡到Linux平台的应用程序开发来。


Python的情况


  在ESM8000、ESM7000和ESM6800系列主板上的Python运行环境,是以yocto项目的Python 3为基础,并针对主板的各个接口,包括网络、串口、GPIO、SPI、I2C等,配置了相关接口的class库,并通过了基本测试。


  客户可在Linux开发主机上安装微软的开源工具Visual Studio Code,并在VS Code中安装Python插件,就构成了基本的Python应用程序开发环境。为了提高程序编写过程的效率,针对各个接口,还需要安装以下class库:

  串口:pyserial

  GPIO、SPI、I2C:python-periphery


  在Linux开发主机上开发均可用pip命令进行安装:

  #>pip install pyserial

  #>pip install python-periphery


  安装这些插件的目的是为了编写Python代码有在线帮助以及函数联想功能,提高编程效率,但与实际应用无关。在英创的主板上已配置安装的对应Python库,将支持实际的程序运行。


  以上就构成了基本的Python应用程序开发环境。开发流程大致为:


  1、为即将开发的应用程序创建一个目录(对应一个App project),并用VS Code打开这个目录,例如:

  #>mkdir step1_file

  #>cd step1_file

  #>code .   

  2、在VS Code的下添加相应的文件(如:step1_file.py),并在代码窗口编写代码。


  代码编写完成后,即可直接在英创的板卡上运行。如:

  #root@ESM8000>python3 step1_file.py

  利用Python进行嵌入式开发,其优点是主机开发环境易于搭建,仅需要一个编辑代码的环境即可,无需搭建交叉编译的环境,客户易于上手,方便尽快完成应用程序的开发。采用Python编程的另一个重要优点是,总是可以找到成熟稳定的功能库,来满足实际应用需求,这必然大大加快应用程序的开发。


C#的情况


  这两年微软以开源模式,推出了跨平台的.NET Core环境,可以支持在Linux平台上的console类型的C#应用程序的运行。目前已发布.NET 5 rc1(release candidate 1),预计2020年底前会有.NET 5正式版发布。在ESM8000、ESM7000和ESM6800系列主板上已配置了.NET 5核心系统,以及针对各个应用接口,包括网络、串口、GPIO、SPI、I2C等,的class库,并通过了基本测试。


  客户可在Windows或Linux开发主机上安装微软的开源工具Visual Studio Code,并在VS Code中安装C#插件,就构成了基本的C#应用程序开发环境。C#应用程序基本开发流程大致为


  1、为即将开发的应用程序创建一个目录(对应一个App project),并用VS Code打开这个目录。

  2、在VS Code的Terminal窗口执行”dotnet new console”,创建一个C# Project。

  3、在VS Code的Terminal窗口执行”dotnet add package …”,来添加所需要的各种接口、计算类库,dotnet会自动从微软NuGet网站中下载这些库,并添加到本工程项目中。

  4、在VS Code的代码窗口编写应用程序代码。这是应用程序开发的主体。

  5、在VS Code的Terminal窗口执行”dotnet publish –r linux-arm …”,编译并构成针对具体目标运行环境的代码。ESM7000和ESM6800的运行架构是linux-arm,而ESM8000则为linux-arm64。


  通过网络挂载,是Linux系统最通用的调试方法。在Linux主机的NFS服务器通常都是缺省配置的,只要在目标板(ESM8000、ESM7000或EM6800H)上运行mount命令,即可完成挂载。对Windows开发主机,可运行开源的WinNFSd,来启动一个NFS服务器,就可在英创主板上挂载Windows主机,并运行上面的应用程序了。


  相比在WinCE平台上应用开发,转移到Linux平台后,客户获得的主要利益,是能充分利用Linux平台对新技术、新功能的大量成果,典型的有:

  ● 性能稳定的高速WiFi通讯,且成本低廉;

  ● 高速PCIe接口的应用,包括NVMe大容量高速存储等;

  ● 基于USB的低成本接口扩展,如Audio播放、多路网口等;


显示


  目前在ESM8000、ESM7000和ESM6800H上配置的Python和C#运行环境,还不能支持图形显示。对需要显示的应用,可利用主板上丰富的串口资源,采用串口屏方案来弥补。串口屏成本低廉,形式多样,很多都带有触摸屏功能,因此可很容易满足大部分工业控制的应用需求。对需要更好用户体验的人机交互界面(HMI)的应用,估计还是需要采用Qt/C/C++来开发应用程序。


我们能做什么?


  在客户采用Python,C#开发应用程序的过程中,我们为客户提供的服务主要在以下几个方面:

  1、协助客户配置其开发主机,对C#编程来说,可选择Windows10或Linux Ubuntu;对Python编程来说,则推荐Linux Ubuntu。代码编辑工具推荐Visual Studio Code。这是一款开源的IDE环境,可支持Python和.NET C#的程序开发。

  2、根据客户在开发过程中的一般性需求,帮助寻找合适的功能class库,并进行可用性测试,加快客户的开发进度。

  3、对具有明确市场前景的特殊需求,通常涉及接口的实时应用,可采用C/C++来开发后端(back end)类库的方式来实现,使客户应用程序可保持一致的Python或C#形式,便于程序的维护升级。

  4、为了加快客户编程入门,分别以Python和C#提供了2套功能相同的Demo程序,每套Demo由9个简单程序组成,介绍各个接口的应用,以及多线程、数据库的应用,后续会有更多的文章介绍这些Demo实例。