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

[复制链接]
 楼主| 北方西门吹雪 发表于 2024-5-20 09:23 | 显示全部楼层 |阅读模式
本帖最后由 北方西门吹雪 于 2024-5-20 09:37 编辑

#申请原创# 1. APM32F411V 内存足够大,可以容纳核心很多中间件的使用,其中最常用的就是RTOS实时操作系统,这里选择rt-thread进行开发。
Capture.PNG
这个是rt-thread nano的内核逻辑图,包括了完整的事件处理功能。完整版的rtthread也可以支持,这里就是更多的外设和配置方法,需要用scons进行编译和配置。
使用nano版本的可以更好的使用广泛的IDE,更紧凑的内存使用。
2. 加载范例代码,这里需要下载rtthread nano并解压在指定的文件夹。然后编译下载,就可以完整的驱动led的实时变换了
Capture.PNG
3 代码分析

  1. static void led1_thread_entry(void* parameter)
  2. {
  3.     while (1)
  4.     {
  5.         APM_LEDToggle(LED3);
  6.         rt_thread_delay(1000);
  7.         APM_LEDToggle(LED2);
  8.     }
  9. }


  10. int main(void)
  11. {
  12.     APM_LEDInit(LED2);
  13.     APM_LEDInit(LED3);

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

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

  10. static void led2_thread_entry(void* parameter)
  11. {
  12.     while (1)
  13.     {
  14.         //APM_LEDToggle(LED3);
  15.         rt_thread_delay(500);
  16.         APM_LEDToggle(LED2);
  17.     }
  18. }

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

  5.     led1_thread = rt_thread_create("led1",
  6.                                    led1_thread_entry,
  7.                                    RT_NULL,
  8.                                    512,
  9.                                    3,
  10.                                    20);
  11.     rt_thread_startup(led1_thread);   
  12.                 led2_thread = rt_thread_create("led2",
  13.                                    led2_thread_entry,
  14.                                    RT_NULL,
  15.                                    512,
  16.                                    3,
  17.                                    20);
  18.     rt_thread_startup(led2_thread);   
  19. }
5 增加FInSH控制台使用FinSH是使MCU具有会话能力,启动MSH界面。这里在其中一个线程加上一句输出的语句就可以了
  1. static void led1_thread_entry(void* parameter)
  2. {
  3.     while (1)
  4.     {
  5.         APM_LEDToggle(LED3);
  6.         rt_thread_delay(1000);
  7.         //APM_LEDToggle(LED2);
  8.                         rt_kprintf("hello RT-Thread!\n");
  9.                        
  10.     }
  11. }
启动串口通讯,输入如下
Capture.PNG
显示成功。


szt1993 发表于 2024-5-23 17:07 | 显示全部楼层
RT-thread也是时实操作系统的一种版本,跟RTOS有具体的区别吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

122

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部