打印

MCU软件的另一个种开发方式 -- 兼容linux的开发方式

[复制链接]
507|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vsfopen|  楼主 | 2022-6-28 15:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 vsfopen 于 2022-6-28 15:32 编辑

@21小跑堂

随着MCU的资源越来越丰富,性能越来越高,我们在一些满足要求的MCU上(wifi soc等等),验证了一下使用linux的方式做应用开发的开发方式。这里做一些简单的介绍,也相当于推广吧。当然,这种做法也只是限于一些特性的复杂应用。
现在的linux主干虽然已经合并入了ucLinux,在一些不具体MMU的芯片上,仍旧可以运行。但是,实际资源占用和启动速度,也只有极少数的几个高端型号可以支持。我这里说的是另一种方式,基于RTOS来实现linux子系统,使得可以用linux的方式开发应用,甚至直接用一些linux的代码。

目前我们在一些芯片上已经做过测试,当然,也确实不是太低端的MCU。比如新塘的M484、stm的一些芯片、ESP32,AIC8800M等等。不过ESP32由于没有官方支持,git里提issue回复基本要等半年的时间,所以后面没维护了,wifi soc用AIC8800M替代了。大概的资源使用如下:
1. RTOS内核,这个一般是几K代码空间的占用
2. C库,支持linux的开发方式话,需要的相对完整的C库。比如IAR下需要使用Full的全功能library。全功能C库占用可能会稍大,可能会有十几K到几十K的代码空间占用
3. 支持vfs的文件系统,如果算上FAT驱动的话,大概10K多代码空间占用
4. posix API以及linux的各种非POSIX API,以及一些设备驱动的对接,这个根据配置,可大可小,典型应用在30KB以上,如果需要额外的对接,比如socket、/dev/tty等等,也会增加空间占用。
5. 一些库,比如libusb、libsdl2等等
6. linux的应用代码的占用,这个就看具体应用了。

ram使用的话,最小只有1个linux任务,基本上有个16K 20K也可以跑了。大部分ram使用还是应用层的,所以具体还是看应用。一般建议是使用32K,64K以上的ram,甚至如果跑一些大型应用的话(比如一些SDL游戏),需要外扩SDRAM。
目前在CortexM4上的典型应用,总体代码空间占用在高优化下,大概在70KB左右。如果要支持socket的话,会增加3.2K左右的对接部分代码,以及lwip协议栈的代码。如果算上一些应用,可能普通128K或者256K的MCU就可以使用这套开发方式了。目前实际项目,使用AIC8800M wifi soc的话,带wifi和蓝牙功能,大概是500多K代码空间占用,其中wifi/bt的库占用应该是300多K。对于现在wifi soc常见的1M - 2M的flash空间来说,是完全足够用这种方式的。

后来使用AIC8800M,是因为之前esp32s2的问题没有技术支持移植wuf,我们找的另一家wifi soc,简单资源介绍如下:
1. 双频(2.4G/5G)Wifi6 + 双模(EDR/BLE)BT5
2. CortexM4F 240M 992K字节 sram 2M字节 flash,并且有型号内置4M字节psram
3. 480M主频 DSP
4. 1路 60MHz SPI,1路 I2C主,3路 UART,1路 USB OTG内置高速PHY,1路SDIO 主/从,I2S音频(AIC8800A内置codec),ADC,PWM。。。。
5. 5x5 QFN


如果有兴趣试一下的话,仓库在这里:
https://github.com/vsf-linux/vsf.linux
https://gitee.com/vsf-linux/vsf.linux
仅仅尝试一下的话,不需要MCU硬件,有windows/linux的PC就行。可以直接在PC上运行这套系统。
操作步骤如下(windows系统举例):
1. clone上述仓库,并且clone所有子仓库。clone vsf子仓库下的PLOOC、freetype、libpng、lua、zlib、SDL_image、SDL_mixer、SDL_net、SDL_ttf子仓库
当然,想省麻烦的童鞋,直接clone all-in-one仓库:https://github.com/vsf-linux/vsf.linux-all-in-one
all-in-one仓库虽然也有gitee仓库,但是gitee个人仓库不支持LFS,所以没法使用。
2. Visual Studio 2022:使用C++的桌面开发、通用Windows平台开发、适用于v143生成工具的C++ Clang、适用于Windows的C++ Clang编译器
3. 工程
https://github.com/vsf-linux/vsf.linux/tree/main/project/vc
https://github.com/vsf-linux/vsf.linux/tree/main/project/vc_sdl2
https://github.com/vsf-linux/vsf.linux/tree/main/project/vc_quickjs
等等,可以直接编译运行,不过一些UI相关的应用需要复制资源文件。
另外,project目录下也有iar工程,有cmake工程,有一些是MCU的工程。

下面列举一些应用实例:
1. esp32s2上跑libusb,注意esp32s2的支持已经不维护,同样demo可以在另一个wifi soc AIC8800M上运行。

上图是用libusb反问博通的BCM20702芯片的蓝牙dongle
当然,也可以直接用蓝牙HCI H2的驱动来控制蓝牙dongle


2. AIC8800M里,使用libcurl
libcurl是一个常用的linux网络相关的库,集成了很多协议的支持,也有不少现成的应用代码,是基于libcurl的。

这里直接使用curl来打印HTTP应答头。
还可以用curl来访问聊天机器人


3. sdl跑游戏,这个一般在windows上跑了,大部分MCU资源不够这么玩,当然,也有一些可以外扩SDRAM的MCU可以跑
由于我们移植了的libsdl2,可以对接音频和视频,不过没有对接render加速(这个估计需要根据芯片硬件的加速来定制)。
dungeon_rush

sdlpal,仙剑


4. 一些linux的应用软件
一般应用软件为了移植时候开发调试方便,一开始都是使用基于windows的,使用visual studio来开发和调试
运行git:

运行xfel和openocd:


5. quickjs + MEUI -- 使用react或者preact开发UI应用


有一些应用,我们后面也会放到MCU环境里也跑一下。
如果有AIC8800M的开发板的话,可以参考这里的使用向导:https://bbs.21ic.com/icview-3231822-1-1.html

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

325

帖子

8

粉丝