前情提要:STM32代码自动生成工具_本想...但是...可是...所以
首先说一下那几天大家的反应,有的持观望态度,毕竟STM32CUBE很香;有的很激动,期待我快点出东西;还有的很淡定,知道我在挖坑,填坑遥遥无绝期;还有的,希望我把当前这个工具分享出来………..
兄弟,作者都已经说了不要分享,你这样合适吗?
退一步,我是怎么得来这个工具的?网上搜的,你要是真想要……..
还要感谢一位网友,他分享给我一个C#的反编译工具,直接把那个软件反编译成了源码。
这种反编译出来的源码和作者手写的,在实现方法上应该不一样。打个比方,源码里我用for循环输出10个字符串,反编译出来的代码,估计就是老老实实输出10个字符串。
然后聊聊我手上现有的几款代码自动生成工具(是的,我不止有一个),当然,CUBE就不聊了,咱目前没这能力。
我最开始接触到代码自动生成,是网上的一些小工具,有51的,有AVR的。但51的我只在入门阶段使用,AVR的我已经很久不用了,所以印象一般。
第一次印象比较深的时候,是使用PIC单片机(就是收购ATMEL的那个土豪),他们家的编译器有一个小插件叫:MCC,输入一些配置,就能自动生成大部分初始化所需的代码。很好用,当时在工作中帮我省了很多时间。
再后来,接触ST系列,有8有32。8分为几个系列,有S(增强型)系列,有L(低功耗型)系列,有A(汽车级)系列,如果有遗漏欢迎补充。
我用S和L多一些,但每次配寄存器都是一个漫长的工程,拿着手册翻阿翻。忽然有一天,我想,有没有省力一些的方法,然后开始有目的的上网。找到了两个,一个已经分享过了,我放两个图:
他针对的是S系列,当时提过,这是一个大三的学生写的工具。功能上虽然有小bug,但已经能替代大部分手工了(想想我大三的时候在干嘛)。
如果有懂软件的,应该能想想到这个工作量有多大。把每个函数翻译成中文还好,麻烦的地方在于,要给每个函数设计一个右边用来配置的界面,注意,是每一个!即便可以针对功能类似的函数进行分类,使用同一个页面,但是每个参数的功能描述就足够把人累傻。
这是个力气活!
然后是另一个,作者的意思是这软件只针对8的L系列,如下:
它在使用前需要导入完整的库文件。导入后如下:
相比第一个软件,它使用了一种很巧妙的方式。注意看这两个图参数的摆放位置,懂的人,从它提示要导入库文件应该就懂了。
是的,它把库文件做了一下整理,判断出哪部分是函数名,哪部分是参数。函数直接在上面显示,然后把参数按顺序添加到combox里。
我推测,ADC1那个参数下面应该还有一列combox,只是属性设置了不可见。当有参数添加到combox里时,属性设置为可见。
我试着导入S系列和32的库,出现部分报错的情况~~~
第三个就是那天你们见到的那个。说实话,这三个风格差不多,实现方式也都差不太多。个人推测第一种和第三种费力一些,第二种省事一些。
另外就是STM8的库和32的库,在功能实现上,有一些设计上的差别。例如8,初始化GPIO,一行代码就够了:
GPIO_Init(GPIOA, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);
但是32,需要先定义一个GPIO的结构体,对结构体的参数做配置,然后再通过初始化函数导入结构体里配置的值:
GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//最高输出速率10MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化外设GPIOx寄存器
这就导致,不能用第二个工具的方法直接整理库函数,还要多做一些工作。否则,我直接给你生成一行:
GPIO_Init(GPIOA, &GPIO_InitStructure);
你会一脸懵逼,然后来骂我~~~
然后说我的思路,懂我的人都知道,我懒……..
还是想以第二个工具的思路为主,但是针对GPIO初始化、TIMER初始化等功能还是要做一些功能上的增加,否则这个工具就没什么意义了。
所以工作分两部分,一部分是对标准外设库进行整理;另一部分是添加初始化相关的代码进行配合。
第一部分应该比较省事,第二部分就是个力气活了~~~
最后是进度………….
没事了,散了吧~~~
不对,还有个事,谁帮我想个霸气的名字?