RT-Thread RTOS Nano v3.1.5 Released

RT-Thread has a Standard version and a Nano version, the standard version consisting of kernel layer, components and service layer, and IoT framework layer. The Nano version with a very small size and refined hard real-time kernel, which is very suited for the resource-constrained microcontroller unit (MCU) system.

RT-Thread Nano is a refined hard real-time kernel, written in C programming language and it applies object-oriented paradigm. RT-Thread Nano is a preemptive real-time multitasking RTOS, easy to tailor. Although Nano uses a small memory footprint, it still has a wealth of operating system features, such as multiple tasks scheduling, software timer, semaphore, mailbox, and real-time scheduler. And RT-Thread Nano fits well for low-end 32-bit ARM MCU applications in the fields of home appliances, consumer electronics, medical equipment, industrial control, etc.

RT-Thread Nano is tailored from RT-Thread Standard version, contains only the minimal core set of features. Nano architecture is shown as follow:

We are pleased to announce the release of RT-Thread Nano version 3.1.5.


  • Fix the issue when block = NULL in rt_mp_free;
  • Fix the software issue when the system timer thread is pending
  • Fix the timer/software timer handling issue if the timeout function starts/stops/deletes this timer.
  • Fix an issue with rt_timer_start being broken and destroying the timer list
  • Fix bug of rt_memheap_detach
  • Fix the bug that the linked list is still mounted when the single timer is not modified
  • Fix the delay_until issue
  • Add mb mq value overflow-check code
  • Fix the rt_event_recv function, if the event met without blocking, assigning thread->event_set/event_info will goes well
  • Add the definition of the maximum value of ipc type
  • Fix the delay_until issue
  • fixed __rt_ffs bug on account of armclang LTO.
  • fixed rt_timer_list_next_timeout multi-task safe
  • fix the software issue when the system timer thread pending.
  • Fix the timer/software timer handling issue if the timeout function starts/stops/deletes this timer.
  • The cleanup operation is executed before the current thread exits
  • Modify cleanup to resolve the issue of unable to free memory and communication between threads
  • Fix double release for thread
  • Fix thread control bug about RT_THREAD_CTRL_CLOSE command
  • Fix the issue of critical protection when rt_thread_delete change the status of thread;
  • Fix bug in rt_realloc of mem.c, which may cause memory leak
  • Use object_find to implement thread_find/device_find
  • fix the timer code depends on c99
  • Split the component automatic initialization to component automatic initialization and main funciton;
  • Fix RT_IDLE_HOOK spelling issue;
  • Add thread waiting for message queue when queue is full;
  • Fix the issue of delete mq in rt_mq_create in some abnormal case;
  • Remove the C++ keywords in thert_console_set_devicefunction;
  • Remove the suspend_thread_count member from memory_pool structure;
  • Add CORTEX-M23/M33 in libcpu
  • Add samples for gd32e230k-msh
  • Add samples for lpc55s69-blink

Porting Related

Because the code for the porting varies from different architectures, to make the Nano version compatible with more architectures, we marked the parts that need porting in tags of #error ToDO. So users will be very well reminded, and this also enhances the code generality. The Tag looks like this:

  • #error TODO 1 (system start-up required): Complete system clock configuration
  • #error TODO 2 (console printing required): complete uart initialization, configure the pins, baud rate, and other parameters
  • #error TODO 3 (console printing required): Complete rt_hw_console_output to output characters and implement the printout by enabling rt_kprintf()
  • #error TODO 4 (console input required): Complete rt_hw_console_getchar to obtain the characters and implement the input command in the console

When you’re working on Nano v3.1.5, if the compilation failed the same as the above four errors, don’t get panic. It is just the remind tags.

Device Frame Related

Add the option of the device framework so users can choose to turn on/off the rt-thread framework according to their preferences or usage habits.

  1. If the user chooses the device frame, the driver pair can be attached to the device frame on its own, using the unified interface to operate the peripheral driver;
  2. If users prefer to develop using bare metal-driven libraries, they can opt-out of the device framework.
  • Q: How to turn off the device framework?
  • A: Close the RT_USING_DEVICE in rtconfig.h.

FinSH Component Related

The configuration of the FinSH component moved from rtconfig.h to the finsh_config.h, implement by the rtconfig.h that contains finsh_config.h header file. The FinSH configuration moved out is because we’re thinking of adding more components for Nano in the future, so if placing all the configuration items in rtconfig.h, the keil-pack and the cubemx-pack may produce different results under different compilers to confuse the user. Considered this, we’re making the configuration files to be managed internally by each component.

Get Started with RT-Thread Nano 3.1.5

Download RT-Thread Nano 3.1.5 Source Code




RT-Thread Studio IDE


Welcome to share your Feedback in RT-Thread Club.

An Open-Source Community-Powered Real-Time Operating System (RTOS) Project! We develop, we DIY, we create, we share, we explore this new IoT World together!