开放原子训练营(第二季)RT-Thread Nano 学习营 参与体会

参加了开放原子训练营的RT-ThreadNano学习,了解到其为RT-Thread的精简版,易于移植。文中还介绍了如何使用摩斯电码软件包,通过定时器和中断处理按键输入,实现信号识别。此外,文章提出了可扩展的按键亮灯功能,加深了对RT-Thread基础和嵌入式系统应用的理解。
摘要由CSDN通过智能技术生成

4.22参加了开放原子训练营(第三季)RT-Thread Nano 学习营,会上主持人详细介绍了RT-Thread Nano实时操作系统。RT-Thread Nano是RT-Thread的极简版,包括了最小的核心组件,因此它移植非常容易,仅需添加源码到工程就可以完成90%的移植工作。最重要的是,它开源免费并提供了极具人性化的参考文档,对于学习内核基础、线程管理、时钟管理、线程间同步、线程间通信、内存管理、中断管理,以及 Nano 版块移植都有良好的帮助。

       在会上额外介绍了摩斯电码morse软件包的使用。下列代码为morse的核心实现,

morse_timer = rt_timer_create("morse", morse_timeout,
                                  RT_NULL, 0,
                                  RT_TIMER_FLAG_ONE_SHOT);

 通过创建定时器,定时检测按键按下时间及松手时间,判断输入信号为“di”还是“da”。具体地,通过PKG_USING_MORSE_DI_DA_SEPARATE该宏控制判断“di”或者“da”的时间长短,如果按键时长小于该宏设定时长,则认为发送数据“di”,否则发送“da”,如下

void morse_input(rt_bool_t flag)
{
    if (morse_flag != flag)
    {
        rt_tick_t interval = rt_tick_get_millisecond() - millisecond;
        millisecond = rt_tick_get_millisecond();
        if (flag)
        {
            rt_timer_stop(morse_timer);led_flag=0;
        }
        else
        {
            if (interval <= PKG_USING_MORSE_DI_DA_SEPARATE)
                {
                dida_add(RT_DI);led_flag=1;
                }
            else
            {
                dida_add(RT_DA);led_flag=2;
            }
            morse_timer_start(PKG_USING_MORSE_INTERCHAR);
        }
        morse_flag = flag;
    }
}

       最后,通过外部中断检测按键的上升沿及下降沿,依此使用morse_input函数判断输入数据类型,超时时间由PKG_USING_MORSE_INTERCHAR该宏给定。经过会上实验,这部分功能非常有趣,可以进一步添加按键亮灯功能,如下。在中断函数内部读取按键电平,实现按键按下时低电平,led灯亮,松开按键时高电平,led灯灭。

#define USER_KEY GET_PIN(C, 13) // GET_PIN(H,4)
#define LED0_PIN GET_PIN(A,5)

void irq_callback()
{
    morse_input(!rt_pin_read(USER_KEY));
    if(rt_pin_read(USER_KEY))
    {
        rt_pin_write(LED0_PIN, PIN_LOW);
    }
    else {
        rt_pin_write(LED0_PIN, PIN_HIGH);
    }
}

       通过这次实训学习,使我对RT-Thread的基本知识和理论有了比较系统而全面的理解,使我在嵌入式上有了更深层次的提高。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值