打印
[APM32F4]

【APM32F411V Tiny Board测评】RT-thread Nano的使用

[复制链接]
338|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 北方西门吹雪 于 2024-5-20 09:37 编辑

#申请原创# 1. APM32F411V 内存足够大,可以容纳核心很多中间件的使用,其中最常用的就是RTOS实时操作系统,这里选择rt-thread进行开发。

这个是rt-thread nano的内核逻辑图,包括了完整的事件处理功能。完整版的rtthread也可以支持,这里就是更多的外设和配置方法,需要用scons进行编译和配置。
使用nano版本的可以更好的使用广泛的IDE,更紧凑的内存使用。
2. 加载范例代码,这里需要下载rtthread nano并解压在指定的文件夹。然后编译下载,就可以完整的驱动led的实时变换了

3 代码分析

static void led1_thread_entry(void* parameter)
{
    while (1)
    {
        APM_LEDToggle(LED3);
        rt_thread_delay(1000);
        APM_LEDToggle(LED2);
    }
}


int main(void)
{
    APM_LEDInit(LED2);
    APM_LEDInit(LED3);

    led1_thread = rt_thread_create("led1",
                                   led1_thread_entry,
                                   RT_NULL,
                                   512,
                                   3,
                                   20);
    rt_thread_startup(led1_thread);
}
这里可以看到是,和GPIO的直接调用不同,这里是创建了一个线程,导入led变换功能,在同一个线程内完成,这样LED2和LED3都可以不断按时变换

4 更改为双线程
根据上述逻辑,可以创建两个线程,分别控制2个LED而且使用不同的变换频率,这样先创建两个线程
static void led1_thread_entry(void* parameter)
{
    while (1)
    {
        APM_LEDToggle(LED3);
        rt_thread_delay(1000);
        //APM_LEDToggle(LED2);
    }
}

static void led2_thread_entry(void* parameter)
{
    while (1)
    {
        //APM_LEDToggle(LED3);
        rt_thread_delay(500);
        APM_LEDToggle(LED2);
    }
}

然后分别启动两个线程,首先定义入口,然后分别启动,就可以实现这样的功能。
int main(void)
{
    APM_LEDInit(LED2);
    APM_LEDInit(LED3);

    led1_thread = rt_thread_create("led1",
                                   led1_thread_entry,
                                   RT_NULL,
                                   512,
                                   3,
                                   20);
    rt_thread_startup(led1_thread);   
                led2_thread = rt_thread_create("led2",
                                   led2_thread_entry,
                                   RT_NULL,
                                   512,
                                   3,
                                   20);
    rt_thread_startup(led2_thread);   
}
5 增加FInSH控制台使用FinSH是使MCU具有会话能力,启动MSH界面。这里在其中一个线程加上一句输出的语句就可以了
static void led1_thread_entry(void* parameter)
{
    while (1)
    {
        APM_LEDToggle(LED3);
        rt_thread_delay(1000);
        //APM_LEDToggle(LED2);
                        rt_kprintf("hello RT-Thread!\n");
                       
    }
}
启动串口通讯,输入如下

显示成功。


使用特权

评论回复
沙发
szt1993| | 2024-5-23 17:07 | 只看该作者
RT-thread也是时实操作系统的一种版本,跟RTOS有具体的区别吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

107

帖子

1

粉丝