一、RTthread
- 官网链接
https://www.rt-thread.org/
二、RT-Thread特点和优势
- RT-Thread 的主打特性是 “小而美的物联网操作系统”。
“小” 体现在 RT-Thread 的体积小,最小资源占用 1.2KB RAM 和 2.5KB flash。RT-Thread 可伸缩、易裁剪的特性,帮助用户在需要一个适用的操作系统的时候,轻松地进行裁减,适应到需要的场景,不占用过多的资源。
“美” 不单止代码质量和代码风格,还有 RT-Thread 的使用和开发体验,以及增加了小程序、SMP 多核调度、PSA 安全支持等多项实用的新功能,使得 RT-Thread 系统能实现灵活极简的应用开发,能扩展至众多高性能、高安全的应用领域。
“物联网” 则体现在 RT-Thread 针对物联网场景提供的众多组件和软件包,比如 AT组件、WiFi、蓝牙、LoRa、Sensor、AI 等等。以及针对安全和低功耗的优化,还有以 JS 为开发方式的柿饼 UI,都使其非常适用于 IoT 领域。
三、RT-Thread Nano
- RT-Thread Nano 是一个极简的硬实时内核,其内存资源占用极小,功能包括任务管理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。对于系统资源紧张或是项目功能较为简单的,则可以选择基于 RT-Thread Nano 进行开发。比如家电、消费、医疗、工控领域的 32 位入门级 MCU。
四、移植
- RT-Thread有移植教程,就不重复描述了,下面是教程链接,要使用到串口打印信息,所以这里得在后面选上一个串口用于打印,顺便将PC13引脚勾选为gpiooutput,用于点灯确保程序正常运行。
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-cube/an0041-nano-port-cube
- 说一下注意点,RT操作系统里的关联串口默认为usart2,不是usart1,如果使用的是usart1,需要在board.c里改一下
- 建立RT线程,执行子任务
//任务线程
struct rt_thread led_thread;
//任务栈
rt_uint8_t rt_led_thread_stack[128];
//任务函数
void print_task_entry(void *parameter);
//初始化线程函数
void MX_RT_Thread_Init(void)
{
//初始化LED线程
/*
静态线程对象
线程名
线程入口函数
线程入口参数
线程栈地址
线程栈空间大小
线程优先级
线程时间片
*/
rt_thread_init(&led_thread,"led",print_task_entry,RT_NULL,&rt_led_thread_stack[0],sizeof(rt_led_thread_stack),3,20);
//开启线程调度
rt_thread_startup(&led_thread);
}
//print任务
void print_task_entry(void *parameter)
{
//1000ms闪烁一次
while(1)
{
rt_kprintf("在线程里\r\n");
rt_thread_delay(1000);
}
}```
- 主函数里的内容,测试是否初始化完成并正常运行
```python
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_RT_Thread_Init();
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
rt_thread_mdelay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
//HAL_UART_Transmit(&huart1,(uint8_t *)("hello world \r\n"),sizeof("hello world \r\n"),0xff);
rt_kprintf("\n \\ | /\n");
rt_thread_mdelay(500);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
- 效果
五、总结
- 移植还是蛮简单的,只要按着步骤来就可以了,不过初始化的时候需要注意一下,如果要使用多线程,需要自己进行初始化,然后再开启任务线程,相较于ucosIII操作系统来说,RT的使用更加方便。相较于裸机程序来说,想要实现多任务只能控制延时,但太小的延时也不好控制,操作系统可以较好的解决这个问题。