[程序源码]

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

[复制链接]
1674|13
手机看帖
扫描二维码
随时随地手机跟帖
vsfopen|  楼主 | 2020-1-3 20:00 | 显示全部楼层 |阅读模式
本帖最后由 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)

使用特权

评论回复

相关帖子

vsfopen|  楼主 | 2020-1-3 20:01 | 显示全部楼层
占位,USB主机协议栈demo

使用特权

评论回复
vsfopen|  楼主 | 2020-1-3 20:01 | 显示全部楼层
占位,蓝牙demo

使用特权

评论回复
vsfopen|  楼主 | 2020-1-3 20:02 | 显示全部楼层
占位,UI demo

使用特权

评论回复
airwill| | 2020-1-6 22:30 | 显示全部楼层
我觉得调试仿真才是个问题,  只是编辑环境, 那么通常 IDE 都比较强的

使用特权

评论回复
vsfopen|  楼主 | 2020-1-8 09:03 | 显示全部楼层
airwill 发表于 2020-1-6 22:30
我觉得调试仿真才是个问题,  只是编辑环境, 那么通常 IDE 都比较强的

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

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

使用特权

评论回复
hexenzhou| | 2020-1-8 20:54 | 显示全部楼层
还有一种应用非常适合这种开发方式,那就是算法,各种信号处理的算法也非常适合这种开发方式。

使用特权

评论回复
vsfopen|  楼主 | 2020-1-8 23:11 | 显示全部楼层
hexenzhou 发表于 2020-1-8 20:54
还有一种应用非常适合这种开发方式,那就是算法,各种信号处理的算法也非常适合这种开发方式。 ...

是的,其实文件系统也是一种算法,甚至可以模拟文件系统出错,而不用硬件去测试出错的情况

使用特权

评论回复
yklstudent| | 2020-1-8 23:41 | 显示全部楼层
学生的福音,都不用买开发板了呵呵

使用特权

评论回复
vsfopen|  楼主 | 2020-1-9 11:40 | 显示全部楼层
yklstudent 发表于 2020-1-8 23:41
学生的福音,都不用买开发板了呵呵

开发板现在很便宜了吧,不过如果要玩UI啥的,带一些大屏幕的,估计也要几百吧

使用特权

评论回复
单模先声| | 2020-1-15 10:46 | 显示全部楼层
说白了就是像楼主这种装逼的人才喜欢用,以为是高大上,实则在别人眼里就是一傻帽。

使用特权

评论回复
雪山飞狐D| | 2020-1-15 12:27 | 显示全部楼层
    你的意思是做个MCU X86模拟器?

使用特权

评论回复
vsfopen|  楼主 | 2020-1-15 14:48 | 显示全部楼层
本帖最后由 vsfopen 于 2020-1-15 14:52 编辑
雪山飞狐D 发表于 2020-1-15 12:27
你的意思是做个MCU X86模拟器?

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

使用特权

评论回复
vsfopen|  楼主 | 2020-2-10 14:49 | 显示全部楼层
airwill 发表于 2020-1-6 22:30
我觉得调试仿真才是个问题,  只是编辑环境, 那么通常 IDE 都比较强的

突然体会到,确实调试仿真是问题,因为需要依赖硬件。目前硬件都在公司里,不能去拿。
而用VC开发的一个好处,就是不需要依赖这些硬件,也可以建立调试仿真的环境。

而且由于都是基于同样的平台,等上班后,也只需要把各种驱动换成MCU的驱动就行了,应用层都已经调试好了,在MCU里可以直接跑测试流程。

使用特权

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

本版积分规则

89

主题

324

帖子

8

粉丝