查看: 1235|回复: 0

基于GD32 Colibri-F190R8的Trochili RTOS从小白到高手的成长历程

[复制链接]
  • TA的每日心情
    开心
    2018-11-19 09:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-5-5 08:54:24 | 显示全部楼层 |阅读模式
    分享到:
    其实早在1年前有机会得到一块GD23F103的板子,但一直没得机会玩起来。后来有机会遇到留虚名老师,得以了解Trochili,这才又开始重新审视GD32。由于时间上的冲突,之前的GD几次活动没能赶上,所以就非常珍视这次190的小红板,而且得到论坛xinxin、飞飞的支持,终于如愿得到期待已久的小红板,再次感谢xinxin、飞飞和留虚名老师。
    这次使用小红板主要实现的目标有2个:1. 在190平台上深入理解trochili;2. 基于1实现RFID的读卡系统。
    因为本彩笔是系统白,故前面会更新的较慢,但会以新人的视角来理解Trochili,并把过程完全的分享给关注本帖的大家,谢谢大家的关注。

    焊好排针的小红板
    开箱帖什么的,因为有大大会秀出,所以咱渣的拍照技术就不丢人了。
    这里只把焊好排针的小红板秀一下


    有条尾巴?那是错觉,其实是条手挽带,请看下图

    小红板的正面


    小红板的背面


    1. Trochili系统部分

    拿到小红板时激动的心情简直是无法用心情来形容,但是还没来得及激动多久,心情就一下子冷了下来……因为插上电后看着闪烁的灯,茫然了,不知所措……接下来做什么?怎么做?自己犹如深处浓雾之中的独身旅人

    在不知所措中试着打开飞鸟哥亲情奉献的例程“trochili_v0.12_preview4_20160408”,试着编译一下。30个错误,一下子蒙了。看下提示信息,都是core_cmInstr.h 文件无法打开,终于知道在包含文件中此文件的路径有误,修改为“d:\Keil_v5\ARM\Pack\ARM\CMSIS\4.2.0\CMSIS\Include”,解决,编译通过。

    debug工具选择的是“CMSIS-DAP Debugger”,其它默认,download成功,又可以看到闪烁的灯。虽然这次的闪灯跟刚拿到板子时的情况是一样的,但心情却不一样了,因为对于Trochili终于踏出了第一步。

    接下来,看到例程中有多个example,想逐个尝试一下,看下有什么不同的效果……but……该怎么改?

    看书,看飞鸟哥的《嵌入式实时操作系统原理与最佳实践》(注:请在论坛上查找最新的电子版,机械工业版的与最新的例程有出入),查找程序的入口,终于看到在每个example中都有类似的一句“#if (EVB_EXAMPLE == CH13_BOARD_TEST_EXAMPLE)”,结合“example.h”文件中的“#define EVB_EXAMPLE            CH13_BOARD_TEST_EXAMPLE”一句,理解到把此句更换为需要测试的例子就好。比如想要测试线程的话,就更改为“#define EVB_EXAMPLE             CH2_THREAD_EXAMPLE1”,在编译,下载后可以看到板上的LD4、LD5、LD6依次亮、灭。而后面的2~7现象依次是
    2:LD5亮、灭;
    3:LD5亮、灭;
    4:LD5亮、灭;
    5:LD5亮、灭;
    6:LD5、LD6依次亮、灭2次;
    7:LD5亮、灭。这是直观的小红板的表现,对于程序的解读,在后面会再深入。而其它的example后面会再进行测试。

    接着说CH2_THREAD_EXAMPLE1,也就是thread_init.c这个文件。这个应用(称这个为应用不知合适不合适,还请飞鸟哥指正,谢谢)现象大家都还记得是什么吧?就是3颗led依次亮灭。
    在程序中我们可以看到这样一段代码:
         delay(0x8FFFFF);
         EvbLedControl(LED1, LED_ON);

         delay(0x8FFFFF);
         EvbLedControl(LED1, LED_OFF);

         delay(0x8FFFFF);
         EvbLedControl(LED2, LED_ON);

         delay(0x8FFFFF);
         EvbLedControl(LED2, LED_OFF);

         delay(0x8FFFFF);
         EvbLedControl(LED3, LED_ON);

         delay(0x8FFFFF);
         EvbLedControl(LED3, LED_OFF);

    是不是觉得很熟悉?这就是我们看到的led亮灭的对应部分。亮的时间由延时函数delay的参数决定。而这段代码存在于static void ThreadLedEntry(TArgument data)这个入口函数中。所以现在我们来看一下这个应用thread_init.c的整体结构:
    1. 包含头文件     
    2. 预编译开关
    3. 三个参数        设定栈长宽字节、优先级字节、时间片字节的长度
    4. 定义线程
    5. 定义线程栈
    6. 定义线程入口函数 线程的主要功能在这里实现。static void ThreadLedEntry(TArgument data)函数就在这个位置
    7. 定义应用入口函数 系统调用此应用,从而对线程进行处理
    8. 定义main函数
    这个结构在后续的程序分析中我们再逐个印证。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-5-14 05:08 , Processed in 0.122836 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.