使用VisualStudio开发MCU的应用层代码

2020-03-07 17:52发布

本帖最后由 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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
vsfopen
2020-03-08 09:05
airwill 发表于 2020-1-6 22:30
我觉得调试仿真才是个问题,  只是编辑环境, 那么通常 IDE 都比较强的

能够和VS比的IDE还是不多的,不过这里其实和IDE没啥关系。
我们之前外包一些蓝牙,UI,不想让别人知道我们的硬件,但是又需要基于我们平台来开发,所以就用这个了。
后来我们自己的一些开发人员,即使有硬件,也都先用这个开发功能,然后再移植到硬件里。
因为这里可以模拟控制各种输入,查错比硬件里调试方便很多。

不过,估计对于MCU的开发人员来说,确实不习惯这种开发方式,所以我也就没再更新了

一周热门 更多>