【GoKit2】3.自己建立一个带操作系统的C++工程

作者: tjcfeng
上传时间为: 2015-03-30 10:59 AM
2015-03-30
阅读:

   其实使用GoKit,着重要熟悉的地方应该是协议,而且GoKit2已经提供了一个完整的工程,如果想开发扩展功能的话可以直接在工程上修改。不过为了深入了解各个部分的开发,所以我打算重新实现模块的功能。用C的话可以直接拷贝原工程的文件就行了,但是我想用C++来实现,再加上操作系统就全了。

    这个工程和原工程不一样的地方:

    1.增加MDK自带的RTx操作系统,后面可使用线程、多任务等功能;

    2.使用MDK自带的STM32函数库,这样每次建立工程就不用再去拷贝文件这样的操作了;

    3.使用C++编程,程序结构更加良好,方便维护,顺便学习一下。

    当然你可能觉得这样没意义,我也是这样想的,只是尝试一下用其他的方法实现相同的功能而已。而且也许到后面会碰到问题进行不下去,就当经验的积累罢了。

    

    工程建立的方法和普通STM32的一样,这里再简单总结一下:

    新建工程,选择使用的STM32的型号

    

    增加需要用到的功能组件,包括操作系统、启动文件、驱动库等。这里是最基本的选择,用到其他的库时再添加,可减少编译的时间。

    

    按照自己的习惯更改名称和工程文件结构

    

    根据板子更改系统配置,比如外部晶振是8M,就改成一样的。Use MicroLib可使编译的文件更小,加快烧写速度,占用更少的Flash

    

    创建Hex文件,习惯性选上

    

    选择调试器

    

    使用的是SWD方式,所以选择这个,注意速度,不要太大了,否则不能烧写

    

    这里也改一下

    

    Flash容量找到合适的

    

    参数配置完毕,添加一个主程序文件

    

    用C++的话就是cpp文件

    

    编写最基本的头文件和入口函数

    

    再来配置一下时钟参数,这样就不用再写代码了

    

    操作系统相关的设置,STM32F103是72M的,需要改一下

    

    编译一下没有错误,已经可以烧写了。不过一个空工程烧写进去也没什么用,还是增加点东西吧。

    

    跳过LED的操作,直接来点复杂的东西,还是驱动OLED吧,方便以后调试用。

    既然打算用C++来写,那么就先定义一个OLED的类,以及里面的函数。

    类里的函数都是从原工程拷贝过来的,基本不用做改动可以直接使用,只是变变方式而已。而且我将类的定义及函数都放在了一个hpp文件里,而不需要一个cpp一个hpp,否则以后东西多了看着很乱。当然这可能不是一个好习惯,不过我喜欢,引用时只要include这个hpp文件就行了,不需要在工程中再去包含cpp文件。

    可能你会觉得C++的类使用时麻烦,先定义变量,再去New它,还要想着释放,果然很累。为了解决这些问题,这个类我使用单例的方式,不管在什么地方,只要引用了头文件,就可以当成一个全局变量来用,而且会自动释放。

    单例类包括了一个静态的成员变量Instance,用于存放实例化的类。当第一次调用时,程序中会判断是否已经New过,如果没有则New,并保存到Instance中,否则直接返回已创建的实例。当然这些函数也可以写成static方式,这样和C的就没什么区别了,而且不便于以后的继承、覆盖等操作。

    

    主程序中调用的方法。增加了操作系统的初始化代码,并且包含一个主线程,后面的程序都不要放在main函数里,而是在主线程中去执行了。

    

   为了测试,工程获取各种时钟频率并显示在OLED中。烧写后,显示出来了

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示