打印
[活动]

【极海G32A1465测评】2、RT-Thread Nano点灯

[复制链接]
162|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 sujingliang 于 2024-12-14 21:15 编辑

RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。


与 RT-Thread 完整版不同的是,Nano 不含 Scons 构建系统,不需要 Kconfig 以及 Env 配置工具,也去除了完整版特有的 device 框架和组件,仅是一个纯净的内核。


SDK中有一个RT-Thread Nano的例程,位于:G32A1xxx_SDK_V1.1(3)\G32A1xxx_SDK_V1.1\Examples\G32A1465\RTOS\RT-Thread
本文在这个例程的基础上再增加FinSH Shell点灯。


一、main函数是rt-thread的一个线程
void rt_application_init(void)
{
    rt_thread_t tid;

#ifdef RT_USING_HEAP
    tid = rt_thread_create("main", main_thread_entry, RT_NULL,
                           RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);
    RT_ASSERT(tid != RT_NULL);
#else


二、main中建立2个点灯线程
int main(void)
{
    /* Initialize LEDs */
    LED_Init();

    /* Create thread */
    led_thread = rt_thread_create("led1",
                               led_thread_entry,
                               RT_NULL,
                               256,
                               3,
                               20);

    /* Startup thread */
    rt_thread_startup(led_thread);
        
                led2_thread = rt_thread_create("led2",
                               led2_thread_entry,
                               RT_NULL,
                               256,
                               3,
                               20);
                rt_thread_startup(led2_thread);
}


三、点灯线程函数
void led_thread_entry(void* parameter)
{
    while (1)
    {
        LED_Toggle(LED_GREEN);
        rt_thread_delay(1000);
    }
}
RT-Thread 提供的 rt_thread_mdelay() 函数可以引起操作系统进行调度,当调用该函数进行延时时,本线程将不占用 CPU,调度器切换到系统的其他线程开始运行。而裸机的 delay 函数是一直占用 CPU 运行的。


上面实现了红灯和绿灯的翻转。

四、自建个FinSH Shell点灯文件led.c


#include "rtthread.h"
#include "board.h"

// 控制LED的函数
void led_control(rt_bool_t state)
{
    if (state)
    {
        // 打开LED
LED_On(LED_BLUE);
    }
    else
    {
        // 关闭LED
LED_Off(LED_BLUE);
    }
}

void led_on(void)
{
        led_control(true);
}

void led_off(void)
{
        led_control(false);
}
// 导出到msh(FinSH的命令行解释器)的命令
MSH_CMD_EXPORT(led_on, Turn the LED on);
MSH_CMD_EXPORT_ALIAS(led_on, lon, Turn the LED on (alias));
MSH_CMD_EXPORT(led_off, Turn the LED off);
MSH_CMD_EXPORT_ALIAS(led_off, loff, Turn the LED off (alias));


五、运行效果

键入help,可以看到shell commands增加了4个命令:




串口显示RT-THREAD已经成功运行。
键入led_on,蓝灯亮;
键入led_off,蓝灯灭。




使用特权

评论回复
沙发
LEDyyds| | 2024-12-16 15:02 | 只看该作者
RT-Thread Nano是不是比RT-Thread 占用的内存更小

使用特权

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

本版积分规则

34

主题

69

帖子

0

粉丝