使用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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
vsfopen
1楼-- · 2020-03-08 12:08
hexenzhou 发表于 2020-1-8 20:54
还有一种应用非常适合这种开发方式,那就是算法,各种信号处理的算法也非常适合这种开发方式。 ...

是的,其实文件系统也是一种算法,甚至可以模拟文件系统出错,而不用硬件去测试出错的情况
yklstudent
2楼-- · 2020-03-08 15:50
学生的福音,都不用买开发板了呵呵
vsfopen
3楼-- · 2020-03-08 17:08
yklstudent 发表于 2020-1-8 23:41
学生的福音,都不用买开发板了呵呵

开发板现在很便宜了吧,不过如果要玩UI啥的,带一些大屏幕的,估计也要几百吧
单模先声
4楼-- · 2020-03-08 18:39
说白了就是像楼主这种装逼的人才喜欢用,以为是高大上,实则在别人眼里就是一傻帽。
雪山飞狐D
5楼-- · 2020-03-08 18:48
 精彩回答 2  元偷偷看……
vsfopen
6楼-- · 2020-03-08 21:08
本帖最后由 vsfopen 于 2020-1-15 14:52 编辑
雪山飞狐D 发表于 2020-1-15 12:27
你的意思是做个MCU X86模拟器?

x86上,做一个MCU行为的模拟器,模拟一个单核心MCU,64个中断优先级,32个SWI。带一些外设,比如USB主机口,屏幕等等。这里只是模拟行为,不是模拟指令集。刚刚上传了一个demo,在win10下可以直接跑。

一周热门 更多>