本帖最后由 vsfopen 于 2020-1-15 14:51 编辑
这里要说明一点,使用visual studio并不是做交叉编译,而是直接编译windows的原生代码。而这些代码,可以只做简单的改动,就可以放到MCU的IDE中去编译运行。
其实,相信大部分人可能都不会理解这种开发方式,直接使用各种IDE配合调试器和硬件来开发,难道不香吗?
这里,我们也做过一定时间的摸索,在PC上开发确实有一些好处,但是不可能也不应该替代传统的MCU开发调试方式。
这里先列举几个好处:
1. 没有hardfault,Visual Studio里调试的时候,程序会直接停在出问题的地方。
2. 只需要电脑和电脑的外设,不依赖具体MCU硬件。Visual Studio的开发调试环境也是非常方便。
3. 一些问题测试的时候,可以非常方面的模拟出出错的环境,而不需要在硬件里,反复测试来触发错误。
4. 功能POC非常方便,外包非常方便,提供给客户做功能性测试非常方便。在验证功能的时候,都不用知道以后量产用什么芯片。
当然,也有不少缺点:
1. 只能开发一部分应用,毕竟需要电脑支持的硬件,才可以在PC上直接使用
2. 不能开发有实时性要求的应用
经过我们的一些项目验证,有一些应用,非常适合使用这种方式开发。比如:
1. UI:我们使用SDL做了一个disp_drv显示驱动,上面可以跑各种UI
2. USB主机(以及所以可以依赖USB外设实现的功能):我们可以通过libusb或者winusb,实现hcd驱动,配合自己的USB主机协议栈,可以开发各种USB主机的应用。
3. 文件系统:我们实现了一个windowsfs的文件系统驱动,可以把windows里的一个目录,mount到系统里使用。
4. 蓝牙、TCPIP:这些其实可以通过USB外设扩展,比如支持一个USB蓝牙dongle,或者ecm的网卡
5. 各种脚本系统,linux子系统等等:这里其实也大部分都是依赖软件
代码位置:https://github.com/vsfteam/vsf/tree/master/source/example/project/vc/vsf_template.sln
这里,我们在PC端模拟了一个单核心MCU,具备64个硬件优先级,32个SWI软件中断。
通过winusb/libusb模拟了一个USB的主机控制器。通过SDL实现了一个屏幕硬件。由于这些模拟的硬件,驱动接口都是平台里标准的接口,所以,基于之上的应用层代码,都是一样的。放到MCU里的化,一般也只是替换这些驱动和参数。
一般的应用,都是通过USB主机来实现对USB外设硬件的控制。在实际硬件里,需要提供对应的驱动,比如:PC上,开发蓝牙使用HCI_H2的驱动,但是实际硬件里,使用串口蓝牙,就需要换成HCI_H4或者HCD_H5的驱动,但是应用的代码不需要修改,因为蓝牙协议栈是一样的,封装了底层硬件的区别。
先秀一下最近做的demo:
vsf_template.zip
(1.37 MB, 下载次数: 10)
2020-1-15 14:49 上传
点击文件名下载附件
这个是在PC上模拟的MCU里运行一个linux子系统(我们自己做的简化版本),有几个demo,比如libusb、lvgl、awtk等等。
工程在这里:
https://github.com/vsfteam/vsf/tree/master/source/example/template/project/vc
是的,其实文件系统也是一种算法,甚至可以模拟文件系统出错,而不用硬件去测试出错的情况
开发板现在很便宜了吧,不过如果要玩UI啥的,带一些大屏幕的,估计也要几百吧
x86上,做一个MCU行为的模拟器,模拟一个单核心MCU,64个中断优先级,32个SWI。带一些外设,比如USB主机口,屏幕等等。这里只是模拟行为,不是模拟指令集。刚刚上传了一个demo,在win10下可以直接跑。
一周热门 更多>