查看: 813|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-3-30 10:59:08 | 显示全部楼层 |阅读模式
    分享到:
    其实使用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中。烧写后,显示出来了
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 16:44 , Processed in 0.121508 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.