RT-Thread基础

现如今找一份单片机开发的工作或多或少都得沾点RTOS,这样才能有一份面试的机会。

所以,什么是RTOS?

RTOS的主要工作是提供多任务处理,RTOS通过在任务之间快速切换,创造了并行执行的错觉。开发人员可以通过设置任务的优先级来确定系统的实时性。

RT-Thread则是一款开源嵌入式实时操作系统,提供了丰富的组件和软件包并且RT-Thread遵循Apache 2.0开源协议, 支持多种CPU架构,包括ARM、RISC-V、MIPS等,可以运行在不同的硬件平台上。

学习路线:

  1. 看教程,用起来,移植教程、《内核实验手册》,先去使用起来不需要知道原理
  2. 看理论,打基础,《RT_Thread编程指南》,理解和学习操作系统内核基本概念
  3. 看底层,学原理,RT-Thread源码学习、《API手册》、《RT-Thread内核实现与应用开发实战》
  4. 学习应用与应用实战,设备驱动和驱动、组件、软件包……

一、RT-Thread Nano

Nano是一个极简版的实时内核,主要是实现了线程管理、时钟、中断、内存的管理,能够实现线程间通信 创建线程,创建动态线程、创建静态线程 线程初始化、线程启动、线程优先级分配,入口函数 使能动态堆管理,使能最小内存算法

常见问题

3.1 STM32CubeMX如果不打开SWD口,会导致jlink烧录过一次程序后,无法自动烧录的问题。需要手动复位才能烧录;

解决办法:system core -> sys -> mode -> debug -> serial Wire

3.2 HAL_Delay 在引入线程之后无法使用问题

避免在中断中调用 HAL_Delay,使用 RT-Thread 提供的延时函数,如 rt_thread_mdelay,它不会阻塞系统调度

实在要用,在 RT-Thread 的 board.c 文件中,确保 SysTick_Handler 中调用了 HAL_IncTick,以同步 HAL 库的时钟。示例代码如下:

void SysTick_Handler(void)
{
    /* USER CODE BEGIN SysTick_IRQn 0 */
    HAL_IncTick();  // 确保调用 HAL 的时钟更新函数
    /* USER CODE END SysTick_IRQn 0 */

    rt_tick_increase();  // RT-Thread 的系统时钟更新

    /* USER CODE BEGIN SysTick_IRQn 1 */
    /* USER CODE END SysTick_IRQn 1 */
}

3.3 Nano添加FinSH,只返回一个字符?

Nano版本缺陷?

原因是rt_hw_console_getchar原函数里面有 rt_thread_mdelay( 10 );,这样的一个10毫秒延时函数,导致串口接收到一个数据之后就要等待10ms,时间才能继续接收下一个数据,10ms的时间串口早就发完了,说以接收不了2个以及后面的数据

results matching ""

    No results matching ""