查看: 8708|回复: 10

[经验] 国产MCU神作-GD207小红板第二弹——trochili操作系统初体验

[复制链接]
  • TA的每日心情
    开心
    2015-12-21 11:25
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-12-30 20:00:52 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 trochili 于 2016-1-4 14:10 编辑

        由于临近毕业,论文压力山大,加上其它的杂事,一直没有连续的时间来学习一下飞鸟的trochili操作系统,这次就借着这个小红板来初体验一下。
           先交代一下,自己没有真正玩过实时操作系统,此前只是大致了下UC/OS的书,所以本篇的理解可能会比较肤浅也可能会有错误地方,希望不吝赐教。
           要玩板子,首先是搭建开发环境,以前都是用的IAR,这次为了玩系统,也必须要随大流装上keil-MDK了,不过以前51是在keil上调试的,所以倒也不算陌生。首先,安装程序,这里选了网上好下的MDK5.14版本,注意破解是必要的,否则编译时候就会报错。
           第二步,根据论坛和群里看到的只言片语,凭着程序猿的直觉,安装GD的芯片支持包,这个在小红板附带的光盘里面都有,所以还是非常容易的:
    0.png
    其中第一个直接运行即可,后两个要通过keil来添加:
    1、添加支持包.jpg
    2.png

    安完之后我们再来新建工程时,就不用担心找不到对应的单片机了:
    3.png
    为了节约时间,这里就不详述如何去一步步新建空工程、添代码了,我们直接找到飞鸟的trochili例程:
    4.png
    打开尝试编译一下,成功啦!而且也只有一个不重要的警告,可见飞鸟的操作系统不是随随便便拿来糊弄人的:
    5.png
    下载程序(GD-link驱动自动安装,WIN10系统),运行效果和板子刚拿来时一样。
    下面开始进入正题,先看工程结构:
    6.png
    最上面是ARM的标准接口库,接着是GD的固件库,接着是板级支持包,再下面就是与trochili相关的操作系统核心文件了,由此可见飞鸟这个操作系统结构也还是很清晰的,这为后面研究奠定了良好基础。但是不解的是,再往下就集成了各种例程如线程、消息队列邮箱等,编译的时候是如何控制的?当前打开的是哪个例程?带着这些问题,继续探究代码。
           首先,任意打开一个例程,随手选择了最下面的“example_board”,打开C文件,果然,程序一开头就有条件编译控制语句:
    7.png
    找到EVB_EXAMPLE的定义位置,在example.h文件里,找到了EVB_EXAMPLE的定义:
    8.png
    因此可以断定,当前工程编译的就是这个“example_board”例程了,至于上面的其它宏定义中的数字是什么含义(#defineCH9_TIMER_EXAMPLE          (91)),留作后面再探究。
           先找到main函数:
    9.png
    Main函数中就调用了一个最简单的内核启动函数,里面有四个指针,查找对应代码可以看出,第一个是用户应用程序入口函数,第二个是CPU启动入口函数,第三个是评估板启动入口函数,第四个是评估板调试跟踪函数。
           本例中,评估板启动配置了三个功能:串口1LEDKEY
    10.png
    而调试跟踪函数的作用也就是把字符串从串口一发出去。而在“AppSetupEntry”函数中,比较重要的就是对LED线程的初始化和线程的激活了,这一点非常重要,以后要定义自己的线程时,用同样的方法就可以了:
    11.png
    下面再看LED线程部分:
    12.png    
    可以看到,LED基本线程非常简单,就是让LED31s再灭1s,同时跟踪函数输出对应的“LED3ON”或“LED3OFF”,也就是我们在上电测试时从串口收到的数据。
           再看另一分部函数,即按键中断处理函数部分:
    13.png
    该函数中重要的点有对按键值的扫描以及对键值的处理,当按键索引值可以被2整除时,就启动用户定时器(定时器时长为1000ms,在定时器初始化时被设定),否则就关闭用户定时器。再看对应的用户定时器回调函数:
    14.png             
    可以看到,定时器回调函数的作用也是根据索引值能否被2整除来控制LED1LED2的亮或灭。
    为了验证对程序的理解是否正确,特地对板上的按键做了实验。果然,当按下KEY1时,板上的红灯(LED4就开始1s亮暗闪烁),再按一下,就保持在按下的状态;按KEY2时,板上的翠绿灯开始闪烁,验证了程序阅读的正确性。
    到这里,对trochili实时操作系统的初体验就算结束了。非常公正的说,飞鸟操作系统结构清晰、理解容易、工程结构和代码风格都非常不错,注释完善,基本功能也非常完备,是初学者学习实时操作系统的上选!
    附:
           作为一个“发烧友”,不把板子的性能发挥到极致,实在是心有不甘,这里偷偷把系统的主频改为120M,来做一个小测试。
           打开“system_GD32f20x.c”,将主频改为120M
    15.png
        重新编译下载,这时问题来了,LED闪烁的频率明显比第一次要快了,可见系统的基本时钟源也跟随变化了,因此在调节系统时钟时,还需要把操作系统的基本时钟源也做更改。
    再看串口部分,串口依然正常的收到了数据,只不过发送频率快了一些,因为外设的时钟源与系统核心不同,所以就没有出现这个问题了。
           由于板子没有引出摄像头接口,所以原计划的视频监控系统无法实现了,现在就来做一个无线传感器网络环境监测系统吧,从zigbee模块接收数据,在屏幕上显示,并存放在SD卡中,这应该也是一个不错的系统吧。

    回复

    使用道具 举报

  • TA的每日心情

    2021-12-7 12:35
  • 签到天数: 1354 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-12-30 22:45:43 | 显示全部楼层
    写的好,学习和参考了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-14 10:15
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-12-31 11:21:55 | 显示全部楼层
    晨枫, 打开tcl.config.h,看看最后这几个配置,修改一下mcu主频的配置。
    #define TCL_CPU_LEAST_STACK            (256U)
    #define TCL_CPU_IRQ_NUM                (68)
    #define TCL_CPU_CLOCK_FREQ             (72U*1024U*1024U)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-12-21 11:25
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2016-1-1 14:50:44 | 显示全部楼层
    trochili 发表于 2015-12-31 11:21
    晨枫, 打开tcl.config.h,看看最后这几个配置,修改一下mcu主频的配置。
    #define TCL_CPU_LEAST_STACK     ...

    恩,已经找到了,多谢!只要仔细寻找,一定能找到核心的地方!为飞鸟点赞!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-1-2 20:00:27 | 显示全部楼层
    不喜欢TCL,平白无故多打几个字母。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-14 10:15
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-1-4 14:05:46 | 显示全部楼层
    党国特派员 发表于 2016-1-2 20:00
    不喜欢TCL,平白无故多打几个字母。。。。

    避免和其他代码混淆冲突,c语言没有命名空间的概念,容易出错。比如你用的fatfs,万一出来个CPU_CLK之类的宏呢,即使不冲突,也能分清楚这代码是那里定义的。程序员看到TCL_CPU_XX这样的宏,会立刻知道它是trochili里的而不是fatfs里的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-4 15:25:17 | 显示全部楼层
    分享的不错,可以将文章一并发到经验频道,获取双重奖励哟http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-4-19 12:39
  • 签到天数: 128 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-5 16:21:46 | 显示全部楼层
    确实很好 我也想学习下rtos 了  之前就看过一点ucos
    0.0
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-18 11:51
  • 签到天数: 18 天

    连续签到: 2 天

    [LV.4]偶尔看看III

    发表于 2016-1-9 08:39:42 | 显示全部楼层
    学习了,谢谢分享。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 09:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-12 12:01:38 | 显示全部楼层
    看到2345的身影了……
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 00:16 , Processed in 0.220448 second(s), 34 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.