Categories
Author: windoufu
I developed an IoT fingerprint door lock based on the open-source RT-Thread IoT operating system and the RA6M4 development board; The hardware includes an ESP8266WIFI module, ATK-301 fingerprint module, RC522NFC module, RA6M4 main control board, etc. The software realizes Alibaba Cloud’s Smart WIFI to automatically finish the network configuration, APP remote to unlock the door, NFC to unlock the door, fingerprint registration, fingerprint unlocking, and many other functions.
Author: windoufu
I developed an IoT fingerprint door lock based on the open-source RT-Thread IoT operating system and the RA6M4 development board; The hardware includes an ESP8266WIFI module, ATK-301 fingerprint module, RC522NFC module, RA6M4 main control board, etc. The software realizes Alibaba Cloud’s Smart WIFI to automatically finish the network configuration, APP remote to unlock the door, NFC to unlock the door, fingerprint registration, fingerprint unlocking, and many other functions.
ESP8266WIFI module is responsible for completing Alibaba Cloud Intelligent APP communication, intelligent network distribution, remote unlocking, and other functions. ATK-301 fingerprint module, responsible for completing fingerprint registration and fingerprint matching functions, using serial port and master control for communication. RC522NFC module, responsible for completing NFC swipe to open the door, using the SPI interface and master control to communicate. RA6M4 main control board, responsible for implementing all peripheral module communication and functional logic. Among them, the LED light works to simulate the opening state, the green light means to open the door, and the red light to close the door.
Software Module Description
NFC thread: responsible for completing the detection of swipe card access, sending the door opening semaphore Fingerprint thread: responsible for completing fingerprint registration and fingerprint matching, after the fingerprint matching is successful, send the door opening signal Key thread: detects the key action, realizes fingerprint registration and door opening functions Open door thread: wait for the door opening signal to realize the door opening action
The project is open source, download the code HERE.
By David528
Generally, the traditional mathematical morphological method is the way that we’re taking as the main method of ECG signal waveform recognition. In the morphological method, the recognition of R-peak is the foundation of the other waveform recognition. In this project, we’re going to port the open source PanTompkins and do some transformation works, and an R-peak recognition technology implementation for producer and consumer models of RT-Thread systems will be added. Based on the collected ECG data, the ECG waveform is drawn in real-time and the R peak is identified, and the ECG waveform graph (white) and the marked position (red vertical line) of the R peak recognition are plotted in the example below.
By David528
Generally, the traditional mathematical morphological method is the way that we’re taking as the main method of ECG signal waveform recognition. In the morphological method, the recognition of R-peak is the foundation of the other waveform recognition. In this project, we’re going to port the open source PanTompkins and do some transformation works, and an R-peak recognition technology implementation for producer and consumer models of RT-Thread systems will be added. Based on the collected ECG data, the ECG waveform is drawn in real-time and the R peak is identified, and the ECG waveform graph (white) and the marked position (red vertical line) of the R peak recognition are plotted in the example below.
Download/ Open RT-Studio IDE to create a new RT-Thread project based on the Renesas CPK-RA6M4 board.
As I have only one serial port converter(USB to TTL), so I need to disable the system console and shell serial port input and output, I can then use this serial port independently for the input of ECG data and the output of the calculation result.
In the configuration header file rconfig.h, disable the following configuration:
1. Disable the console serial output
2. //#define RT_USING_CONSOLE
3. Disbale Shell:
4. //#define RT_USING_FINSH
We’re focusing on the main card and the serial port converter( USB to TTL ), and it’s quite easy to access.
1. First, use RT-Thread’s rt_sem_init method to initialize the signals that are required for producer and consumer and serial port reception:
1. // Initialize the semaphore used by producers and consumers
2. rt_sem_init(&sem_lock, "lock", 1, RT_IPC_FLAG_PRIO);
3. rt_sem_init(&sem_empty, "empty", MAXSEM, RT_IPC_FLAG_PRIO);
4. rt_sem_init(&sem_full, "full", 0, RT_IPC_FLAG_PRIO);
5.
6. // Initialize the serial port to receive the used signal
7. rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
2. Use RT-Thread’s rt_device_find and rt_device_open methods to open the serial port of device uart7
1. serial = rt_device_find(SAMPLE_UART_NAME);
2. if (!serial)
3. {
4. rt_kprintf("find %s failed!\n", SAMPLE_UART_NAME);
5. }
6.
7. res = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
8. if (res == RT_EOK)
9. {
10. rt_device_set_rx_indicate(serial, uart_input);
11. }
3. Main source code fragment for the producer implementation
This part is based on serial port reception, making an infinite loop to receive serial port data, because the simulation sends each ECG data that contains n to the board, so use n as the end mark of each ECG data. After receiving ECG data, it is put into the consumer buffer.
1. while (1)
2. {
3. dataType data = 0;
4. char ch;
5. char str[10];
6. int i = 0;
7.
8. while (1)
9. {
10. if (rt_device_read(serial, -1, &ch, 1) != 1) {
11. rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
12. continue;
13. }
14. if (ch != '\n') {
15. str[i] = ch;
16. if ( i < (sizeof(str) - 1))
17. i ++;
18. }
19. else {
20. data = atoi(str);
21. break;
22. }
23. }
24.
25. rt_sem_take(&sem_empty, RT_WAITING_FOREVER);
26.
27. rt_sem_take(&sem_lock, RT_WAITING_FOREVER);
28.
29. pc_buffer[pc_in] = data;
30. pc_in = (pc_in + 1) % MAXSEM;
31.
32. rt_sem_release(&sem_lock);
33. rt_sem_release(&sem_full); }
4. Main source code fragment for the customer implementation This part of the code is to implement the data input
1. rt_sem_take(&sem_full, RT_WAITING_FOREVER);
2.
3. rt_sem_take(&sem_lock, RT_WAITING_FOREVER);
4.
5. num = pc_buffer[pc_out];
6. pc_out = (pc_out + 1) % MAXSEM;
7.
8. rt_sem_release(&sem_lock);
9. rt_sem_release(&sem_empty);
5. At last, use the RT-Thread thread creation method rt_thread_create
, rt_thread_startup
to create and enable two threads, one for the producer and one for the consumer.
1. tid = rt_thread_create("thread1",
2. producer_thread_entry, (void*)0,
3. THREAD_STACK_SIZE,
4. THREAD_PRIORITY, THREAD_TIMESLICE);
5. if (tid != RT_NULL)
6. rt_thread_startup(tid);
7.
8. tid = rt_thread_create("thread2",
9. consumer_thread_entry, (void*)0,
10. THREAD_STACK_SIZE,
11. THREAD_PRIORITY, THREAD_TIMESLICE);
12. if (tid != RT_NULL)
13. rt_thread_startup(tid);
Start from the main entry function, open a serial port COM3, and then create and enable two threads, one is to send the simulated ECG data, and the other is to receive ECG data and identify the results. In the source code for drawing ECG waveforms and R-peak (red vertical lines), we’re using QTimer and pygtgraph to draw the ECG graphics. Implemented Python source code:
1. import serial
2. import threading
3. import time
4. import pyqtgraph as pg
In the release of RT-Thread 4.1.0, Arm Compiler 6 was added, allowing users to modify the `rtconfig.py` to specify the compiler while building mdk5 projects.
scons --target=mdk5'
to generate the keil project.This project was built with AB32VG1 microcontroller as the main controller, and the open-source RT-Thread IoT OS is adopted. This system design implements the data display via LCD screen OLED12864.
Code Open on: https://gitee.com/lk3/project/tree/master/
Multithreading, multitasking scheduling, semaphores, mutexes, etc.
Hardware ADC, analog IIC, RTC, etc.
VCC 5V;
GND
SCL: PE6
SDA: PE7
100K: (ADC function) (Both sides of the Tap connects 3.3~5V)
IO: PE5(adc0)
Acquisition voltage 0–3.3V, (acquisition accuracy: 10 bits)
PA1: (Blue)
F1: (Mark: S2)
Video Presentation: https://youtu.be/H16ijhzXyPA
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-AK
is an AI
Kit developed by the RT-Thread Team, committed to help
developers one-click deploy the AI
models, allowing developers to develop
business code on top of a unified API and ultimately optimize performance on the target
platform, making it easier and simple to develop end-side AI
applications.
RT-AK
is an AI
Kit developed by the RT-Thread Team, committed
to help developers one-click deploy the AI
models, allowing developers to
develop
business code on top of a unified API and ultimately optimize performance on the target
platform, making it easier and simple to develop end-side AI
applications.
With the RT-AK
support, taking one line of command of
python aitools.py --model xxx...
can deploy the AI
model to
the embedded system:
Commands List: How to run aitools.py
GitHub Repository: https://github.com/RT-Thread/RT-AK
We are striving to minimize the difficulties and thresholds for embedded AI deployment!
Required Documents:
Index | Documents | Example |
1 | Hardware & BSP |
ART-PI BSP |
2 | Neural network model | ./rt_ai_tools/Model/keras_mnist.h5 |
3 | STM32 AI Plug-in |
X-CUBE-AI download & decompress, will be described below |
4 | RT-AK |
RT-AK code is cloned locally |
TO DO LIST: The Latest comes to V6.0.0, RT-AK is now using V5.2.0 will soon be updated to the latest!
X-CUBE-AI
is a part of STM32Cube
Expansion Package in
STM32Cube.AI
ecosystem and extending STM32CubeMX capabilities with
automatic conversion of pre-trained Neural Network and integration of generated
optimized library into the user's project.
X-CUBE-AI
Download
Downloaded File Folder
Includes:
stm32ai-windows-5.2.0.zip
has stored the X-CUBE-AI
model
conversion software: stm32ai
. This file is required.STMxxx.pack
is a static library file of STM32Cube.AI
, it
doesn't need to decompress, and located in
./RT-AK/rt_ai_tools/platforms/stm32/X-CUBE-AI.5.2.0
Unzip stm32ai-windows-5.2.0.zip
file
to D:\Program Files (x86)\stm32ai-windows-5.2.0
, so you can get a
windows
folder under this path.
Keep in mind about this path. HIGH ATTENTION!
STM32: X-CUBE-AI unzip path
RT-Thread Studio
ART-PI BSP
Create ART-PI Project in RT-Thread Studio
rt_ai_tools/aitools.py
Code will automatically use the STM32Cube.AI model conversion tool to obtain a BSP with AI integrated. YES. Aha Moment! Internal detailed processes please refer to the source code or the readme documentation under the plugin_stm32 warehouse.
Enter edge-ai/RTAK/tools
path, run aitools.py
# Run Command
python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=stm32 --ext_tools=<your_x-cube-ai_path> --clear
# Sample
python aitools.py --project="D:\RT-ThreadStudio\workspace\test" --model="./Models/keras_mnist.h5" --platform=stm32 --ext_tools="D:\Program Files (x86)\stm32ai-windows-5.2.0\windows" --clear
Works done so far, some more additional instructions to supplement are shown following
# Specify the name of the conversion model,--model_name defaults to network
python aitools.py --project=<your_project_path> --model= <your_model_path> --model_name= <model_name> --platform=stm32 --ext_tools= <your_x-cube-ai_path>
# Save files generated during running the stm32ai thread,-- clear defaults to empty
# If exited, the work folder generated during running 'stm32ai', i.e. '--stm_out, will be deleted
python aitools.py --project= <your_model_path> --model= <your_model_path> --platform=stm32 --ext_tools= <your_x-cube-ai_path>
# Specify to save the run log, --log defaults to empty
python aitools.py --project= <your_project_path> --model= <your_model_path> --log=./log.log --platform=stm32 --ext_tools= <your_x-cube-ai_path>
# Specify the name of the saved folder,--stm_out defaults to the time of day, such as './20210223'
python aitools.py --project= <your_project_path> --model= <your_model_path> --platform=stm32 --ext_tools= <your_x-cube-ai_path> --stm_out
# Specify the generated c-model name ,--c_model_name defaults to network
python aitools.py --project= <your_project_path> --model=<your_model_path> --platform=stm32 --ext_tools= <your_x-cube-ai_path> --c_model_name=<new_model_name>
Parameter | Description |
--log |
./log.log The log stores the path, which defaults to
empty, and if so, the log file is saved, e.g. ./log.log |
--project |
OS+BSP project engineering folder, empty, user-specified |
--model |
Neural network model file path, defaults to
./Models/keras_mnist.h5
|
--model_name |
New model name after neural network model conversion, defaults to
network
|
--rt_ai_lib |
RT-AK Lib provided by RT-Thread defaults to
../rt_ai_lib
|
--platform |
Specified hardware platform information, currently supported:
stm32 , k210 , defaults to example
|
Parameter | Description |
---|---|
--ext_tools |
X-CUBE-AI storage path, model conversion tool,
stm32ai executable software inside, requiring user-specified
|
--cube_ai |
X-CUBE-AI runs the required static library, defaults
to./platforms/stm32/X-CUBE-AI.5.2.0 |
--rt_ai_example |
Storert_ai_<model_name>_model.c sample file, defaults
to./platforms/stm32/docs |
--stm_out |
The intermediate folder path that results from the stm32ai
thread processing is named by default for the timestamp of the day |
--workspace |
Temporary workspace generated during running stm32ai , defaults
to ./stm32ai_ws |
--val_data |
Defaults to empty, allows users to customize the test dataset even when using an internally self-generated random dataset. |
--compress |
Represents the global compressibility factor that will be applied, applied
only to the full connection layer, with the option of "1|4|8", defaults to
1
|
--batches |
Indicates how many random data samples have been generated, with the default
of 10 |
--mode |
"analyze|validate" mode (optional) plus "generate" mode (must have),
1 indicates selected, select one from
{'001', '011', '101', '111'} , defaults to 001
|
--network | The model name of the template file in Documents , defaults to
mnist .
|
--enable_rt_lib | Open macro definitions in project/rtconfgi.h and default to
RT_AI_USE_CUBE
|
--clear | If need to delete the intermediate folder stm_out that
generated in stm32ai , defaults to False |
This tutorial shows only 'RT-Thread Studio' compilation method, but RT-AK also supports:
Keil
Scons
based on RT-Thread Env
Scons
not based on RT-Thread Env
In RT-Thread Studio, find the project engineering and right-click
Update packages and refresh project,
Then compile
Finally, burn and display.
Now, you're successfully get a new ART-Pi BSP
that integrates
AI
and RT-Thread
.
AI-related application development can be easily processed on RT-Thread.
You may reach to Here for the sample code to run model reasoning mnist_app.c:
/applications path
RT-Thread Studio
and right-click to
refreshmnsit_app
https://github.com/EdgeAIWithRTT/Project3-Mnist_Cube_RTT/tree/master/Mnist_RTT
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Rust is a language that empowers everyone to build reliable and efficient software. It features
Rust is designed to guarantee both security and high performance. The design philosophy is right into what embedded development requires.
While embedded software has running problems that are mostly due to its memory. The Rust language can be regarded as a compiler-oriented language, so you can be sure that you are using memory safely while compiling. Here are some of the benefits of Rust developing on embedded devices:
Now, let’s get it on the Open Source RT-Thread operating system to demonstrate how rust can be used for embedded development.
When we’re calling the Rust code in C code, requires us to package the Rust source code as a static library file. When the C code compiles, link it in.
1.Use cargo init --lib rust_to_c
to build a lib library in Clion. Add the
following code to the lib.rs. The following function evaluates the sum of two values of
type i32 and returns the result :
#![no_std]
use core::panic::PanicInfo;
#[no_mangle]
pub extern "C" fn sum(a: i32, b: i32) -> i32 {
a + b
}
#[panic_handler]
fn panic(_info:&PanicInfo) -> !{
loop{}
}
2.Add the following code to the Cargo.toml file to tell Rustc what type of library to generate.
[lib]
name = "sum"
crate-type = ["staticlib"]
path = "src/lib.rs"
1.Install armv7 target:
rustup target add armv7a-none-eabi
2.Generate static library file:
PS C:\Users\LiuKang\Desktop\RUST\rust_to_c> cargo build --target=armv7a-none-eabi --release --verbose
Fresh rust_to_c v0.1.0 (C:\Users\LiuKang\Desktop\RUST\rust_to_c)
Finished release [optimized] target(s) in 0.01s
1.Install cbindgen, cbindgen generates C/C++11 header file from the rust library:
cargo install --force cbindgen
2.Create a new cbindgen.toml
file under the project folder:
3.Generate header file:
cbindgen --config cbindgen.toml --crate rust_to_c --output sum.h
1.Put the generated sum.h
and sum.a
files into the
rt-thread\bsp\qemu-vexpress-a9\applications
directory
2.Modify the SConscript file and add static library:
from building import *
cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')
CPPPATH = [cwd]
LIBS = ["libsum.a"]
LIBPATH = [GetCurrentDir()]
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, LIBS = LIBS, LIBPATH = LIBPATH)
Return('group')
3.Call the sum function in the main function and get the return value and printf the value.
#include
#include
#include
#include
#include "sum.h"
int main(void)
{
int32_t tmp;
tmp = sum(1, 2);
printf("call rust sum(1, 2) = %d\n", tmp);
return 0;
}
4.In RT-Thread Env environment, use scons to compile the project and run:
LiuKang@DESKTOP-538H6DE D:\repo\github\rt-thread\bsp\qemu-vexpress-a9
$ scons -j6
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: warning: you do not seem to have the pywin32 extensions installed;
parallel (-j) builds may not work reliably with open Python files.
File "D:\software\env_released_1.2.0\env\tools\Python27\Scripts\scons.py", line 204, in
scons: Building targets ...
scons: building associated VariantDir targets: build
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf rtthread.bin
arm-none-eabi-size rtthread.elf
text data bss dec hex filename
628220 2148 86700 717068 af10c rtthread.elf
scons: done building targets.
LiuKang@DESKTOP-538H6DE D:\repo\github\rt-thread\bsp\qemu-vexpress-a9
$ qemu.bat
WARNING: Image format was not specified for 'sd.bin' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
\ | /
- RT - Thread Operating System
/ | \ 4.0.4 build Jul 28 2021
2006 - 2021 Copyright by rt-thread team
lwIP-2.1.2 initialized!
[I/sal.skt] Socket Abstraction Layer initialize success.
[I/SDIO] SD card capacity 65536 KB.
[I/SDIO] switching card to high speed failed!
call rust sum(1, 2) = 3
msh />
1.We can implement some complicated math in rust. In the lib.rs file, use the rust language to implement add, subtract, multiply and divide:
#![no_std]
use core::panic::PanicInfo;
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
#[no_mangle]
pub extern "C" fn subtract(a: i32, b: i32) -> i32 {
a - b
}
#[no_mangle]
pub extern "C" fn multiply(a: i32, b: i32) -> i32 {
a * b
}
#[no_mangle]
pub extern "C" fn divide(a: i32, b: i32) -> i32 {
a / b
}
#[panic_handler]
fn panic(_info:&PanicInfo) -> !{
loop{}
}
2.Build library files and header files and place them in the application directory
3.Use scons to compile, if errors jumped on link up, find the solution on its official Github.
LINK rtthread.elf
d:/software/env_released_1.2.0/env/tools/gnu_gcc/arm_gcc/mingw/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-ar/thumb\libgcc.a(_arm_addsubdf3.o): In function `__aeabi_ul2d':
(.text+0x304): multiple definition of `__aeabi_ul2d'
applications\libsum.a(compiler_builtins-9b744f6fddf5e719.compiler_builtins.20m0qzjq-cgu.117.rcgu.o):/cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.35/src/float/conv.rs:143: first defined here
collect2.exe: error: ld returned 1 exit status
scons: *** [rtthread.elf] Error 1
scons: building terminated because of errors.
4.Modify rtconfig.py
file, add the link parameter
--allow-multiple-definition
:
DEVICE = ' -march=armv7-a -marm -msoft-float'
CFLAGS = DEVICE + ' -Wall'
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__ -I.'
LINK_SCRIPT = 'link.lds'
LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors,--allow-multiple-definition'+\
' -T %s' % LINK_SCRIPT
CPATH = ''
LPATH = ''
5.Compile and run QEMU:
LiuKang@DESKTOP-538H6DE D:\repo\github\rt-thread\bsp\qemu-vexpress-a9
$ scons -j6
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: warning: you do not seem to have the pywin32 extensions installed;
parallel (-j) builds may not work reliably with open Python files.
File "D:\software\env_released_1.2.0\env\tools\Python27\Scripts\scons.py", line 204, in
scons: Building targets ...
scons: building associated VariantDir targets: build
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf rtthread.bin
arm-none-eabi-size rtthread.elf
text data bss dec hex filename
628756 2148 86700 717604 af324 rtthread.elf
scons: done building targets.
LiuKang@DESKTOP-538H6DE D:\repo\github\rt-thread\bsp\qemu-vexpress-a9
$ qemu.bat
WARNING: Image format was not specified for 'sd.bin' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
\ | /
- RT - Thread Operating System
/ | \ 4.0.4 build Jul 28 2021
2006 - 2021 Copyright by rt-thread team
lwIP-2.1.2 initialized!
[I/sal.skt] Socket Abstraction Layer initialize success.
[I/SDIO] SD card capacity 65536 KB.
[I/SDIO] switching card to high speed failed!
call rust sum(1, 2) = 3
call rust subtract(2, 1) = 1
call rust multiply(2, 2) = 4
call rust divide(4, 2) = 2
// The imported rt-thread functions list
extern "C" {
pub fn rt_kprintf(format: *const u8, ...);
}
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
unsafe {
rt_kprintf(b"this is from rust\n" as *const u8);
}
a + b
}
cargo build --target=armv7a-none-eabi --release --verbose
Compiling rust_to_c v0.1.0 (C:\Users\LiuKang\Desktop\RUST\rust_to_c)
Running `rustc --crate-name sum --edition=2018 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type staticlib --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=a
0723fa112c78339 -C extra-filename=-a0723fa112c78339 --out-dir C:\Users\LiuKang\Desktop\RUST\rust_to_c\target\armv7a-none-eabi\release\deps --target armv7a-none-eabi -L dependency=C:\Users\LiuKang\Desktop\RUS
T\rust_to_c\target\armv7a-none-eabi\release\deps -L dependency=C:\Users\LiuKang\Desktop\RUST\rust_to_c\target\release\deps`
Finished release [optimized] target(s) in 0.11s
Copy the library files generated by rust into the application directory.
LiuKang@DESKTOP-538H6DE D:\repo\github\rt-thread\bsp\qemu-vexpress-a9
$ scons -j6
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: warning: you do not seem to have the pywin32 extensions installed;
parallel (-j) builds may not work reliably with open Python files.
File "D:\software\env_released_1.2.0\env\tools\Python27\Scripts\scons.py", line 204, in
scons: Building targets ...
scons: building associated VariantDir targets: build
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf rtthread.bin
arm-none-eabi-size rtthread.elf
text data bss dec hex filename
628812 2148 90796 721756 b035c rtthread.elf
scons: done building targets.
LiuKang@DESKTOP-538H6DE D:\repo\github\rt-thread\bsp\qemu-vexpress-a9
$ qemu.bat
WARNING: Image format was not specified for 'sd.bin' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
\ | /
- RT - Thread Operating System
/ | \ 4.0.4 build Jul 28 2021
2006 - 2021 Copyright by rt-thread team
lwIP-2.1.2 initialized!
[I/sal.skt] Socket Abstraction Layer initialize success.
[I/SDIO] SD card capacity 65536 KB.
[I/SDIO] switching card to high speed failed!
this is from rust
call rust sum(1, 2) = 3
call rust subtract(2, 1) = 1
call rust multiply(2, 2) = 4
call rust divide(4, 2) = 2
msh />
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread Smart Open Source Micro-Kernel Operating System was released last September by RT-Thread Open Source Team. RT-Thread Smart(Aka RT-Smart) is aimed primarily at mid-to-high-end processors with MMU(Memory Management Unit), providing a more competitive operating system-based software platform to benefit the industries in Security( such as IPC Camera), Gateway, Industrial Control, On-board Device, Consumer Electronics and so on.
We’re making the introduction of RT-Thread Smart into several articles intend to give a detailed explanation of RT-Thread Smart from a different perspective, so follow us to make sure you’re in the loop to be updated about new knowledge. Today, let’s get started with RT-Thread Smart Application Programming on Raspberry Pi.
Raspberry Pi is the first hardware platform officially supported by RT-Smart, many reasons for choosing the Raspberry Pi to best fit MicroKernel System. First of all, well-known fact that Raspberry Pi is the most popular ARM Cortex-A hardware dev board, extensively used in innovative applications, playing a significant role in college education and many other industries. Second, since the release of the Raspberry Pi 4B, the kernel has also become more standardized (Raspberry Pi 4B carrying the standard GIC interrupt controller, wired Ethernet port (vs Raspberry Pi3 needs USB switch to wired Ethernet), from which porting rt-smart to other A-Series processors will also be a good reference.
It’s easy to run RT-Smart on Raspberry Pi. First of all, download the RT-Smart code, it carries Raspberry Pi 4B corresponding porting code and some user-space applications.
There are several ways to write a program on RT-Smart: the traditional RT-Thread scons build method, the Linux-like approach, this article will lead you with Makefile and CMake approach. Get you to a❀ Fancy Hello World program.
Because RT-Thread is natively built with scons, so we’re going to write an application built with scons, it will call RT-Thread’s APIs to create a thread and output “hello world!”
1 #include
2
3void thread_entry(void* parameter)
4{
5 rt_kprintf("hello world\n");
6}
7
8int main(int argc, char** argv)
9{
10 rt_thread_t tid;
11 tid = rt_thread_create("hello", thread_entry, RT_NULL,
12 1024, 20, 20);
13 if (tid)
14 {
15 rt_thread_startup(tid);
16 }
17 rt_thread_mdelay(100);
18
19 return 0;
20}
The corresponding compilation script consists of two, one is a Scanscript and the other is a SContruct.
1import os
2import sys
3
4# UROOT_DIR points to the userapps folder in rt-smart sdk
5UROOT_DIR = os.path.join('..', '..')
6
7# Add the directory of the building.py to the system search path
8sys.path = sys.path + [os.path.join(UROOT_DIR, '..', 'tools')]
9from building import *
10
11# Compile an application
12BuildApplication('scons', 'SConscript', usr_root = UROOT_DIR)
1from building import *
2
3cwd = GetCurrentDir()
4src = Glob('*.c') + Glob('*.cpp')
5CPPPATH = [cwd]
6
7CPPDEFINES = ['HAVE_CCONFIG_H']
8group = DefineGroup('scons', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
9
10Return('group')
1~/workspace/rtthread-smart/userapps/examples/scons$ scons
2scons: Reading SConscript files ...
3scons: done reading SConscript files.
4scons: Building targets ...
5scons: building associated VariantDir targets: build/scons
6CC build/scons/main.o
7LINK scons.elf
8scons: done building targets.
We also give an example of C++ version by using the Makefile method.
1#include
2#include
3
4extern "C" {
5
6int main(int argc, char** argv)
7{
8 int index = 0;
9 std::vector a;
10 for (index = 0; index < 5; index ++)
11 {
12 a.push_back(index);
13 }
14
15 for (std::vector::iterator it=a.begin(); it != a.end(); it++)
16 std::cout << "hello world, index = " << *it << std::endl;
17 return 0;
18}
19
20}
1# Set up a cross tool chain
2CROSS_COMPILE= arm-linux-musleabi-
3CC= $(CROSS_COMPILE)gcc
4CXX= $(CROSS_COMPILE)g++
5
6# Get the current directory
7PWD := $(shell pwd)
8
9# UROOT_DIR points to the userapps folder in rt-smart sdk
10UROOT_DIR := $(PWD)/../..
11RT_DIR=$(UROOT_DIR)/sdk/rt-thread
12INC_DIR=$(UROOT_DIR)/sdk/include
13LIB_DIR=${UROOT_DIR}/sdk/lib
14
15# Compilation and link parameters
16CFLAGS= -march=armv7-a -marm -msoft-float -D__RTTHREAD__ -Wall -O0 -g -gdwarf-2 -n --static
17CFLAGS+= -I. -I$(RT_DIR)/include -I$(RT_DIR)/components/dfs -I$(RT_DIR)/components/drivers -I$(RT_DIR)/components/finsh -I$(RT_DIR)/components/net -I${INC_DIR}
18
19LDFLAGS= -march=armv7-a -marm -msoft-float -T ${UROOT_DIR}/linker_scripts/arm/cortex-a/link.lds
20LDFLAGS+= -L$(RT_DIR)/lib -L$(LIB_DIR) -Wl,--whole-archive -lrtthread -Wl,--no-whole-archive -n --static -Wl,--start-group -lrtthread -Wl,--end-group
21
22default:
23 $(CXX) $(CFLAGS) -c main.cpp -o main.o
24 $(CXX) $(LDFLAGS) main.o -o main.elf
25
26clean:
27 @rm *.o *.elf
28
29.PHONY: default clean
Generate an executable makefile.elf file by executing a make in the directory. **
We’ll write the pthread multithreaded version of hello world in the form of pthreads: output “hello world” in a POSIX thread.
POSIX thread version of the main .c code list
1#include
2#include
3
4void *pthread_entry(void* parameter)
5{
6 printf("hello world\n");
7 return NULL;
8}
9
10int main(int argc, char** argv)
11{
12 int ret;
13 void *value;
14 pthread_t pth;
15
16 /* Create a pthread thread to execute hello output*/
17 ret = pthread_create(&pth, NULL, pthread_entry, NULL);
18 printf("ret = %d\n", ret);
19
20 /* Waitting to end */
21 pthread_join(pth, &value);
22
23 return 0;
24}
The corresponding CMakeLists .txt file checklist
1cmake_minimum_required(VERSION 3.5)
2
3project(cmake)
4
5## system configuration
6enable_language(C ASM)
7
8set(CMAKE_SYSTEM_NAME Generic)
9set(CMAKE_SYSTEM_PROCESSOR arm)
10
11if(NOT DEFINED ENV{RTT_EXEC_PATH})
12 message(FATAL_ERROR "not defined environment variable: RTT_EXEC_PATH")
13 message(FATAL_ERROR "Please execute the command: $ source smart_env.sh")
14endif()
15
16set(CONFIG_PREFIX "$ENV{RTT_EXEC_PATH}/arm-linux-musleabi-")
17# UROOT_DIR points to the userapps folder in rt-smart sdk
18set(UROOT_DIR "${PROJECT_SOURCE_DIR}/../..")
19
20set(CMAKE_C_COMPILER "${CONFIG_PREFIX}gcc")
21set(CMAKE_CXX_COMPILER "${CONFIG_PREFIX}g++")
22set(CMAKE_ASM_COMPILER "${CONFIG_PREFIX}gcc")
23set(CMAKE_OBJCOPY "${CONFIG_PREFIX}objcopy")
24set(CMAKE_C_AR "${CONFIG_PREFIX}ar")
25set(CMAKE_SIZE "${CONFIG_PREFIX}size")
26
27set(SDK_DIR "${UROOT_DIR}/sdk")
28set(LINK_SCRIPTS_DIR "${UROOT_DIR}/linker_scripts/arm/cortex-a")
29
30set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -marm -msoft-float -Werror -Wall -O0 -g -gdwarf-2 -n --static")
31set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv7-a -marm -msoft-float -x assembler-with-cpp -O0 -g")
32set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -marm -msoft-float -Werror -Wall -Woverloaded-virtual -fno-exceptions -fno-rtti -O0 -g -gdwarf-2 -n --static")
33
34set(SDK_INC
35 "${UROOT_DIR}/include"
36 "${UROOT_DIR}/rt-thread/include"
37 "${UROOT_DIR}/rt-thread/components/dfs"
38 "${UROOT_DIR}/rt-thread/components/drivers"
39 "${UROOT_DIR}/rt-thread/components/finsh"
40 "${UROOT_DIR}/rt-thread/components/net"
41)
42
43# Set the location of the link script
44set(CMAKE_EXE_LINKER_FLAGS "-T ${LINK_SCRIPTS_DIR}/link.lds -static")
45
46## user configuration
47set(APPS_INC
48 "${PROJECT_SOURCE_DIR}"
49 "${SDK_INC}"
50)
51
52set(APPS_SRC
53 "${PROJECT_SOURCE_DIR}/main.c"
54)
55
56set(CMAKE_EXECUTABLE_SUFFIX ".elf")
57
58add_executable(${PROJECT_NAME} ${SDK_SRC} ${APPS_SRC})
59target_include_directories(${PROJECT_NAME} PRIVATE ${APPS_INC})
Create a build folder in this directory
1~/workspace/rtthread-smart/userapps/examples/cmake/build$ cmake ..
2-- The C compiler identification is GNU 7.5.0
3-- The CXX compiler identification is GNU 7.5.0
4-- Check for working C compiler: /usr/bin/cc
5-- Check for working C compiler: /usr/bin/cc -- works
6-- Detecting C compiler ABI info
7-- Detecting C compiler ABI info - done
8-- Detecting C compile features
9-- Detecting C compile features - done
10-- Check for working CXX compiler: /usr/bin/c++
11-- Check for working CXX compiler: /usr/bin/c++ -- works
12-- Detecting CXX compiler ABI info
13-- Detecting CXX compiler ABI info - done
14-- Detecting CXX compile features
15-- Detecting CXX compile features - done
16-- The ASM compiler identification is GNU
17-- Found assembler: /usr/bin/cc
18-- Configuring done
19-- Generating done
20-- Build files have been written to: ~/workspace/rtthread-smart/userapps/examples/cmake/build
Generate the Makefile file and compile it via make.
1~/workspace/rtthread-smart/userapps/examples/cmake/build$ make
2[ 50%] Building C object CMakeFiles/cmake.dir/main.c.o
3[100%] Linking C executable cmake.elf
4[100%] Built target cmake
Place the above three compiled applications on the Raspberry Pi’s SD card. We can use the card reader to copy the application to the SD card on the PC. Then plug it back into the Raspberry Pi and power it back on. Show Time:
1 \ | /
2- RT - Thread Smart Operating System
3 / | \ 5.0.0 build May 4 2021
4 2006 - 2020 Copyright by rt-thread team
5lwIP-2.1.2 initialized!
6[I/sal.skt] Socket Abstraction Layer initialize success.
7file system initialization done!
8msh /> cd bin
9msh /bin> scons.elf
10msh /bin> hello world!
The program is executed and can output hello world!
From the above three examples, we can find out some new trending in RT-Smart:
1. In the user-space is running the RT-Thread traditional API: RT-Thread multi-thread, all the schedule that based with Priority Preemption can be used;
2. Support the C++ to write the application, as well as stdc++ library;
3. Support the pthreads in the form of POSIX thread mode to execute, which will be mapped and executed in RT-Thread multithread.
Get Example Codes
https://gitee.com/rtthread/rt-smart-notes/tree/master/examples
Get RT-Smart Source Code
https://github.com/RT-Thread/rt-thread/tree/rt-smart
Any questions while using RT-Smart, feel free to share on RT-Thread Club!
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Image by : Opensource.com
I was once asked why computers are called "computers" when they do so much more than compute numbers. A modern PC browses the internet, plays audio and video, generates beautiful graphics for video games and movies, simulates and predicts complex weather patterns and epidemiological risks, brings architectural and engineering blueprints to life, and much more.
The reason computers can do all of this because all these problems can be expressed as numerical equations, and the computer's CPU—its central processing unit—is actually little more than a simple calculator.
To get a CPU to send signals to a hard drive to write data or to a monitor to show an image, it must receive instructions. These instructions come in the form of "code," which is a terse way of saying someone must write a program that "speaks" the same language as the CPU. A CPU understands machine language, a mostly incomprehensible array of bits that most humans don't bother writing out manually. Instead, we use programming languages like C, C++, Java, Python, and so on. These languages are parsed and compiled into machine language, which is delivered to the CPU.
If you try to instruct a CPU in a language it doesn't understand, the CPU won't know what to do. You can experience the rather unspectacular results of such an attempt at miscommunication by trying to boot a Raspberry Pi from an x86_64 RHEL image. It would be nice if it could work, but it doesn't.
The RT-Thread project offers an open source operating system (OS) for embedded-systems programmers. The embedded space is extremely diverse, with lots of Internet of Things (IoT), custom industrial, and hobbyist devices. RT-Thread's goal is to make embedded programming easy for everyone, regardless of what device you're using. Sometimes, that means porting an OS to a new architecture, whether for a chip of the same architecture but with slightly different instruction sets or new architectures altogether.
Approaching this problem can be a little intimidating at first—you may not know where or how to start. This article collects the lessons RT-Thread maintainers learned as we ported RTOS to new chip architectures.
Here's a high-level view of a seemingly insurmountable process. This could differ for your project, but conceptually this is relatively universal, even if some of the specifics are different:
For most advanced architectures, the OS and user applications run at different privilege levels. This prevents malfunctioning code from affecting the OS's integration and safety. For example, in the ARMv7-A architecture, the OS usually runs in the System mode, while in ARMv8-A, an OS can run at the EL2 or EL3 privilege level.
Usually, a chip executes bootup code at the highest privilege level when it's powered on. After that, though, the OS switches the privilege level to its target mode.
The key action in this step is to set the block starting symbol (.bss) section to zero and set up the stack pointers.
In C-language implementations, the uninitialized global variables and static variables are usually stored in the .bss section, which doesn't occupy any space in the storage device. When the program is loaded, the corresponding space is allocated in memory and initialized to zero. When the OS boots up, it has to do this work by itself.
On the other hand, the OS has to initialize the stack space and set up the stack pointer. Since C-language programs save and restore local variables on the stack when entering and exiting a function, the stack pointer must be set before invoking any C functions. RT-Thread has to do this step for each newly created thread.
RT-Thread outputs information and logs through the serial port, which also helps debug the code during the transplantation process. At this stage, receiving data over serial ports is not required. We knew we were on the right track when we first saw our friendly, familiar RT-Thread logo over the serial port!
The context of a task is its whole execution environment, which contains generic registers, the program counter, the location of the stack frame, and so on. When a new thread is created, RT-Thread has to allocate and set up its context manually so that the scheduler can switch to the new thread, as it does with others.
There are three things to pay attention to:
Generally, you want to enter the main function and the msh console normally. However, input control can't be achieved at this stage because serial input interrupts are not implemented. When serial interrupts are implemented, msh inputs can be made.
RT-Thread requires a timer to generate interrupts periodically; this is used to count the ticks that elapse since the system startup. The tick number is used to provide software interrupt functions and instruct the kernel when to start scheduling a task.
Setting the value of a time slice can be a tricky business. It's usually 10ms to 1ms. If you choose a small time slice on a slow CPU, most of the time is spent on task switching—to the detriment of getting anything else done.
In this step, we interacted with RT-Thread msh over the serial port. We sent commands, pressed Enter, and watched as msh executed the command and displayed the results.
This process is usually not difficult to implement. A word of warning, though: Don't forget to clear the interrupt flag on some platforms after the serial port interrupt is handled.
Once the serial port works correctly, the porting process is essentially done!
To port your project to different chip architectures, you need to be very clear about the architecture of the chip you're targeting. Get familiar with the underlying code in the most critical points of your project. By cross-referencing the chip's manual combined with a lot of practical working experience, you'll learn the chip privilege mode, register, and compilation method.
If you don't have a project you need to port to a new chip, please join us; the RT-Thread project can always use help porting RTOS to new chips! As an open source project, RT-Thread is changing the landscape of open source embedded programming. Please introduce yourself and ask for help at RT-Thread Club!
Source: Alan Smithee
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
It's generally known that the hands writing Robots can not catch up with the printer in the actual production line because it lacks efficiency so it hasn't applied in many different industry scenarios. However, for beginners who want to learn Robots and may look to create one by themselves, hands writing robots is a good start as it has a simple structure and in line with human handwriting habits. The design of this writing robot includes path planning, line interpolation, acceleration and deceleration control, and other common-used motor motion control algorithms. Software part, DXF file resolution, openCV image processing, and other G code generation tools are taken in this project. Build a good foundation for a further in-depth study of laser cutters, engraving machines, 3D printers, and other large-scale equipment. My tutorial will share my experience of creating this project. I hope this helps you in some way.
Hardware:ART-PI、arduino、TM4C123GXL
RT-Thread Inside:v3.14
Development Tool:MDK-ARM5.31、VSCode
Kernel: Thread Scheduling、Resource Allocation、Synchronous Communication、Device-driven Frameworks.
Components: DFS File System、UART Serial Asynchronous Communication、CAN Communication.
Others: UDP Communication、cJSON Codec
The image processing module is responsible for pre-processing image files such as text images and photographs, removing clutter, and then decoding the image with appropriate algorithms, de-emerging the main information, and then extracting the outline skeleton to fit the machine writing.
The motion control module is one of the most complex modules in a writing robot, responsible for the precise and fast movement of each motion body. After receiving the G-code instruction, it is required to combine all the instruction information received for generating an appropriate initial speed and the maximum running speed of the current instruction, proceed with the linear interpolation according to the motion trajectory, and finally send pulses to the motor according to the SPTA trapezoidal acceleration and deceleration algorithm.
The G-code generation module serializes the image outline and then plans the path, selects a suitable machining precision, and then generates the NC processing file according to the G code specification that commonly used in CNC machining. In addition, for standard DXF files, G code is generated by file resolution.
grbl is a high-performance, low-cost open-source CNC controller that delivers high-speed, precise motor control pulses based on the ATmega 328 chip. It accepts standards-compliant g-code, and includes full acceleration management with look ahead, to deliver smooth acceleration and jerk-free turning action.
As grbl includes full acceleration management with look ahead. That means the grbl controller needs to maintain 16-20 G code instructions. This requires ART-PI to send G-code instructions in a timely manner by reading the grbl controller buffer state to avoid buffer overflows and buffer emptying.
Therefore, RT-Thread real-time operating system is indeed for this project. By reading the NC file on the SD card, and communicate with the grbl controller, to control the devices running smoothly. In addition, RT-Thread has a wealth of human-computer interaction features so you may real-time display the device work path, progress and status on the screen, and may also add the features of resume breakpoint and many others.
https://gitee.com/qiao_cg/grbl
Check out Video.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RedClock simultaneously displays time and weather icons on ink screen (time information is obtained through ntp, weather information is obtained from the Weather Report via js language, wired and wireless wifi network connection is supported). One button can switch into Pomodoro Technique, the Pomodoro Technique defaults 25 minutes as a period, when it comes to 25 minutes, the screen will be triggered to prompt a message (Pomodoro turns red color). Meanwhile, the RedClock reserves the patch buzzer device pad and supports beep alarm (can be associated with multiple alarm events, for example, temperature, air pressure, and many other events that exceed threshold). It can also obtain temperature and air pressure information via external air pressure sensor LPS22HH (ST barometer) and periodically display it through ink screen. Time, weather, temperature, and air pressure information also supports simultaneous display on the device IP when there is network access to ART-Pi.
For the first time to create an ink screen, I’m thinking of adding the Pomodoro Technique to the traditional WIFI clock, making it more powerful instead of providing time and weather information only, and looking for a way to help people increase productivity and become your best, most productive self at work. when using the RedClock.
My RedClock is now supported to implement:
Hardware: ART-Pi 、LPS22HH、SSD1619
RT-Thread inside: V4.0.3
Development Tool:
Hardware Development Tool:Kicad(RedClock Expansion Board Development Tool)
The open-source RT-Thread real-time operating system is taken into this project.
Mutex、Semaphore、mempool、device
cJSON、EasyFlash、webnet
lps22hb(sensor)
Bus Interface: I2C(Sensor)、SPI(Ink Screen)
I recorded all the stuff into documents and would like to share it with you all.
1: Create the burning environment of Linux+openocd+gdb
2: RedClock Expansion Board Design
3: RedClock Web Interface Development
4: RedClock air pressure sensor development
5: RedClock ink screen display design
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Smart irrigation systems are a combination of sensors and controllers which monitor the watering, moisture related content temperature and climate and there by watering the crops as per requirement. In this project I am using a soil moisture sensor to detect the moisture of the soil. There are two types of soil moisture sensor.
Resistive soil moisture sensor Capacitive soil moisture sensor Both the soil moisture sensor works on the principle of electrical conductivity. Resistive soil moisture sensor works with change in resistance between the two leads of the sensor where as capacitive soil moisture sensor has only one lead which works with respect to the change in dielectric property of the soil.
In this project I am using a resistive soil moisture sensor. When the soil moisture sensor detects the change in electrical conductivity it sends data to the controller then with respect to the sensor data the controller switches ON the water pump or switches OFF the water pump. When the water pump is ON led green light is ON, When the water pump is switched OFF the red led is OFF. Thereby the green and red led show the status of the water pump is whether ON or OFF respectively.
Threads are used to run tasks concurrently; I have used 3 threads for this project one to monitor the sensor data simultaneously and thread two to turn ON the water pump and green led if the sensor didn’t find any moisture and the thread 3 turns OFF the water pump and turns ON the red led.
The sensor collects data all the time.
All the process happens concurrently so no delay occurs unless manual delay which were made on intention Multiple sensors can be added in future. My Experience in RT-Thread I am using RT-thread for this project. I am new to RT-thread this is my 1st project in RT-Thread I used RT-Thread studio for this project it is user friendly and free tool so I will be using it for my future projects. I also used the thread function which helped me achieve concurrency. I got help from RT-Thread Club and some direct help from the people from RT-Thread. They were so friendly that they helped me at various stages of the project. My special thanks to the members from RT-Thread for helping me to complete this project.
Have a look at their website to get started.
The Controller used in this project is STM32 F411-RE which has ARM CORTEX – M4 as the CPU with 512kb of flash memory and 32 kHz internal clock
The OS used for this project is RT-Thread RTOS
The program is written in c the only work of the main function is to activate the three threads.
1. GREEN LED P(A, 5)
2. RED LED P(A, 6)
3. Soil Moisture Sensor P(C, 0)
4. Water Pump P(A, 10)
You can find the git-hub link to the source code in the description of the youtube video.
Source: Varun Pandithurai
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
This tutorial documented the steps of creating an Oscilloscope.
Voltage: 0-3.3V,
Frequency: 1Hz-10kHz
3 Sampling Modes: auto, normal and single time
2 Trigger Modes: rising edge and falling edge
Hardware:stm32f103, 3.2 inch ILI9341 LCD display
RT-Thread:v3.0.3
IDE:MDK v5.26
Kernel: Scheduler, Semaphore, Message Queue.
Scheduler: Create multiple threads for different purposes.
Semaphore: Used to synchronize threads.
Message Queue: Used to transfer the data between threads.
The signal of the waveform generator acquired by the ADC processed on the stm32f103 chip and being displayed on the 3.2-inch ILI9341 LCD screen.
Wave sampling thread, determine the sampling frequency based on the time represented by each grid of the settings screen, and determine the sampling start point according to the trigger threshold and trigger mode, then sampling the waveform and save it.
Waveform display thread; Waveforms are displayed according to the area of the screen.
Key scan thread; Read the key values for conversion and send them to the setting thread.
Set the action to execute the thread, perform the settings item modification operation, and refresh the display information.
Read the key scan thread and convert the settings information to the settings thread to change the settings and display the refreshed information.
Used to communicate between the waveform sampling thread and the waveform display thread to ensure that the sampling waveform is displayed in a timely manner.
Used to communicate between setting threads and key scan threads to ensure that key signals are read in a timely manner while avoiding excessive resource consumption by key scan threads.
https://gitee.com/zhan-min/oscilloscope.git
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Hi RT-Thread Community. Here we are in 2021. Take a review of what’s happening in the first month of 2021 in the RT-Thread community.
Same as usual, let’s start with the code contribution.
The statistics are fetched from merged PR on the Github master code branch.
We want to acknowledge and thank the following community members for their contributions to RT-Thread in January. They are:
Michael0066、hyhkjiy、xys20071111、mysterywolf、Forest-Rain、greedyhao、PYGC、fmkong、redocCheng 、Trisuborn、tmmdh、CraztTnspt、Jedcheen、xiaofengvskuye、xinyigao、DavidLin1577、iysheng、liuanlin-mx、Hxinrong 、shuobatian 、chengy4、Rice_Chen, Bluetrum Tech、Nuvoton Tech、NXP、HuaDa Semiconductor.
Thanks to all contributors who share their time, energy, and talent to help RT-Thread. Thank you very much!
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread is an open-source embedded real-time operating system (RTOS) that provides a wide range of components and 290+ software packages for the Internet of Things (IoT). RT-Thread MicroPython IDE is built by the RT-Thread team to provide a powerful development environment for MicroPython developers.
Take a quick look at the introduction of RT-Thread MicroPython IDE
Download and install RT-Thread Micropython IDE:
Create a MicroPython project:
Create a New MicroPython project:
Create a blank MicroPython Project:
Enter the project name:
Select the path to save the project:
Project successfully created.
Connect to the device:
Choose Pico Com Port:
Run the python file on PICO board:
You can also right-click to get it run:
Here you can obtain more MicroPython samples:
Check out the Tutorial Video
Any questions during the development, feel free to reach us at RT-Thread Club.
You are also very welcome to contribute any of your knowledge to the RT-Thread OpenSource Community. Let opensource project benefits more people!
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Raspberry Pi PICO is now available in RT-Thread Studio IDE! Looking to make Raspberry Pico development simple and all in one-stop.
RT-Thread is an open-source embedded real-time operating system (RTOS) that provides a wide range of components and 290+ software packages for the Internet of Things (IoT). RT-Thread Studio IDE is built by the RT-Thread team and it takes full advantage of RT-Thread software packages and a wide range of components resources. All of this offers a way for developers to simplify the complexity of software development.
Walk through this tutorial get started with Raspberry Pi PICO in RT-Thread IDE.
Click SDK Manager:
Download PICO BSP(Board Supported Package). Select v1.0.3.
Create RT-Thread project:
Select PICO
Click Finish, successfully created project.
Click build to compile the project:
Press the BOOTSEL in the board, plug in the USB cable and serial cable:
Open Serial Terminal Assistant in Studio:
Open the rtthread-pico.uf2 belonging category:
Download uf2 to PICO board:
Successfully downloaded, we’ll see the LED is flashing.
Communicate with PICO by Studio Serial Tool.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
For 12-bit resolution, time control accuracy (i.e., time resolution) is:
The stretching range with 4.88us time resolution that can be divided into nearly 410 parts.
Time stretching range 2000us corresponds to the steering range of 0 to 180 degrees, so the angle resolution of the rudder is about 0.439 degrees.
What does the chip look like?
Pin functionality.
I2C address.
Address pins consist of A0 to A5, up to 64 addresses. There are 62 addresses available because the chip itself retains the All Call 7-bit address 0xE0 and the Software Reset 7-bit address 0x06.
By default (i.e., A0 to A5 all grounded), its 7-bit address is 0x40.
The target register.
MODE1 register, address 0x00, it is readable and writeable.
MODE2 register, address 0x01, it is readable and writeable.
Each PWM has four 8-bit control registers, the addresses please check the datasheet, the register is readable and writeable.
These four 8-bit registers are stated in the manual as two 12-bit registers. The two 12-bit registers separately control the high and low hours of the output, with a maximum value of 4095.
Let’s take a further look at what these two 12-bit registers mean according to the following Example 1, If starting to set the bits to 1 from the Xth bit each cycle, X should be written into the LEDx_ON register. if starting to clear the bits to 0 from the Xth bit each cycle, X should be written into the LEDx_OFF register.
The four examples in the following image represent the relationship between the settings and the output of these two 12-bit registers in general.
The four examples in the figure below represent the output in the case of ON register value < OFF register value.
The four examples in the figure below represent the output in the case of ON register value > OFF register value.
PWM frequency sets register as PRE_SCALE, address 0xFE, it is readable and writeable.
The chip has a built-in 25MHz oscillator, the frequency value of update_rate is in Hz. Therefore, for PWM at 50Hz, this register should be set to 121.
The hardware connection is shown as above, where we use the most common PCA9658 rudder control module, connected to a logic analyzer for viewing the data.
The first communication contents are shown below:
Look at the marked yellow box above, “Write 00 to address 40” means to write data 0 to the address of the register with the device address of 0 and the address of 40.
Correspondingly, the marked blue box could be interpreted as read the register value for the device address of 40 and the address of 0, the data value in the device sends back 0 to the target register.
Check out the code below to find out about its communication, as shown follows:
According to the datasheet of PCA9685, we get to know that SLEEP mode should be enabled first when setting the PWM output frequency. The process to restart from SLEEP mode is specified in datasheet.
In RT-Thread’s PCA9685 component package, the set frequency-related operation is encapsulated in the function pca9685_set_pwm_freq().
By analyzing the code, we could found that the RT-Thread driver component package for the PCA9685, inherits the spirit of RT-Thread opensource operating system tiny and elegant features and encapsulates the functions according to the datasheet of the PCA9685, making it much easier for developers to quickly master the knowledge of the PCA9685.
Get your first-hand experience with RT-Thread PCA9685 component.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Definition: RT-Thread software packages run on the RT-Thread IoT operating system. Different categories of packages were created for different application areas, each of which consists of the description information, source code or library files.
Before making a software package, its functionality requires to be defined accurately, to ensure that it does not couple closely with the code that related to the product business logic, in order to improve the versatility of the package.
The package should contain:
For example, the hello software package contains:
Before making a package, you’ll need to read the sample package documentation and check the folder structure of the sample package.
The software package and its documents should contain:
Package index: the package description files that are stored under the env\packages folder. Take the 'env\packages\packages\iot\pahomqtt folder as an example, it contains:
We can make package index files by using Env’s package index generation wizard feature. Type the command pkgs --wizard, shown as follows:
The generated contents are shown as follows:
Note that the ‘SConscript’ file is only used when packing the source code by moving it to the package source folder. It doesn’t have to exist in the index folder after the packing process.
{
"name" : "pahomqtt",
"description" : "a pahomqtt package for rt-thread", # Package Description Info
"keywords" : [
"pahomqtt"
],
"site" : [
{
"version" : "v1.0.0",
"URL" : "https://pahomqtt-1.0.0.zip", # Modify the download address of the compressed package based on its version number.
"filename" : "pahomqtt-1.0.0.zip",
"VER_SHA" : "fill in the git version SHA value" # The compressed package form does not need to be filled in.
},
{
"version" : "latest", # latest verison
"URL" : "https://xxxxx.git", # Fill in the Git address
"filename" : "Null for git package",
"VER_SHA" : "fill in latest version branch name,such as mater" # Fill in SHA or the branch name.
}
]
}
There are two types of ‘URL’ values in a file that can be filled in for each version:
Package.json is a description file for the software package, which contains the package name, package description, author, and the required download link for source code. Note, a description of the applied license must be included, such as GPLv2, LGPLv 2.1, MIT, Apache license v2.0, BSD, etc.
The modified package.json is as follows:
{
"name" : "pahomqtt",
"description" : "Eclipse Paho MQTT C/C++ client for Embedded platforms", # Update the description info.
"keywords" : [
"pahomqtt"
],
"site" : [
{
"version" : "v1.0.0", # v1.0.0
"URL" : "https://github.com/RT-Thread-packages/paho-mqtt.git", # update git address
"filename" : "paho-mqtt-1.0.0.zip",
"VER_SHA" : "cff7e82e3a7b33e100106d34d1d6c82e7862e6ab" # Enter the specified SHA value.
},
{
"version" : "latest", # latest version
"URL" : "https://github.com/RT-Thread-packages/paho-mqtt.git",
"filename" : "paho-mqtt.zip",
"VER_SHA" : "master" # Enter master
}
]
}
The content of Kconfig is as follows:
The Kconfig files in the package index are primarily used by the menuconfig command, and some of the options for the package must be defined, here are notes that you need to pay attention to:
Packages could be uploaded to git or other downloadable sites. It’s recommended to save them as git repositories, which is convenient to update software packages.
Reference: RT-Thread Package Repository
Finally, the package index files need to be pushed through the PR process to the RT-Thread package repository: https://github.com/RT-Thread/packages.
Click HERE to learn how to submit a PR.
Env can download packages from multiple package sources, and the list of packages for each source is stored in env\packages folder. For example, the RT-Thread official package list is stored under the env\packages\packages folder.
The following procedures are required before the release of a new version of the package:
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The existing and newly built five-star power supply station has installed a lot of smart devices, such as photovoltaic energy storage, central air conditioning, smart lighting, smart curtains, access control systems, and so on. Each sub-system interface is different, and there is no unified interface or platform, this project is going to solve this problem, and also settle some specific problems, such as carrier communication, and leakage monitoring, and so on.
Main Control: STM32F767IGT6. External extension of 32-bit SDRAM. External interfaces include:
The above photo shows the most important task that responsible for refreshing the data displays on the screen, other acquisition tasks and data interaction tasks have their own semaphore, refresh task to get the semaphore waiting for 10MS, and then refresh the corresponding area.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The statistics are fetched from merged PR on the Github master code branch.
We want to acknowledge and thank the following community members for their contributions to RT-Thread in August. They are:
Thanks to all contributors who share their time, energy, and talent to help RT-Thread. Thank you very much!
Thanks to qiyongzhong0、Forest-Rain、majianjia、loogg、 MrMichael、JcZou、xqyjlj 、majianjia、mysterywolf 、ShineRoyal for contributing the software packages.
RT-Thread provides a package management platform where RT-Thread official or community developer-provided packages are stored. The platform offers developers a wide selection of reusable packages, which is an important part of the RT-Thread ecosystem. RT-Thread now has 241 software packages that are out-of-box.
Click here to view the officially available packages from RT-Thread, most of which have detailed documentation and usage examples.
Package tools, as part of Env, provide developers with management functions such as download, update, delete, and more.
Entering pkgs on the Env command line can see the introduction to the command:
> pkgs
usage: env.py package [-h] [--update] [--list] [--wizard] [--upgrade] [--printenv]
optional arguments:
-h, --help show this help message and exit
--update update packages, install or remove the packages as you set in menuconfig
--list list target packages
--wizard create a package with wizard
--upgrade update local packages list from git repo
--printenv print environmental variables to check
Before you can download and update a package, you need to open the package you want to operate in menuconfig.
These packages are located under the RT-Thread online packages menu, which you can see the package categories as below:
Select the package you need, save, and exit menuconfig. At this point, the package has been marked but has not been downloaded to the local, so it is not available.
Download: If the package has been selected locally, but not downloaded, enter: pkgs --update the package will be downloaded automatically;
Update: If the selected package has an update on the server-side and the version number selects the latest. Enter: pkgs --update, the package will be updated locally;
Delete: If you don’t need to use a package again, uncheck it in menuconfig before you execute: pkgs --update. Packages that have been downloaded locally but are not selected will be deleted.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
When designing an embedded RTOS system, we are looking for a simple and controllable system, so that we can have a clear mind when making a plan.
The essential characteristics of the embedded system are as follows:
These issues should be considered fully in the process of designing embedded products, so when implementing them, we should focus not only on the system-level but also on the demands of business logic.
From the perspective of embedded system architecture, it is necessary to conform to the principle of high cohesion and low coupling as developers often need to adapt the different peripherals and components during the embedded system development process. Different needs require different changes so that software architecture is needed for adapting different changes, an embedded system architecture designed by high cohesion and low coupling principle is more scalable and more stable.
For bare-metal development, system tailor means reducing or optimizing business logic in a poll operation.
For Linux, system tailoring is to remove unnecessary components or peripherals, as well as tools, to reduce unused system functions, even in the bootloader.
For RTOS, system tailoring can reduce unnecessary component initialization or IPC initialization by removing the functionality. For example, if the project only needs critical IPCs such as signals, mailboxes, then message queues and events do not have to be initialized. In this way, you can shrink the code size and remove unnecessary initialization processes. Besides, by reducing the size of firmware, the start-up time of the system is also shortened, which improves the efficiency of the whole system.
RT-Thread was born in 2006. It is an open-source, neutral, and community-based IoT OS.
RT-Thread is mainly written in C language, easy to understand, and supports quickly porting to a variety of mainstream MCUs and module chips. RT-Thread applies the object-oriented method to the real-time system design, which helps to build the system with elegant code, clear architecture, high modularization, and great tailorability.
RT-Thread has a Standard version and Nano version.
For resource-constrained microcontroller (MCU) systems, developers can tailor a Nano kernel that requires only 3KB Flash, 1.2KB RAM through the easy-to-use tools.
For resource-rich IoT devices, RT-Thread Standard version is recommended, which enables intuitive and fast modular tailoring through the online package management tools and system configuration tools, and the standard version can seamlessly import a wealth of software package, to achieve android-like graphical interface and touch sliding effects, smart voice interaction effects and other more complex functions.
The full version of RT-Thread has full functionality but accordingly, as the functionality increases, the resource footprint is also increasing, which is not very friendly for small resource platforms. But as RT-Thread has high tailorability, it is still easy to be used on the platforms with the small resource by tailoring the full version through the env tool provided by RT-Thread, which is shown in the following image:
The resources here refer to both hardware resources and software resources. Hardware resources are basically chosen at the time of design, and it gets finally determined after the reasonable planning and design of the software are done. It includes the allocation of relevant pins, power-up timing, operating rationality, as well as the requirements of power consumption, peripheral situation, pre-software development debugging, post-factory testing. Software developers take advantage of these specified hardware resources to complete the details of the software-level planning. A good hardware design makes the configured product more stable and reliable.
When running RT-Thread, we need to check the hardware’s ROM resources and RAM resources at the beginning of the design to evaluate whether the resources are reasonable to run an RTOS.
For example, the RT-Thread Nano version uses very little RAM and ROM. It needs only 1 KB RAM and 4KB ROM to support the semaphore and mailbox features, and run two threads (main thread + idle threads).
For applications that require a large amount of RAM and ROM, reasonable use of each resource is a good habit. First of all, let’s analyze the use and tailoring of RT-Thread memory.
Generally, there is a macro definition of the heap size in the board.h of the specific BSP:
1#define RT_HW_HEAP_BEGIN (void*)&__bss_end
2#define RT_HW_HEAP_END (void*)(RT_HW_HEAP_BEGIN + 64 * 1024 * 1024)
When designing the system, we need to evaluate the heap space required by the system. Memory management is allocated and released on the memory heap. For scenarios where memory resources are abundant in the chip, large heap space can be allocated for memory management, so that memory usage is more reasonable. For scenarios where memory resources in the chip are relatively limited, try not to use dynamic memory management, the static memory is more appropriate.
The heap space is generally used by allocating memory or creating threads and IPCs dynamically. If we create all the threads and IPCs and only use the static memory, the heap management mechanism could be removed. This is the typical situation in RT-Thread Nano.
The stack space allocation is determined according to the complexity of the tasks, for the complex tasks handled in a thread, and the function spent more local variables, as well as the function calling connection is more complex, then the thread needs to be allocated with large stack space, while the task in the thread is relatively simple and the local variables are less used, then the thread can be allocated with a smaller stack space.
The stack is used to store the context of a thread, the size of which must be specified when creating a thread:
Where the size of the stack is generally affected by the firmware function call depth and the required resources. Generally, the maximum value is given at the beginning of development.
If you want to reduce it, here are three methods:
Run the system for a while and adjust the stack space by the list_thread command.
In Microcontroller Development Kit (MDK), you can view the Static Call Graph for the image file to see the usage of the stack.
Calculate the depth of the largest stack by checking the Function calling connection file, as shown above.
Manual calculation
Evaluate the local variable and the call relationship in each function, which needs to be calculated manually. Manual calculations can only approximate the size of the stack because when calling a function, the parameter values of the function and the local variables are pressed into the stack space. To calculate the size of the current thread stack, you need to add up the parameters of the current thread function, the size of the local variables, and the parameters and local variable sizes of the called function. Therefore, we should select the maximum stack space required in the function execution branch as the minimum stack space that needs to be allocated in the thread.
RT-Thread is composited of is components and kernel. Let’s start with the kernel tailoring, which can be observed through the RT-Thread env tool:
Tailor according to the features or components commonly used in our system.
Choose different memory management strategies depending on the specific situation.
Console related configuration.
The components help us design specific business logic more efficiently.
These tailoring needs to be considered when designing your application.
By using RT-Thread in embedded systems, the complexity of system design would be significantly reduced when implementing up-level applications. However, to make RT-Thread small and efficient, developers have to configure and cut the system according to their needs. The RT-Thread projects are configured and built via the scons tool, which explores Kconfig and SConscripts files to decide how to construct the final products. So, it’s necessary to understand their syntax and principles for users to make the whole system extensible and scalable. Specific instructions about RT-Thread Env and scons, please refer to HERE.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread is an open-source embedded real-time operating system (RTOS) that provides a wide range of components and 200+ software packages for the Internet of Things (IoT).
Here are 7 tips to help you quickly start learning RT-Thread.
There is a documentation center on the RT-Thread official website , from which you can learn about RT-Thread online.
A good C language master is a basic skill, have development experience of common MCUs or other RTOSs can also benefit you to be quicker to get started RT-Thread.
To understand the RT-Thread principles in-depth requires a certain degree of data structure, operating system principles, object-oriented programming, and other knowledge.
RT-Thread provides a large number of BSPs(Board Support Package) for common development boards and chips. Find the corresponding BSP to get started directly, or find the similar one that you can also adjust it onto your board.
Also, RT-Thread self-developed a one-stop development tool: RT-Thread Studio IDE that can help you build the projects in seconds and keep you productive.
RT-Thread 3.1.0 version onwards follows the Apache License 2.0 open source license agreement. 3.1.0 version and its earlier versions follow the GPL V2 open source license agreement.
All the real-time operating system kernel and open source components can be used Free of Charge for Commercial Products.
Resource-constrained project can choose RT-Thread Nano that requires only 3KB Flash and 1.2KB RAM resources.
If you like something NEW and want to experience the latest features of RT-Thread, you can choose the Master version or 4.x.x Version.
If you have high requirements on stability and have the intention to put RT-Thread for commercial use, you are more recommended to choose 3.1.x version.
RT-Thread provides qemu-vexpress-a9 BSP(Board Support Package), which can be used without a hardware platform. Or you can use the Keil MDK simulator STM32F103 to start your RT-Thread learning journey.
You can ask for help on RT-Thread's Reddit Channel / Facebook Channel/ Twitter Channel. While asking questions, remember to provide as much information as possible about the relevant code screenshots, debug logs, and other related information.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The statistics are fetched from merged PR on the Github master code branch.
We want to acknowledge and thank the following community members for their contributions to RT-Thread in July. They are:
luhuadong、uselessboard、 ifreecoding 、 SantaPasserby 、guohp1128 、 LYH-ux、NU-LLadd 、 XYX12306、margguo、 DavidLin1577 、xfwangqiang 、zhiweih、liuduanfei 、mysterywolf、 sgf201 、 iysheng and Nuvoton Technology Corporation.
Thanks to all contributors who share their time, energy, and talent to help RT-Thread. Thank you very much!
Fix a bug about rt_event_recv function without assigning event_set/event_info, when there is a correspond event, the thread does not need to wait #3787
avoid deadlock (rt_hw_interrupt_disable and rt_enter_critical when enable smp #3786
[format] code style of rt_strcmp function #3777
update SConstruct fix compilation error #3785
specify date string length in FINSH date command #3784
[update] function must have parameter #3767
fix bug: keep user’s lib configuration while running — target=eclipse #3766
[at_socket] support alloc socket dynamically with at device #3755
[bsp] [stm32] [wdt] Optimize code style #3760
minor optimization for mempool.c #3762
[update] add English README.md #3759
[bsp/nrf5x] add the config of softdevice #3761
[update] add STM32MP1xx template project #3746
fixed scons — dist in IMXRT BSP #3754
Update tcpclient.c #3753
[components] [wlan] fixed an issue at some cases of without user_buff in function rt_wlan_event_dispatch ()#3752
[bsp] add missing dist_handle function for two stm32 bsp #3747
[sensor] fixed sensor cmd delay time #3741
fixbug:eclipse.py do not remove all unused path list #3744
mainly update some supports on-chip peripheral driver about stm32f413-st-nucleo board #3724
stm32g070-st-nucleo bsp #3732
first commit of tm4c123bsp, validate on MDK5 #3722
raspi4 spi0 driver can run #3739
Submit nrf5x gpio driver #3706
[DeviceDriver] [SFUD] Update the ‘sf bench’ command #3740
fix an error, invoking rt_snprintf function with surplus parameter #3736
add a checking about size, equaling 0, in stm32_flash_erase function #3733
bsp: ls2k: pwm driver #3735
[Sensor] Add AMS sensor vendor info #3738
support Nuvoton M480 Platform #3697
fix gic ack irq problem #3730
add CAN configurature and CubeMx generate mode of Mspinit code
fix no compile .s source file under linux
qled released v1.00
update ft5426 driver
add a quick bootloader component
add crc library
add sensor mlx90632
add send and recv buffer parameters
add ws2812b software package
add gps_rmc software package
add Lorawan driver
add minIni and modify syntax error
NNoM updates the new version
add index information for RT3020 package
add gesture detection module PAJ7620
support for the PMS particulate concentration sensors
add gas sensor package ccs811
Thanks to qiyongzhong0、 liuduanfei、xupenghu、LXGMAX、 maplerian、zyk6271、XiaojieFan、majianjia、luhuadong、orange2348 for contributing the software packages.
RT-Thread Studio IDE V1.1.3 is released that supports:
QEMU Simulator
DAP-LINK
Refer to Here for more info.
Free Download RT-Thread Studio.
Kernel porting refers to the kernel running on different chip architectures and boards. It can have functions such as thread management and scheduling, memory management, inter-thread synchronization and communication, and timer management, etc. Porting can be divided into two parts: CPU architecture porting and BSP (Board support package) porting.
In this article, the CPU architecture porting part will be introduced in conjunction with the Cortex-M CPU architecture. RT-Thread opensource RTOS Kernel will be as an example.
There are many different CPU architectures in the embedded world, for example, Cortex-M, ARM920T, MIPS32, RISC-V, etc. In order to enable RT-Thread to run on different CPU architecture chips, RT-Thread provides a libcpu abstraction layer to adapt to different CPU architectures. The libcpu layer provides unified interfaces to the kernel, including global interrupt switches, thread stack initialization, context switching, and more.
RT-Thread's libcpu abstraction layer provides a unified set of CPU architecture porting interfaces downwards. This part of the interface includes global interrupt switch functions, thread context switch functions, clock beat configuration and interrupt functions, Cache, and so on. The following table shows the interfaces and variables that the CPU architecture migration needs to implement.
libcpu porting related API
Regardless of kernel code or user code, there may be some variables that need to be used in multiple threads or interrupts. If there is no corresponding protection mechanism, it may lead to critical section problems. In order to solve this problem, RT-Thread provides a series of inter-thread synchronization and communication mechanism. But these mechanisms require the global interrupt enable/disable function provided in libcpu. They are, respectively:
/* disable global interrupt */
rt_base_t rt_hw_interrupt_disable(void);
/* enable global interrupt */
void rt_hw_interrupt_enable(rt_base_t level);
The following describes how to implement these two functions on the Cortex-M architecture. As mentioned earlier, the Cortex-M implements the CPS instruction in order to achieve fast switch interrupts, which can be used here.
CPSID I ;PRIMASK=1, ; disable global interrupt
CPSIE I ;PRIMASK=0, ; enable global interrupt
The functions that need to be done in order in the rt_hw_interrupt_disable() function are:
1). Save the current global interrupt status and use the status as the return value of the function.
2). Disable the global interrupt.
Based on MDK, the global interrupt disabled function on the Cortex-M core, is shown in the following code:
Disable global interrupt
;/*
; * rt_base_t rt_hw_interrupt_disable(void);
; */
rt_hw_interrupt_disable PROC ;PROC pseudoinstruction definition function
EXPORT rt_hw_interrupt_disable ;EXPORT output defined function, similar to C language extern
MRS r0, PRIMASK ;read the value of the PRIMASK register to the r0 register
CPSID I ;disable global interrupt
BX LR ;function renturn
ENDP ;ENDP end of function
The above code first uses the MRS instruction to save the value of the PRIMASK register to the r0 register, then disable the global interrupt with the "CPSID I" instruction, and finally returns with the BX instruction. The data stored by r0 is the return value of the function. Interrupts can occur between the “MRS r0, PRIMASK” instruction and “CPSID I”, which does not cause a global interrupt status disorder.
There are different conventions for different CPU architectures regarding how registers are managed during function calls and in interrupt handlers. A more detailed introduction to the use of registers for Cortex-M can be found in the official ARM manual, "Procedure Call Standard for the ARM ® Architecture."
In rt_hw_interrupt_enable(rt_base_t level), the variable level is used as the state to be restored, overriding the global interrupt status of the chip.
Based on MDK, implementation on the Cortex-M core enables a global interrupt, as shown in the following code:
Enable global interrupt
;/*
; * void rt_hw_interrupt_enable(rt_base_t level);
; */
rt_hw_interrupt_enable PROC ; PROC pseudoinstruction definition function
EXPORT rt_hw_interrupt_enable ; EXPORT output defined function, similar to "extern" in C language
MSR PRIMASK, r0 ; write the value of the r0 register to the PRIMASK register
BX LR ; function renturn
ENDP ; ENDP end of function
The above code first uses the MSR instruction to write the value register of r0 to the PRIMASK register, thus restoring the previous interrupt status.
When dynamically creating threads and initializing threads, the internal thread initialization function _rt_thread_init() is used. The _rt_thread_init() function calls the stack initialization function rt_hw_stack_init(), which manually constructs a context in the stack initialization function. The context will be used as the initial value for each thread's first execution. The layout of the context on the stack is shown below:
The following code is the stack initialization code:
Build a context on the stack
rt_uint8_t *rt_hw_stack_init(void *tentry,
void *parameter,
rt_uint8_t *stack_addr,
void *texit)
{
struct stack_frame *stack_frame;
rt_uint8_t *stk;
unsigned long i;
/* align the incoming stack pointer */
stk = stack_addr + sizeof(rt_uint32_t);
stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8);
stk -= sizeof(struct stack_frame);
/* obtain the pointer to the stack frame of the context */
stack_frame = (struct stack_frame *)stk;
/* set the default value of all registers to 0xdeadbeef */
for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++)
{
((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef;
}
/* save the first parameter in the r0 register according to the ARM APCS calling standard */
stack_frame->exception_stack_frame.r0 = (unsigned long)parameter;
/* set the remaining parameter registers to 0 */
stack_frame->exception_stack_frame.r1 = 0; /* r1 register */
stack_frame->exception_stack_frame.r2 = 0; /* r2 register */
stack_frame->exception_stack_frame.r3 = 0; /* r3 register */
/* set IP (Intra-Procedure-call scratch register.) to 0 */
stack_frame->exception_stack_frame.r12 = 0; /* r12 register */
/* save the address of the thread exit function in the lr register */
stack_frame->exception_stack_frame.lr = (unsigned long)texit;
/* save the address of the thread entry function in the pc register */
stack_frame->exception_stack_frame.pc = (unsigned long)tentry;
/* Set the value of psr to 0x01000000L, which means that the default switch is Thumb mode. */
stack_frame->exception_stack_frame.psr = 0x01000000L;
/* return the stack address of the current thread */
return stk;
}
In different CPU architectures, context switches between threads and context switches from interrupts to context, the register portion of the context may be different or the same. In Cortex-M, context switching is done uniformly using PendSV exceptions, and there is no difference in the switching parts. However, in order to adapt to different CPU architectures, RT-Thread's libcpu abstraction layer still needs to implement three thread switching related functions:
1) rt_hw_context_switch_to(): no source thread, switching to the target thread, which is called when the scheduler starts the first thread.
2) rt_hw_context_switch():In a threaded environment, switch from the current thread to the target thread.
3) rt_hw_context_switch_interrupt ():In the interrupt environment, switch from the current thread to the target thread.
There are differences between switching in a threaded environment and switching in an interrupt environment. In the threaded environment, if the rt_hw_context_switch() function is called, the context switch can be performed immediately; in the interrupt environment, it needs to wait for the interrupt handler to complete processing the functions before switching.
Due to this difference, the implementation of rt_hw_context_switch() and rt_hw_context_switch_interrupt() is not the same on platforms such as ARM9. If the thread's schedule is triggered in the interrupt handler, rt_hw_context_switch_interrupt() is called in the dispatch function to trigger the context switch. After the interrupt handler has processed the interrupt, check the rt_thread_switch_interrupt_flag variable before the schedule exits. If the value of the variable is 1, the context switch of the thread is completed according to the rt_interrupt_from_thread variable and the rt_interrupt_to_thread variable.
In the Cortex-M processor architecture, context switching can be made more compact based on the features of automatic partial push and PendSV.
Context switching between threads, as shown in the following figure:
The hardware automatically saves the PSR, PC, LR, R12, R3-R0 registers of the from the thread before entering the PendSV interrupt, then saves the R11~R4 registers of the from thread in PendSV, and restores the R4~R11 registers of the to thread, and finally, the hardware automatically restores the R0~R3, R12, LR, PC, PSR registers of the to thread after exiting the PendSV interrupt.
The context switch from interrupt to thread can be represented by the following figure:
The hardware automatically saves the PSR, PC, LR, R12, R3-R0 registers of the from thread before entering the interrupt, and then triggers a PendSV exception. R11~R4 registers of the from thread are saved and R4~R11 registers of the to thread are restored in the PendSV exception handler. Finally, the hardware automatically restores the R0~R3, R12, PSR, PC, LR registers of the to thread after exiting the PendSV interrupt.
Obviously, in the Cortex-M kernel, the rt_hw_context_switch() and rt_hw_context_switch_interrupt() have the same functions, which is finishing saving and replying the remaining contexts in PendSV. So we just need to implement a piece of code to simplify the porting.
rt_hw_context_switch_to() has only the target thread and no source thread. This function implements the function of switching to the specified thread. The following figure is a flowchart:
The rt_hw_context_switch_to() implementation on the Cortex-M3 kernel (based on MDK), as shown in the following code:
MDK version rt_hw_context_switch_to() implementation
;/*
; * void rt_hw_context_switch_to(rt_uint32 to);
; * r0 --> to
; * this fucntion is used to perform the first thread switch
; */
rt_hw_context_switch_to PROC
EXPORT rt_hw_context_switch_to
; r0 is a pointer pointing to the SP member of the thread control block of the to thread
; save the value of the r0 register to the rt_interrupt_to_thread variable
LDR r1, =rt_interrupt_to_thread
STR r0, [r1]
; set the from thread to empty, indicating that no context is needed to save from
LDR r1, =rt_interrupt_from_thread
MOV r0, #0x0
STR r0, [r1]
; set the flag to 1, indicating that switching is required, this variable will be cleared when switching in the PendSV exception handler
LDR r1, =rt_thread_switch_interrupt_flag
MOV r0, #1
STR r0, [r1]
; set PendSV exception priority to lowest priority
LDR r0, =NVIC_SYSPRI2
LDR r1, =NVIC_PENDSV_PRI
LDR.W r2, [r0,#0x00] ; read
ORR r1,r1,r2 ; modify
STR r1, [r0] ; write-back
; trigger PendSV exception (PendSV exception handler will be executed)
LDR r0, =NVIC_INT_CTRL
LDR r1, =NVIC_PENDSVSET
STR r1, [r0]
; abandon the stack from chip startup to before the first context switch, set the value of the MSP as when it is started
LDR r0, =SCB_VTOR
LDR r0, [r0]
LDR r0, [r0]
MSR msp, r0
; enable global interrupts and global exceptions. After enabling, the PendSV exception handler will be entered.
CPSIE F
CPSIE I
; will not execute to here
ENDP
The function rt_hw_context_switch() and the function rt_hw_context_switch_interrupt() have two parameters, the from thread and the to thread. They implement the function to switch from the from thread to the to thread. The following figure is a specific flow chart:
The rt_hw_context_switch() and rt_hw_context_switch_interrupt() implementations on the Cortex-M3 kernel (based on MDK) are shown in the following code:
Implement rt_hw_context_switch()/rt_hw_context_switch_interrupt()
;/*
; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);
; * r0 --> from
; * r1 --> to
; */
rt_hw_context_switch_interrupt
EXPORT rt_hw_context_switch_interrupt
rt_hw_context_switch PROC
EXPORT rt_hw_context_switch
; check if the rt_thread_switch_interrupt_flag variable is 1
; skip updating the contents of the thread from if the variable is 1
LDR r2, =rt_thread_switch_interrupt_flag
LDR r3, [r2]
CMP r3, #1
BEQ _reswitch
; set the rt_thread_switch_interrupt_flag variable to 1
MOV r3, #1
STR r3, [r2]
; update the rt_interrupt_from_thread variable from parameter r0
LDR r2, =rt_interrupt_from_thread
STR r0, [r2]
_reswitch
; update the rt_interrupt_to_thread variable from parameter r1
LDR r2, =rt_interrupt_to_thread
STR r1, [r2]
; trigger PendSV exception, will enter the PendSV exception handler to complete the context switch
LDR r0, =NVIC_INT_CTRL
LDR r1, =NVIC_PENDSVSET
STR r1, [r0]
BX LR
In Cortex-M3, the PendSV interrupt handler is PendSV_Handler(). The actual thread switching is done in PendSV_Handler(). The following figure is a specific flow chart:
The following code is a PendSV_Handler implementation:
; r0 --> switch from thread stack
; r1 --> switch to thread stack
; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack
PendSV_Handler PROC
EXPORT PendSV_Handler
; disable global interrupt
MRS r2, PRIMASK
CPSID I
; check if the rt_thread_switch_interrupt_flag variable is 0
; if it is zero, jump to pendsv_exit
LDR r0, =rt_thread_switch_interrupt_flag
LDR r1, [r0]
CBZ r1, pendsv_exit ; pendsv already handled
; clear the rt_thread_switch_interrupt_flag variable
MOV r1, #0x00
STR r1, [r0]
; check the rt_thread_switch_interrupt_flag variable
; if it is 0, the context save of the from thread is not performed.
LDR r0, =rt_interrupt_from_thread
LDR r1, [r0]
CBZ r1, switch_to_thread
; save the context of the from thread
MRS r1, psp ; obtain the stack pointer of the thread from
STMFD r1!, {r4 - r11} ; save r4~r11 to the thread's stack
LDR r0, [r0]
STR r1, [r0] ; update the SP pointer of the thread's control block
switch_to_thread
LDR r1, =rt_interrupt_to_thread
LDR r1, [r1]
LDR r1, [r1] ; obtain the stack pointer of the thread to
LDMFD r1!, {r4 - r11} ; restore the register value of the thread to in the stack of the thread
MSR psp, r1 ; update the value of r1 to psp
pendsv_exit
; restore global interrupt status
MSR PRIMASK, r2
; modify bit 2 of the lr register to ensure that the process uses the PSP stack pointer
ORR lr, lr, #0x04
; exit interrupt function
BX lr
ENDP
With the basics of switching global interrupts and context switching, RTOS can perform functions such as creating, running, and scheduling threads. With OS Tick, RT-Thread can schedule time-to-roll rotations for threads of the same priority, implementing timer functions, implementing rt_thread_delay() delay functions, and so on.
In oder to finish the porting of libcpu, we need to ensure that the rt_tick_increase() function is called periodically during the clock tick interrupt. The call cycle depends on the value of the RT_TICK_PER_SECOND macro of rtconfig.h.
In Cortex M, the OS tick can be implemented by SysTick's interrupt handler.
void SysTick_Handler(void)
{
/* enter interrupt */
rt_interrupt_enter();
rt_tick_increase();
/* leave interrupt */
rt_interrupt_leave();
}
In a practical project, for the same CPU architecture, different boards may use the same CPU architecture, carry different peripheral resources, and complete different products, so we also need to adapt to the board. RT-Thread provides a BSP abstraction layer to fit boards commonly seen. If you want to use the RT-Thread kernel on board, in addition to the need to have the corresponding chip architecture porting, you need to port the corresponding board, that is, implement a basic BSP. The job is to establish a basic environment for the operating system to run. The main tasks that need to be completed are:
1) Initialize the CPU internal registers and set the RAM operation timing.
2) Implement clock driver and interrupt controller driver and interrupt management.
3) Implement UART and GPIO driver.
4) Initialize the dynamic memory heap to implement dynamic heap memory management.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread is an Internet of Things(IoT) operating system that applies Apache License v2, and it is been over a decade since the first release of RT-Thread in 2006. RT-Thread is developed collaboratively on Github during the whole development process and released many versions since 2006.
This document will make an explicit explanation of how to choose the right RT-Thread version.
RT-Thread’s version/branch has the following available options:
Development branch (master branch), long-term support branch (lts-v3.1.x branch), release version (release), you are more recommended to use the released version.
The RT-Thread existed branches:
When there are large version changes, such as 3.0.x updates to 3.1.x, or master version changes, a new branch will be created on the master branch to maintain the old version.
Version-Release: RT-Thread has released a number of versions, such as 3.1.1, 3.1.2, 4.0.0, etc. The new version is released on the basis of the master branch or on the branch that is under-maintained.
For example, the latest release of the long-term support branch lts-v3.1.x is 3.1.2, and there will be 3.1.3, 3.1.4 、… and so on, but the 3.2.x version will not be released on that branch.
A second example, the version of the current master branch is 4.0.1, the latest release is 4.0.0, and there will be 4.0.1, 4.0.2 、… and so on. When there are large version changes, such as when 4.1.0 is released, a 4.0.x branch will be created to maintain 4.0.x.
RT-Thread all releases are stored on Github. The releases are highly stable and the latest releases are more recommended. There are two latest releases: version 3.1.2 and version 4.0.0, both of which can be selected for your needs.
The development branch is a branch of code that the RT-Thread team committed during development, it is stored on the Github master branch. The branch will iterate and update continually and frequently.
The long-term support branch is stored on Github, the long-term support branch is the maintenance branch of the 3.1.x version, primarily to fix bugs and update BSPs. Since more features have been added from 4.0.0, such as SMP, lwp, and more. There is a big change for 3.1.x, so 3.1.x will be maintained over the long term.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Thanks to RT-Thread OpenSource Community Developer #hyafz contributed and opensource this application.
plccore is a RT-Thread-based runtime core for programmable logic controller (PLC), together with the upper computer programming software plcide that I developed, forms a complete PLC development system. With RT-Thread's extensive board support packages (BSP), plccore can be quickly ported to more MCUs, which saves a lot of development time. For MCU developers, the combination of plcide, plccore and rt-thread provides a graphical, tabular way to develop MCU control programs, which is very convenient and simple.
There are three objectives that the PLC system with plccore + plcide can achieve:
For MCU developers, once you have ported the RT-Thread and plccore, you can use plcide for:
1.Write the control logic through graphical interfaces, which supports multi-platform reuse
2.Configure multitasking systems in tabulations without writing code, which supports different task-driven modes:
Loop execution
External signal trigger
Timing trigger
plccore package complies with the LGPLv2.1 license, as detailed in the 'LICENSE' file.
Please refer to the Porting Tutorial given in the docs directory (Note: Apology first. The RT-Thread community developers contribute a lot of valuable applications, but the tutorials are not written in English yet, so when you read this article you need to use online translation software. We are working on translating those documents into English, please stay tuned. )
Leave us a message on RT-Thread Twitter or Facebook.
Please refer to the PLC Integrated Development Environment User Manual given in the software package docs directory:
And here’s the Programming Guidelines
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463/?modal=admin_todo_tour
Email: contact@rt-thread.org
The statistics are fetched from merged PR on the Github master code branch.
First of all, we want to acknowledge and thank the following community members for their contributions to RT-Thread in June. They are:
liuduanfei、uselessboard、ArdaFu、geniusgogo、xuzhuoyi、luhuadong、DavidLin1577、xfwangqiang、ShermanShao、longtengmcu、Nuclei System Technology、Nuvoton Technology Corporation!
- [BSP] [gd32vf103] add drv_gpio.c #3725
- Delete duplicate header files #3727
- BSP: ls2k: internal rtc driver #3717
- BSP [TM4C129X] Fix the bug that HEAP is not initialized at system start up #3721
- [update] add drivers for stm32mp1 #3715
- Add lwIP 2.1.2 for RT-Thread #3709
- Fix ls2k irq #3711
- [add] STM32MP157A Discovery bsp #3708
- BSP [stm32] [drv_sdio.c] adapt stm32f2 series#3704
- [fix] lwip clock confict with minilibc clock #3703
- [net/lwip]: enable LWIP_SO_LINGER option feature of LWIP #3702
- [libcpu] [arm] [cortex-m23] Change exception return call address #3701
- [libcpu/arm/*/cpuport.c]fixed __rt_ffs bug on account of armclang LTO #3700
- BSP: ls2k: initial clk driver #3695
- BSP/nuclei: Add more drivers support for gd32vf103_rvstar board #3694
- [BSP] [AT32] fixed scons — dist #3687
- Add raspi4 gpio interrupt #3692
- Fix ls2k #3693
- [BSP] [IMXRT]fixed scons — dist in IMXRT BSP #3680
- Update udpserver.c #3683
- Update udpclient.c #3682
- Update tcpserver.c #3684
- [SFUD] Update the flash chip information table. #3686
- [finsh]Fixed a bug may cause stackover flow #3679
- Improve the SPI framework and drive-related functions #3685
- [Sensor] Add Plantower sensor info #3678
- [tools] fixed python 2.x cmp #3677
- [lwip]Fixed a memset bug in ethernetif.c #3674
- [libcpu]Fixed the wrong notes in context_iar.S #3673
- Optimize project group sort by name #3670
- [bsp] [imxrt] fix the gpio drivers warning,’int_mode’ may be used unit #3663
- Fix pthreads #3662
- [bsp] [imxrt] fix docs and templates err #3660
- Adjust the interrupt priority configuration of some of the STM32 series BSP #3653
- [W25Q32BV]Support fast read QUAD_OUTPUT and QUAL_IO. #3644
- Fix raspi BSP #3650
- BSP: ls2k: initial gpio driver without irq support #3642
- Fix bugs for import error in stm32f103-hw100k-ibox iar project #3645
- [BSP]Add nrf5x SPI BSP #3624
- Fix three bugs about ethernet #3618
- ramdisk:A ramdisk block device based on RT-Thread device driver framework. It works as a block device that allows being format to most of the filesystems supported by RT-Thread.
- yd_crypto: Some encryption algorithms are organized into libraries to facilitate the application of low- and medium-end 32-bit microcontrollers and decryption.
- Add Lora-radio-driver package: support sx126x\sx127x、support Lora communication.
- Tencent IoT package update to v3.1.3.
- kawaii MQTT release v1.1.0.
- uMQTT:A lightweight, powerful, customizable, easy-to-use, and embeddable MQTT client for RT-Thread.
- To facilitate access to different operator networks using the BC28 NB-IoT module, the Band configuration items have been added.
- at_device adapts NB-IoT module N21、 LTE Cat-1module N58.
Thanks to majianjia、china-hai、Forest-Rain、yougaliu007、jiejietop、luhuadong、Shuobatian for contributing the software packages.
RT-Thread Studio:
RT-Thread Studio IDE V1.1.1 is released:
Add Engineering Chip Support Package switching function
Add Engineering RT-Thread version switching function
Add auto-build feature sits on startup debugging
Add Engineering Creation Default Settings is UTF8 Coding
Upgrade engineering chip switching function
Upgrade download and debug shortcuts
Upgrade new engineering wizard
Upgrade the prompt of new engineering creation failure
Upgrade the internal path of the debug configuration to save as a relative path
Upgrade SDK Manager offline resource pack import function
Solve the dragging shaking problem of tree-diagram configuration column width
Fix some packages addition failure issues
Resolve the SDK Manager installation status icon display exception
Free Download RT-Thread Studio.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463/?modal=admin_todo_tour
Email: contact@rt-thread.org
Let’s see the information shown on the ink screen.
The entire calendar project consists of three parts:
Since the business process services and the web client are about the server-side, so I won’t further go deep on this. This article will focus on the device end introduction.
The device transmits data through MQTT, enters into the business processing service, and processes and stores the corresponding data. This part uses Python and Mysql.
Main features:
Flask is used in this project, Flask is a micro web framework written in Python. Users can add modified memos by logging to the web page.
The current version has the features of:
WIFI chip W600 is used in this project combined with RT-Thread IoT OS, RT-Thread is an open-source embedded real-time operating system that has a wide range of software packages, and its compilation environment is very similar to the compilation environment under Linux.
The hardware of the device is using a PCB as the main panel, the front only has an ink screen as a display, using a removable calendar box to divide the screen so that you can intuitively see the date of each month. The back of the PCB is welded with the relevant components and with a battery, it is separated from the wire, which makes the calendar like a real paper desktop calendar.
The GPIO available for the W600 chip has 17 pins and all being used in this project, as follows:
This is the structure of my project folder, where the package section is slightly mentioned. I’ll share the used software packages in the next section.
desk_calendar/ ├── Kconfig ├── README.md ├── SConscript ├── SConstruct ├── applications │ ├── SConscript │ ├── defines.h │ ├── init.c │ ├── keyboard.c │ ├── logic.c │ ├── main.c │ ├── mqtt.c │ ├── network.c │ ├── qrcode_array.h │ ├── screen.c │ └── timer.c ├── makeimg.py ├── packages │ ├── EasyFlash-v3.3.0 │ ├── SConscript │ ├── airkissOpen-latest │ ├── bs8116a-latest │ │ ├── LICENSE │ │ ├── README.md │ │ ├── SConscript │ │ ├── inc │ │ ├── samples │ │ └── src │ ├── cJSON-v1.0.2 │ ├── fal-v0.3.0 │ ├── lunar_calendar-latest │ │ ├── LICENSE │ │ ├── README.md │ │ ├── SConscript │ │ ├── inc │ │ ├── samples │ │ └── src │ ├── netutils-v1.1.0 │ ├── packages.dbsqlite │ ├── pahomqtt-v1.1.0 │ ├── pkgs.json │ ├── pkgs_error.json │ └── u8g2-c-latest ├── ports │ ├── SConscript │ ├── easyflash │ │ ├── SConscript │ │ └── ef_fal_port.c │ ├── fal │ │ ├── SConscript │ │ ├── fal_cfg.h │ │ ├── fal_flash_port.c │ │ └── fal_flash_sfud_port.c │ └── wifi │ ├── SConscript │ ├── wifi_config.c │ └── wifi_config.h ├── rtconfig.h └── rtconfig.py
There are a total of 9 packages have been used on this project, those packages were obtained from RT-Thread Github, it is open source and free of charge, check it out Here.
'EasyFlash-v3.3.0' 'airkissOpen-latest' 'bs8116a-e' 'cJSON-v1.0.2' 'fal-v0.3.0' 'lunar_calendar-' 'netutils-v1.1.0' 'pahomqt-v1.1.0' 'u8g2-c-latest'
Besides, I’ve also contributed a package, which is ‘bs8116a-last’:
‘bs8116a-last’ is an operating package for the Holtek touch chip.
Thanks to RT-Thread Community Developer #illusionlee that has created this project. Find more information about this project on Github.
And for more information about RT-Thread, please visit www.rt-thread.io.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463/?modal=admin_todo_tour
Email: contact@rt-thread.org
You’ll need to build a MicroPython firmware if you don’t have a development board officially supported by RT-Thread. RT-Thread provides the MicroPython software package, and the MicroPython package has been adapted to the RT-Thread driver framework when bound to the underlying hardware, so it’s easy to add MicroPython to a board that runs RT-Thread.
Note: RT-Thread MicroPython requires RT-Thread 3.0 and above.
RT-Thread MicroPython mini version occupies less than
ROM: 190KB
RAM: 20KB
As long as system resources meet the above requirements, many common development boards can run MicroPython, such as the boards supported by STM32 Series BSP.
Let’s take the MDK project on rt-thread\bsp\stm32\stm32f407-atk-explorer as an example of how to build MicroPython firmware on a BSP basis.
Update the package list with the pkgs --upgrade command, then select the MicroPython package with the RT-Thread Env tool and finally pull the package locally using the pkgs --update command.
To subsequently enable the MicroPython runtime environment in the main thread, we need to increase the stack size of the main thread. We increase the stack size to 8k here.
Next, allocate memory to the MicroPython running environment based on the remaining memory, and the higher the number filled in here, the larger the amount of code you can run the Python program. However, if the value written here exceeds the actual allocatable memory, there may be an error caused by memory allocation. Therefore, before you configure this project, you need to have some understanding of the allocation of system RAM resources.
Rebuild the project, compile and download, then view the memory usage via the free command in the msh command.
By checking the memory allocation in the last step, we get to know the system RAM resources. In this example, we allocate 20k memory for the MicroPython runtime environment. If you want to run more MicroPython code later, you can allocate more memories, as shown in the following illustration:
Finally, make sure that the file system is mounted on the root directory (‘/’). With the file system, you can then use the MicroPython development environment to synchronize Python code files to the board to run.
1. Open MicroPython file-sync option.
2. For the development board used in this example, the file system is stored on SPI Flash and the BSP support for the storage device is already done, you only need to enable the elm-fat file system, and configure the system as follows:
After the configuration is completed, remember to regenerate the project with the scons --target=mkd5 command so that the configuration takes effect in the project.
When you run MicroPython on your board, you are free to choose the storage media for the file system, but remember that the file system needs to be mounted to the root directory (‘/’) so that you can ensure that there are no errors in subsequent file transfers using MicroPython IDE.
Start MicroPython in the main thread, the code modification is shown as follow:
Recompile the project and download the program to the board, then MicroPython is run in the main thread, and the RT-Thread MicroPython IDE is available for application development. By connecting the development environment to the board, you can see MicroPython’s interactive environment REPL, as shown in the following image:
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
MicroPython has been ported to RT-Thread opensource IoTOS and could be run on RT-Thread 3.0 or above. This package allows you to run Python on any embedded system carrying RT-Thread.
RT-Thread Micropython follows MIT License, find more details in LICENSE.
RT-Thread 3.0+
First, select Micropython packages in RT-Thread package manager, as follows:
RT-Thread’s package manager will download the selected packages automatically. Also, you can explicitly order the package manager to download packages into the BSP directory by using the pkgs --update command.
When MicroPython Package is selected, it is added to the bsp project for compilation when bsp compiles again.
MicroPython Firmware Development Guides please refer to Here.
For more information about RT-Thread Micropython, please refer to Here.
The RT-Thread MicroPython IDE provides a powerful development environment, which is downloadable through the VScode App Store, as follows:
To make it easier for users to add their own C functions to MicroPython, which could be invoked in Python scripts, a MicroPython C binding code-generator(https://summergift.top/RT-MicroPython-Generator/) is provided by RT-Thread. With this tool, the C function extensions can be implemented in just a few simple steps, and the following image shows the form of the automatically generated C code.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The statistics are fetched from merged PR on the Github master code branch.
First of all, we want to acknowledge and thank the following community members for their contributions to RT-Thread in May. They are:
luhuadong、wosayttn、xckhmf、NU-LL、egbert-h、XYX12306 、Prry、whj4674672 、ousugo 、2000000 、wosayttn 、cliff-cmc、A-orz 、Sunwancn、ifreecoding 、DriftSnail、jch12138r and Artery Technology company.
Thanks to all contributors who have shared their time, energy, and talent to help RT-Thread. Thank you very much!
Set Systick interrupt priority to the lowest #3637
Add the prefix ‘static’ to avoid the name conflicts with user-defined functions #3634
[bsp/at32] 1.Add support for AT-START-F407 board, 2.Add eth and rtc driver
Support raspi4 all uart #3627
Add raspi4 32bit #3626
Add Studio IDE dist feature for stm32 BSP #3625
Add BSP for STM32F103RET6-OneNET-NBIoT Board. #3622
Add bsp/ls2k windows compilation instructions #3619
Fix the occasional error when setting up RTC #3617
[bsp/stm32/stm32h743-atk-apollo]support stm32h7 fal #3613
[AT] Adjust where the AT socket callback function #3612
[drivers][watchdog] Fix the written mistake in watchdog.c comments#3611
[BSP]Add stm32l433-st-nucleo BSP #3610
Fix eclipse.py version #3609
[Kernel] Fix the maxlen issue in rt_object_get_pointers #3608
Add SD Card driver for stm32h743-atk-apollo board #3605
[Kernel] Fix double release for thread #3604
[dlmodule] Fix crash when dlmodule exit #3603
Fix the error about the NSS type when initializing SPI devices #3602
Fix the incorrect function declarations and the lack of ‘break’ in switch-case #3601
Update changelog. #3594
[BSP] Fix 2bugs in drv_can.c #3593
[BSP] Fix stm32 f1 series rtc bug #3591
[update] Fix the pathname error in ubuntu #3589
Fixed typo: nead => need #3587
[BSP] 0ptimize dist handle for stm32l412-nucleo according to #3582 #3585
[BSP] 0ptimize bsp dist handle process #3582
Fix led0 → led1 #3580
[nrfx] Add the qspi_flash of nordic pdk #3579
[bsp/stm32/stm32h743-atk-apollo]Support stm32h7 uart dma #3576
Add vendor information(TI) of sensor #3575
Ename the Thread/Mutex/Semaphore.cpp to cxx_Thread/Mutex/Semaphore to avoid same name issue in C++ component #3572
Add bsp/stm32/stm32f413-st-nucleo #3570
mstorage.c: Fix the issue bug in_read_capacity() #3569
Support SPI/ADC/TIME on-chip peripheral driver #3568
[bsp\nrf5x]Support BSP UART0 #3566
Get stuck issue after open-close-open CAN device. #3565
[nrfx] Add the on-chip flash #3564
Add raspi mbox option #3562
Add stm32l412-st-nucleo BSP #3561
Fix c99/siginfo_t issue caused by gcc_version #3558
gizwits-gokitv21 support uart2 #3553
[stm32l475-atk-pandora] Modify the configuration of SPI3 to work at the “transmit only master” mode, to prevent the LCD pin being used as SPI3 MISO #3557
(RT-Thread has a total of 221 packages now)
- [vt100] Add the command ‘lsimg’, which decodes the JPEG format and display the image through the console #630
- [vt100] Add the function to display colorful pictures through MSH #628
- Add can_ymodem #627
- Add hc-sr04 driver package index #626
- Fix the multi_rtimer PKG_MULTI_RTIMER_PATH #624
- Fix syswatch, release version v1.0.0 #623
Thanks to qiyongzhong0、Forest-Rain 、alec-shan、redocCheng 、wuhanstudio for contributing the software packages.
RT-Thread Studio:
RT-Thread Studio IDE V1.1 is released with 7 New Features.
- The whole STM32 series are supported in the new version 1.1.
- Upgrade configuration features.
- Supports all chip manufacturers to add chips.
- Add a concise mode for the compiler output.
- MDK and IAR projects are available to be imported directly.
- Add a new DevStyle theme with a beautiful color scheme.
- Add the code analysis feature and offer the preference configuration to support analyzing code.
Check out more Here!
Free Download RT-Thread Studio.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463/?modal=admin_todo_tour
Email: contact@rt-thread.org
Phone verification and Email verification is optional, but email verification is more recommended. Users failed to receive the phone verification number, please try with email verification.
There are various ways to add a file or a set of files to the project, like:
If it is declared that some headers are missing, please add their directories into the search paths in the configuration of the project.
Right-click on the left bar of the source edit window, select
Show Line Numbers
as below:
Right-click at the Project Explorer
window, open the Import
wizard and select the RT-Thread Studio Projects
into Workspace item, as
shown below:
Click Next
, then the Browse ...
button in the
Import Projects
window, the import wizard lists all the projects in the
specified path. Select the one to import and click the Finish
button, the
selected project is imported, illustrated as below:
Right-click on the left bar of the source edit window, select
Show Line Numbers
as below:
If both BIN and HEX files are needed, add the command to generate the HEX file to
Post-build steps
->Command
, illustrated as below:
The generated HEX file is located in the Debug
directory, shown as below:
First, make sure it’s not a program bug. It’s usually caused by broken wires or the baud-rate is set too high. Use another set of wires or lower the baud-rate.
Some files might be accessed by git when the user tries to remove a project, which
causes a failure and RT-Thread Studio prompts that the file is used by other programs.
Close the project or restart the IDE before remove it. The Restart
and the
Close Project
options are located in the File
menu and the
right-click menu on the project item in the Project Explorer
window.
It’s not permitted. Files in the rt-thread and packages directories are managed and
configured under RT-Thread Settings
. When needed in the compilation, they
should be turned on in RT-Thread Settings.
For instance, if users want the rt-thread/components/dfs
to be compiled, as
below:
Users should not modify the properties of the dfs
directory. Instead, they
should turn on the DFS in RT-Thread Settings
and save the configuration,
which causes the dfs
directory to
be added to the compilation process, illustrated as below:
The compilation outputs in Studio are shown below:
rtthread.elf
.
About how to calculate the memory usage of the target file:
the used flash size = the size of text
the used RAM size = the size of data + the size of bss
When the error dialog “TCP Port 61234 not available” pops up, modify the
GDBServer Port Number
of ST-LINK in
The configuration of Project
, as below:
There are no components in RT-Thread Nano, which is a lite version. Choose the standard version of RT-Thread when creating a new project.
If the statement “No Repository found” or the error in the picture below appears, probe the updates manually. Cancel the selection “Group items by category” and “Contact all update sites during install to find required software” in the update window, select “Eclipse Platform Launcher Executables” and then install the Studio updates. If it fails, close the window and try again.
In “DevStyle Theme” in Preference
->DevStyle
, select
Use enhanced DevStyle Themes
. To make the selected theme take effect,
restart the IDE.
Click Show Active Keybindings ...
in the Help
menu, where
users could view and change the key bindings.
Click the item
Window
->Perspectives
->Reset Perspectives ...
to restore the perspectives to the default settings.
Right-click on the project item in Project Explorer
, select
Open Project
on the menu.
When creating a project, an error window pops up and the message “Error loading Python DLL xxx/xxxx/python36.dll” shows up in the console window.
Please re-install the Visual C++ Redistributable.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463/?modal=admin_todo_tour
Email: contact@rt-thread.org
The AT device package is the RT-Thread AT component with the porting files and sample codes for different AT devices, it supports ESP8266, ESP32, M26, MC20, RW007, MW31, SIM800C, W60X, SIM76XX, A9/A9G, BC26, AIR720, ME3616, M 6315, BC28, EC200X series of devices, and more. This package implements the AT socket on all the devices above, which allows communications through the standard socket interfaces in AT commands. Refer to the “RT-thread programming guide “ for the descriptions of specific functions.
RT-Thread is an open-source embedded real-time operating system (RTOS) born in 2006 that provides developers with a wide range of components and 200+ software packages.
at_device package follows the LGPLv2.1 license, check out LICENSE file for more information.
The AT device software package is porting for AT components and AT socket functionality, you need to enable the AT component library and AT socket functionality to get the AT device package.
The AT device package has been updated with multiple versions, different versions require different configuration option and need to be fit into the corresponding system version. The following mainly listing the currently available AT device package version information:
Version judgment will be done automatically in menuconfig, at_device package selection will give the best version support based on the current system environment, the above version description is used as a reference for the running environment.
Different versions require different configuration option, which is introduced as follows:
Enable AT device software package. This version only supports to enable one AT device at the same time, the configuration option as follows:
RT-Thread online packages --->
IoT - internet of things --->
-*- AT DEVICE: RT-Thread AT component porting or samples for different device
[ ] Enable at device init by thread
AT socket device modules (Not selected, please select) --->
Version (V1.6.0) --->
Enable AT device software package. This version supports to enable multiple AT device at the same time, the configuration option as follows:
RT-Thread online packages --->
IoT - internet of things --->
-*- AT DEVICE: RT-Thread AT component porting or samples for different device
[*] Quectel M26/MC20 --->
[*] Enable initialize by thread
[*] Enable sample
(-1) Power pin
(-1) Power status pin
(uart3) AT client device name
(512) The maximum length of receive line buffer
[ ] Quectel EC20 --->
[ ] Espressif ESP32 --->
[*] Espressif ESP8266 --->
[*] Enable initialize by thread
[*] Enable sample
(realthread) WIFI ssid
(12345678) WIFI password
(uart2) AT client device name
(512) The maximum length of receive line buffer
[ ] Realthread RW007 --->
[ ] SIMCom SIM800C --->
[ ] SIMCom SIM76XX --->
[ ] Notion MW31 --->
[ ] WinnerMicro W60X --->
[ ] AiThink A9/A9G --->
[ ] Quectel BC26 --->
[ ] Luat air720 --->
[ ] GOSUNCN ME3616 --->
[ ] ChinaMobile M6315 --->
[ ] Quectel BC28 --->
[ ] Quectel ec200x --->
Version (latest) --->
Quectel M26/MC20: Enable M20/MC20( 2G module) device supporting;
Quectel EC20:Enable EC20(4G module) device supporting;
Espressif ESP8266: Enable ESP8266 (WIFI Module) device supporting;
Espressif ESP32:Enable ESP32 (WIFI Module)device supporting;
Realthread RW007:Enable RW007 (WIFI Module)device supporting;
SIMCom SIM800C:Enable SIM800C (2G Module)device supporting;
SIMCom SIM76XX:Enable SIM76XX (4G Module)device supporting;
Notion MW31:Enable MW31 (WIFI Module)device supporting;
WinnerMicro W60X:Enable W60X (WIFI Module)device supporting;
AiThink A9/A9G:Enable A9/A9G (2G Module)device supporting;
Quectel BC26:Enable BC26(NB-IOT Module)device supporting;
Luat Air720:Enable air720(4g Module)device supporting;
GOSUNCN ME3616:Enable ME3616(NB-IOT Module)device supporting;
ChinaMobile M6315:Enable M6315 (2G Module)device supporting;
Quectel BC28:Enable BC28(NB-IoT Module)device supporting;
Quectel EC200X:Enable EC200T、EC200S(4G Module)device supporting;
Version: Download the package version.
The configuration options mentioned above are using the 2G module and WIFI module options as examples, introduced the AT device package configuration option of the V2.X.X version, here are a few things to note:
When the AT device package is selected and the device supporting is enabled, client functionality for the AT component will be selected by default, and here are the AT component configuration options.
RT-Thread Components --->
Network --->
AT commands --->
[ ] Enable debug log output
[ ] Enable AT commands server
-*- Enable AT commands client
(1) The maximum number of supported clients
-*- Enable BSD Socket API support by AT commnads
[*] Enable CLI(Command-Line Interface) for AT commands
[ ] Enable print RAW format AT command communication data
(128) The maximum lenght of AT Commonds buffe
The configuration options related to the AT device package:
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread open-source Internet of Things operating system provides MicroPython Developers with an excellent development environment that helps them to get started IoT OS quickly.
RT-Thread MicroPython is plug-in in VScode, which provides a powerful development environment for MicroPython development. The main features are as follows:
The convenient connection mode of development board (serial port, network, USB)
Support MicroPython-based code intelligent completion and syntax check
Support MicroPython REPL interactive environment
Provides many code samples and demo program
Support full project synchronization function
Support to download files or folders to the development board
Supports fast running code files in memory
Supports code snippets to run functions
Supports several major MicroPython development boards
Support Windows and Ubuntu operating systems
Development board support list
1- Using plug-in under the Windows operating system requires changing the default terminal of VScode to Powershell, as shown below:
If you want to use the MicroPython autocompletion feature (you can skip the next step if you don't need autocompletion for now), you need to do the following:
2- Install the Python plug-in
3- Install Python3 on your PC and add it to the system environment variables as instructed by the Python plug-in
If you already have the above plug-ins and programs installed on your PC, you can skip this preparation step.
This plug-in supports running under ubuntu 18.04. In order to avoid frequent
access to serial port permissions under the ubuntu system, the current user needs to be
added to the user group dialout. Manually enter
the following command ($USERNAME
is the current USERNAME of the system ) :
sudo usermod -ag dialout $USERNAME
Note: the configuration change requires to restart the operating system for the configuration to take effect.
RT-Thread MicroPython plug-in supports Mac 10.15 Catalina OS.
The first step in MicroPython development is to create a MicroPython project within which all subsequent operations must run. There are two ways to create a new MicroPython project, a blank project and a demo-based project, which are shown below.
You can connect to the MicroPython development board by clicking the connection button in the lower-left corner and then selecting the device you want to connect to in the pop-up list of devices.
The MicroPython plug-in provides a wealth of sample code and library files to view in the left active bar. Right-click on the sample file to add the sample file to the project from the drop-down menu.
This feature is used to quickly debug a single file and is frequently used in
debugging code. When we write the test program in a separate file, we can use this
function to download the current python file to the
memory of the development board to run, achieving the effect of rapid debugging. We can
also use the shortcut key Alt + q
to trigger this function.
If you just want to debug a small amount of code without downloading files to the development board, you can use the code snippet function. You can run the selected code in the REPL environment by selecting the snippet you want to run in the editor, and then selecting the execute the selected MicroPython code option on the device from the right-click menu.
If you want to download individual files/folders to the development board, you can use the function of to download individual files/folders to the development board. Select the file/folder in the project that you want to download to the development board and use this feature in the drop-down menu.
Note that if there are files/folders with the same name on the development board, the download will overwrite the existing files/folders.
By entering the command os.listdir()
in repl, you can check whether the
corresponding file/folder has been downloaded successfully. Similarly, you can also use
the corresponding command to delete the file or folder in repl. The command list
is as follows:
Click the synchronization button in the lower left corner to start the project synchronization function. This feature synchronizes all directory files in the local project to the development board's file system. This feature is recommended to be used after the code is debugged, without the need to synchronize the project frequently during debugging.
After the project synchronization is completed, the list of files in the DEVICE can be seen in the DEVICE FILES LIST column.
This plug-in supports intelligent code completion and syntax checking based on MicroPython syntax, which is a powerful tool for developing MicroPython code. It allows developers to write functions while looking at API parameter hints, and it gives them a visual reminder that makes it easier to find errors in code.
For more information about RT-Thread Micropython, please reach RT-Thread Github.
An open-source embedded real-time operating system born in 2006 that provides developers with a wide range of components and 200+ software packages.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The statistics are fetched from merged PR on the Github master code branch.
We want to acknowledge and thank the following community members for their contributions to RT-Thread in April. They are:
xckhmf、 luhuadong、DavidLin1577、Keyun-Johan、supperthomas、qzhang1535 、tekkamanninja、majianjia 、 z14git、DeclanHuaChen 、jch12138 、GitHubIDforRoger and Nuclei System Technology.
Thanks to all contributors who share their time, energy, and talent to help RT-Thread. Thank you very much!
# Add Nuclei to main README.md
# Modify nrf5x nrf52840 for [No Softdevice]&[RT_USING_USER_MAIN]
# Fix aarch64 warning
# Add Libraries when when run ‘scons — dist’
# Add Nuclei RISC-V processor support
# Fix the stack overflow bug; Change the note encoding from GB18030 to UTF-8
# Add raspi4 bsp
# Fix the issue when socket_new() returns error
# Add nrf5x bsp
# Update bsp for mini2440
# K210 drv uart upstream
# Fix the STM32 HAL SPI timeout bug
# Add the configure option ‘PWM1_CONFIG’
# Export file examples to MSH
# Fix the stack overflow bug
# Remove the duplicate definition of ‘mode_t’
# Fix some spelling mistakes
# Update mini2440 BSP
# De-initialize ‘tx_dma->data_queue’ when close the UART to avoid memory leak
# MIPS: Fix FPU compile error for ls1bdev
# Add the clear command for FINSH
# Add stm32l010 st-nucleo BSP,and pass the LED flicker test and msh console output
# Add the APIs ‘rt_object_get_length()’ and ‘rt_object_get_pointers()’, which pass tests in QEMU-VExpress-A9
# Add ls2k BSP
# Add rt_data_queue_deinit
# Fix x1000 memory use bug
# Add soc timer cntpct
# Fix the spelling error of ‘NETDEV_IPV4’ in ‘netdev’, which causes the resolve error in ‘inet_ntop’
# Modify the ‘link.sct’ path of stm32h743-st-nucleo MDK project and the ‘icf’ path of stm32f429-st-disco IAR project
# Modify the ‘link.sct’ path of MDK project
# Fix the compiling error ‘pid_t undefined’ in libc
# pms_series: Digital universal particle concentration sensor driver library
# multi_rtimer: a real-time and low power software timer module
# nrf5x_sdk:Software development kit for the nRF52 Series and nRF51 Series SoCs
# rx8900:Extern RTC driver for rx8900
# nuclei_sdk:Nuclei RISC-V Software Development Kit
# bmi088: Universal sensor drive package
# nrfx:Standalone set of drivers for peripherals present in Nordic Semiconductor’s SoCs
# UrlEncode:a simple tool to Encode/Decode Url
# bc28_mqtt:connect to AliCloud with Quectel BC28 model
# cmux:connection multiplexing protocol for RT-Thread, support GSM0710 .etc.
# hmc5883:bmi088 software package
# max6675: Digital temperature sensor package
# tmp1075: Digital temperature sensor driver package
Thanks to panrui 、Jonas、MYGuo、xiangxistu、luhuadong、 jch12138、xckhmf、supperthomas、Forest-Rain、MrpYoung for contributing the software packages.
RT-Thread Studio:
- Upgraded from v1.0.4 to v1.0.6, which adds new features and improves user experience.
- Add entrances to import MDK/IAR projects; ROM/RAM usage statistics are shown in the compile results.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The statistics are fetched from merged PR on the Github master code branch.
First of all, we want to acknowledge and thank the following community members for their contributions to RT-Thread in March. They are: Greed-island、qz721、 leeehui、DavidLin1577、Sunwancn、luhuadong、gyd0317、sheltonyu、shawn1221、cliff-cmc、zhao0116、supperthomas、redocCheng、 Chinese66、tanglj86、djndl1 and Artery Technology company.
Also, thanks to all contributors who have shared their time, energy, and talent to help RT-Thread. Thank you very much!
# Update RT-Thread repo readme, add more introduction about rt-thread.
# Fix system memory leaks that rt_realloc might cause.
# Fix bug#3484” USB can’t properly recognize a composite device”.
# Fix the warning issue of the hifive1 BSP with scons.
# Optimize UART driver.
# Fix the error caused by some macros that are defined with values when running ‘scons — target=eclipse’.
# Fix usb stack overflow issue.
# Fix compiling errors in some of the STM32 due to the absence of the corresponding ADC channel macro definitions in the HAL library.
# Add Aarch64 cache API.
# Add STM32L1 HAL DRIVER.
# Fix the issue “MMC protocol stack allows the driver to set a frequency higher than highspeed to drive eMMC”.
# Add sc mode auto-switching.
# spi: support switching between slave mode and master mode at runtime.
# Fix stack overflow issue in sdrv_crypto.c.
# Add stm32l496zg-Nucleo BSP.
# Add the support for on-board AP6181.
# Fix the issue “bank2 of stm32f103vgt6 flash can’t work”.
# Fix the issue” the long startup time caused by the protocol stack trying an invalid line width”.
# Fix the issue “the SD card can not be used if formatted into only one partition”.
# Fix the issue y-modem can not read the file size.
# Add Artery at32 BSP.
# Add support to open PM peripherals in cubemx.
# Add ST NUCLEO-F410RB BSP.
# Add C++ support in clock_time.h.
# Add drivers for the 64-bit raspberry: gpio, wdg, hdmi and mbox.
# Fix the issue of UART DMA transfers in STM32 BSPs.
# Add interfaces to the WLAN framework of bare-data sending, frame-filtering management and callback registration.
(RT-Thread has a total of 204 packages now)
hdc1000: hdc1000 sensor driver base on RT-Thread sensor frame.
max7219: A MAX7219 package for the digital tube.
bmp280: bmp280 iic drive.
SHTC1: SHTC1 sensor driver package, support: temperature, humidity.
BMP180: This is the BMP180 sensor driver package, support: barometric, temperature.
DS3231: Extern RTC driver for ds3231.
beep: Control the buzzer to make beeps at different intervals.
easyblink: Blink the LED easily and use a little RAM for RT-Thread or RT-Thread Nano.
joylink: Joylink Cloud SDK for IoT platform.
kawaii-mqtt: A kawaii mqtt client based on the socket API, has a very simple API interface, supports QoS2, mbedtls.
lkdGui: lkdGui is a graphical interface for monochrome displays.
plccore: plccore for RT-Thread.
sys_load_monitor:system load monitor.
Check out more information about Software Packages, please visit Here!
RT-Thread env: Env updated to v1.2.0, also add GIT tool.
RT-Thread Studio: Studio is upgraded from V1.0.2 to V1.0.4, optimized the user experience and added new features, such as build log simplified output and detailed output, link.lds script graphics editor, and more.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463/?modal=admin_todo_tour
Email: contact@rt-thread.org
RT-Thread has standard version and 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 micro controller unit (MCU) system. This article would go into detail about the Nano version of RT-Thread.
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:
Supported Architecture: ARM: Cortex M0/ M3/ M4/ M7 etc, RISC-V and more.
1. Simplified source code
Different from the standard version, Nano doesn't have Scons buidling system, and no Kconfig and Env configuration tools, even some device frameworks and components that are meaningful to the standard version have been removed from Nano version. Nano is just a kernel.
2. Easy to port
Benefit from the minimalist nature of Nano, it is quite easy to port Nano to a specific platform. By adding Nano source files to the project, 90% of the porting efforts are done. And Commercial IDEs such as Keil MDK and Cube MX even integrated the Nano packages that can be added to project with a single click.
3. Easy to use
It's easy to create an application using RT-Thread Nano. Easy to tailor: Nano's config file is rtconfig.h, it lists all the macros of the kernel, some of it has been turned off, you could turn it on when you need. Easy to add FinSH: FinSH component doesn't depend on the device framework, so it is easy to port to the Nano and require only two functions to implement. Opt in drive library: Many firmware drive libraries provided by manufacturer are available, for example, STD lib from ST, HAL lib, LL lib, etc. Documents: RT-Thread offers developers with a set of documents that can be found on RT-Thread Github, and you are welcome to request the documents from RT-Thread official Twitter.
Lower resource consumption: Nano uses a fairly small size of RAM and ROM, for example, with semaphore and mailbox functionality, two threads (main + idle) run, requiring only about 1KB RAM and 4KB ROM.
Nano resource requirements case: two threads (main + idle), for Cortex M3 architecture, MDK project with -O3 reports:
Total RO Size (Code + RO Data) 4000 ( 3.91kB)
Total RW Size (RW Data + ZI Data) 1168 ( 1.14kB)
Total ROM Size (Code + RO Data + RW Data) 4092 ( 4.00kB)
Note: If the project needs rich components, drive or software packages, please take the RT-Thread standard version.
RT-Thread Nano follows Apache License version 2.0. All the real-time operating system kernel and open source components can be used free of charge for commercial products, there is no potential commercial risk and you will not being request to publish application source.
Hands on experience is way more valuable, we would like invite you to experience RT-Thread Nano Version, download it from : https://github.com/RT-Thread/rtthread-nano
Also, if you have any great ideas for RT-Thread, please contact RT-Thread or make contribution on RT-Thread Github directly, Issue and Pull Request are all welcomed.
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
RT-Thread is thrilled to start an exciting journey with LVGL, the open-source graphics library for embedded GUI.
LVGL has registered as a software package of RT-Thread. By using Env tool or RT-Thread Studio IDE, RT-Thread users can easily download LVGL source code and combine it with the RT-Thread project. The RT-Thread community has port LVGL to several BSPs
Get in more details: https://docs.lvgl.io/master/get-started/rt-thread.html
LVGL (Light and Versatile Graphics Library) is a free and open-source graphics library providing everything you need to create an embedded GUI with easy-to-use graphical elements, beautiful visual effects and a low memory footprint.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread IoT OS, a leading open-source operating system platform for the Internet of Things (IoT), today announced it has joined RISC-V International, a global open hardware standards organization, to help expand the open-source embedded ecosystem, bring innovative and ground-breaking embedded technologies to open source developers and accelerate the next generation of IoT projects!
RT-Thread has been building an open-source operating system platform for over a decade, supporting all the mainstream architectures. The free and open RISC-V architecture offers exciting new possibilities for this industry with its modularity, extensibility, and scalability.
Over the past few years, RT-Thread has actively been involved in the RISC-V ecosystem by offering support for many chips and hardware boards based on the RISC-V architecture, such as HiFive, GD32V103, AB32VG1, K210,CH32V307, and Allwinner D1, along with other solutions for RV32, RV64, and RV soft cores. The all-in-one IDE RT-Thread Studio also provides support for RISC-V chips. With its support for RISC-V QEMU functionality, developers can experience the features of RISC-V without having a board on hand.
“In addition to the growing number of enterprises joining the RISC-V ecosystem, we’re pleased to see other open source communities like RT-Thread join our efforts to drive a new era of silicon innovation,” said Calista Redmond, CEO of RISC-V International. “RT-Thread has already seen significant traction in the IoT space, so we look forward to having the organization help further accelerate the growth of RISC-V based IoT devices.”
RT-Thread will continue working to drive RISC-V momentum around the globe and accelerate the adoption of RISC-V technologies in IoT projects. RT-Thread is also looking forward to working with partners to explore more possibilities for the open-source embedded ecosystem!
RT-Thread is an open-source embedded real-time operating system, with its rich middle-tier components and extensive hardware and software ecosystem delivering robust support for the Internet of Things (IoT) industry. Since its inception in 2006, RT-Thread has powered 1 billion devices, which includes applications for wearable devices, smart home appliances, energy, automotive electronics, medical electronics, consumer electronics, and many other industries.
RT-Thread’s mission is to help open-source projects benefit more people!
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread has entered into a partnership with WCH Microelectronics to promote more applications in the RISC-V ecosystem. WCH is known in the chip industry for providing powerful chips that focused on connectivity and control. This cooperation will bring both projects into a position to create a RISC-V development application ecosystem, based on the WCH RISC-V MCU and running the open-source RT-Thread IoT operating system. The two sides shared the same goal of making RISC-V MCU application development easy and efficient.
WCH Microelectronics RISC-V MCU will be natively equipped with RT-Thread IoT OS and onboard RT-Thread Studio IDE and WCH Mounriver Studio IDE to provide developers with a complete development ecosystem and engage a more user-friendly development experience. Meanwhile, the two sides will carry out all-round cooperation in the developer community construction and university programs, etc., and actively promote the development of the RISC-V application ecosystem.
Luckily, we’ll have Yang Yong CTO of WCH Mircoelectronics gives a presentation at the RT-Thread IoT OS Global Tech Conference on Sep 16–17 to share his vision on RISC-V for Embedded MCUs! Join us to learn more: https://forms.gle/8W1j2ZhCSLKFfyFQ8
Can’t wait to tell, WCH Mircoelectronics will giveaway their RISCV-based dev boards for participants at RT-Thread IoT OS Global Tech Conference! Don’t miss out on the chance to get one!
Free register to RT-Thread IoT OS Global Tech Conference:
https://forms.gle/8W1j2ZhCSLKFfyFQ8
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread IoT OS, an open-source, neutral, and community-based IoT platform today announced that it has joined the STMicroelectronics Partner Program.
RT-Thread has been collaborating with ST since 2008 when many manufacturers chose to run RT-Thread on STM32 microcontrollers. The developers can take full advantage of the combination of the STM32 and RT-Thread to experience a more convenient and fast-speed development process to come out with more high-performance products.
RT-Thread offers comprehensive Board Supported Packages(BSP) that are ready-to-use for the STM32 series products including the STM32F0/F1/F3/F4/F7 series, STM32G0/G4 series, STM32L0/L4 series, STM32H7 series, STM32MP1 series, and STM32WB series (BSPs are stored on RT-Thread Github). In 2019, RT-Thread Studio one-stop integrated development environment (IDE) was launched, with a powerful graphic configuration system and 270+ out-of-box software packages and a wide range of components resources to offer a way for STM32 developers to simplify software-development complexity.
RT-Thread has also launched many activities with ST, customized the STM32 IoT board, published a book Programming with RT-Thread on STM32, and held online & offline trainings and developer events.
STMicroelectronics, a global semiconductor leader serving customers across the spectrum of electronics applications created the ST Partner Program to speed customer development efforts by identifying and highlighting to them companies with complementary products and services. Moreover, the program's certification process ensures that all partners are periodically vetted for quality and competence. For more information, please visit www.st.com/partners.
RT-Thread, an open-source embedded real-time operating system (RTOS) that provides a wide range of components and 270+ software packages for the Internet of Things (IoT). RT-Thread RTOS has a Standard Version and Nano Version that respectively target different resources IoT devices, by the beginning of September 2020, RT-Thread also launched its Microkernel operating system RT-Thread Smart that positioned as a professional high-performance micro-kernel operating system for real-time applications, to benefit the industries in Security( such as IPC Cameras), Industrial Control, Onboard Devices, Consumer Electronics and so on.
RT-Thread Studio Global Version V2.0 released along with this announcement, free download RT-Thread Studio.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Alan Kay said: “Simple things should be simple, complex things should be possible”. This sentence was the inspiration for the founder of RT-Thread to stick to his beliefs.
RT-Thread was born in 2006, it is an open source, neutral, and community-based real-time operating system (RTOS).
RT-Thread has Standard version and Nano version:
RT-Thread has not only a real-time kernel, but also rich components. Its architecture is as follows:
It includes:
RT-Thread supports many architectures, and has covered the major architectures in current applications. Architecture and chip manufacturer involved:
The main IDE/compilers supported by RT-Thread are:
Use Python-based scons for command-line builds.
RT-Thread has received many many supports from the community developers when it starts. Now, RT-Thread has gathered 200+ software packages which are created by the community developers also RT-Thread had 9357 commits and gained 4.2K stars on Github.
Real-time system (RTOS) is increasingly widely used in the high-end Internet of Things (like, AIoT) because of its low cost, high real-time, and fast start-up characteristics, soon or later, more and more RTOSs would support multi-kernel SMP, AI, audio & video and this is inevitable. In near future, RT-Thread Studio IDE, next-generation microkernel architecture, AI frameworks and more will all be released step by step.
This is a new world of RTOS.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Dear Participants. On behave of the Contest Partners and Contest Host of the Embedded GUI Event, we want to send a massive thanks to anybody who participated in our contest and helped make it a success! Thank you all for your creativity and passion which is evident in each project you turned in!
We’re proud to announce our Winners.
1st Prize:
Fabian Näf
VUHFRadio https://github.com/NotBlackMagic/VUHFRadioGUI
2rd Prize:
Marcelo Varanda
Guitar Pedals https://github.com/Varanda-Labs/rt-thread/tree/guitar-pedals
Qiao Jijun
Desktop Electronic Albums https://github.com/piaoxuebingfeng/rt-thread-lvgl-album
3rd Prize:
Yu Jianghao
On-board ADAS Driver Assistance Panel https://github.com/CoreBoxer/ADAS_panel
Juan antonino flores
A Protocol for Lot Control of Different IoT Devices https://github.com/jeancode/Ovni_NuvotonN9h30/
Ding Ning
Smart Control Gateway https://github.com/dingning/rt1060_lvgl.git
Cheng Jili
Portable Device Inventory Management System https://github.com/chengjili/components-lib
Song Yituo
ElectronBili https://gitee.com/sytnocui/ElectronBili
Thanking each of you for trusting us and supporting us to date. Our upcoming contest will start soon. Get ready, you just might be the subsequent winner.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread Env is an auxiliary tool with a TUI (Text-based user interface) used to create an RT-Thread project.
- Fix concurrent compile issue (scons -j12) and add the win32py module
- Python 2.7.18 (the final version of the Python2, 32-bit/64-bit)
- gcc-arm-none-eabi-10.3–2021.10-win32
- Requests (2.27.1), scons (3.1.2) modules upgraded to the latest
- Other built-in modules, pip installation modules upgraded to the latest
Download RT-Thread Env: https://www.rt-thread.io/download.html?download=Env
RT-Thread Env tutorial video: https://youtu.be/dEK94o_YoSo
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
Today, we’re introducing RT-Thread V4.1.1. This release adds support for some new performance and fixes some issues.
We want to acknowledge and thank the following community members for their contributions to RT-Thread, they are:
100ask-Alen, Aligagago, BreederBai, BruceOu, CaocoWang, Chester guo, Dengguiling, Fan Yang, Forest-Rain, FrankTan, Freey0, GPSBabel, GUI, HubretXie, Isaac Rose, Jamie, Jiang Runnan, Jianhui Zhao, JonasWen, Judd, Kevin Liu, Martin, Meng, Miaowulue, MysticBoy, NationsHuanghanbin, Not Black Magic, Stanley Lwin, Steven-LiuSF, SunJ, Ting Liu, Wayne Lin, Wu Han, Yang sheng, Yanlineng, Yunjie Gu, Zhang Jianfei, a1012112796, blta, breederbai, cha331, changzehai, charlown, chenbin, chinky, chunyexixiaoyu, cmbjxxiao, dongly, emuzit, gbcwbz, hipeanut, jianbojason, jiezhi320, levizhxl, lgnq, liyangyang, liuhy, luhuadong, qipingqiu, rewine, ririyeye, sheltonyu, shinu, shiwa, snikolaj, solar_li, supperthomas, tangzz98, tfx2001, thewon86, ueJone, wang0huan, wolfJane, woody, wudiyidashi, wugensheng, xfwangqiang, xiaoxiaolisunny, xinyigao, xjy198903, zhouji, zuozuojia, DaDunDeXiaoFangChe, Liang Sheng, Chen Yingchun and Meco. NXP Semiconductors、Renesas Electronics、WCH Electronics、Nuvoton Technology、Nations Technologies、HPMicro、Geehy Semiconductor、XIAOHUA Semiconductor、Qingdao Eastsoft, and Chinese Academy of Sciences PLCT Laboratory.
Thanks to all contributors and companies who share their time, energy, and talent to help RT-Thread. Thank you very much!
The kernel part adjusts the following settings according to the usage requirements:
The component section continues to be optimized according to the existing main line, including:
Support for BSP:
New Added BSP:
For more details please check out the Release Log
Download V4.1.1: https://github.com/RT-Thread/rt-thread/releases/tag/v4.1.1
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The 6-day long RT-Thread Tech Conference started on May 27 for the China Session 3 days and on June 1 we continued the Global Session. The 6-day long event closed on June 3, has a total of 60 topics featured, and with over 22000 online attendees. We’re so grateful with the enthusiasm and contribution that comes from community contributors, manufacturing partners, universities, and enterprises.
It's every one of you making the open-source RT-Thread IoT OS project powerful. Wish all of us a lot of enthusiasm, energy, shared trust, and resolve on our way towards achieving a better future for open source.
Welcome to build, contribute, submit PR, and anything to help RT-Thread grows! RT-Thread Github Repository: https://github.com/RT-Thread/rt-thread
If you missed the event, here's a recap: https://youtu.be/vvfbXh8RAl0
The slides will be shared on RT-Thread Club soon, join the Club. https://club.rt-thread.io/
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
As the time for the 2022 RT-Thread IoT OS Global Tech Conference approaches, we’re happy to attach more details to this conference so you’ll know what to expect.
Free Register: http://bit.ly/3GNujSQ
The virtual conference will feature 29 trending topics, starting from June 1 to June 3. Here’s the Agenda:
We’ll randomly giveaway the RT-Thread inside Dev Boards for participants, each day 3 times, and on June 3, we’ll have a Super Luxury Dev Boards Package to give away, so keep closely with the conference and stay tuned, you’re the lucky one!
If you haven’t registered for the conference, click here to join us, and save the calendar! Free Register: http://bit.ly/3GNujSQ
About Open Source RT-Thread IoT OS Project
RT-Thread is an embedded real-time operating system, with its rich middle-tier components and great hardware & software ecosystem delivering great support for the Internet of Things (IoT) industry. Born in 2006, till now, RT-Thread has powered 1.5 Billion devices, applied in Wearable Devices, Smart Home Appliances, Energy, Automotive Electronics, Medical Electronics, Consumer Electronics, and many other industries.
RT-Thread, a community-powered open source project, we also want to take this time to thank all contributors who shared their time, energy, and talent to help RT-Thread grow! Working alongside the 150K+ community developers strongly inspires RT-Thread to continue exploring and delivering the Best Class of IoT operating system.
Aims to Let Open-source Project Benefit More People!
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
2022 RT-Thread IoT OS Global Tech Conference is scheduled for June 1–2. We’re looking for cool and creative embedded and IoT ideas. Check out our call for proposals & apply today!
https://forms.gle/WUX6oGaVgzk7r6fb6
A quick recap of the 2021 RT-Thread IoT OS Global Tech Conference, please check out RT-Thread YouTube Channel: https://youtu.be/nFiuTqH1P7I
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
That’s a wrap! Thanks to 1500 People for registering RT-Thread IoT OS Global Tech Conference virtually on Sep16-Sep17. We had over 20 topics presented, featured on the open-source RT-Thread OS projects and the new development RT-Smart Micro-Kernel OS, RISC-V ecosystems and associated manufacturers introduced, STM32 ecosystems, embedded projects showcase, IoT security, trending technical knowledge such as AI, ROS, Rust, Micropython, and more!
Thanks to all speakers who shared their time and expertise! Thanks to all developers who attended this conference, posted comments to share with each other. Also, we want to thank the platform Dzone, Electronmaker, Embarcados, GFOSS, Hackernoon for helping us to share the conference.Thank you all for making this conference a huge success!
The recorded videos of each presentation will be shared soon. Make sure that you’re following RT-Thread social media platforms to stay up to date with everything that’s going on!
YouTube | Twitter | Facebook | LinkedIn
Please also take one minute to fill out the after-conference survey. Your feedback would be very precious and valuable for open source projects!
https://forms.gle/8LaoNUyWZsRvvdD2A
We also prepared the Embedded Get Started Guide E-Book for each participant, the E-book will be sent to your email right after receiving your email address from the survey form.
RT-Thread is an embedded real-time operating system, with its rich middle-tier components and great hardware & software ecosystem delivered great support for the Internet of Things (IoT) industry. Born in 2006, till now, RT-Thread has powered 1 Billion devices, applied in Wearable Devices, Smart Home Appliances, Energy, Automotive Electronics, Medical Electronics, Consumer Electronics, and many other industries.
RT-Thread, a community-powered open source project, we also want to take this time to thank all contributors who shared their time, energy, and talent to help RT-Thread growing! Working alongside the 100K+ community developers strongly inspires RT-Thread to continue exploring and delivering the Best Class of IoT operating system.
Aims to Let Open-source Project Benefits More People!
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
As the time for RT-Thread IoT OS Global Tech Conference approaches, we’re happy to attach more details to this conference so you’ll know what to expect. The virtual conference will feature 20+ trending topics, range from the latest developments in open-source RT-Thread IoT OS projects to new fields of activities.
Join us Now: https://bit.ly/3zb5E7c
As the time for RT-Thread Io OS Global Tech Conference approaches, we’re happy to attach more details to this conference so you’ll know what to expect. The virtual conference will feature 20+ trending topics, range from the latest developments in open-source RT-Thread IoT OS projects to new fields of activities.
1. All participants will receive an Embedded Get Started Guide E-Book after the conference.
2. Dev Boards GiveAway
We’ll randomly giveaway the RT-Thread inside Dev Boards for participants, each day for 5 times, 3 times in a random time during the conference and 2 times in a fixed time as listed on Agenda, so keep closely with the conference and stay tuned, you’re the lucky one!
3. Super Luxury Dev Boards Pack GiveAway
At the end of the day, we’ll give away A Super Luxury Dev Boards Pack that includes many Super Cool Dev Boards.
If you haven’t registered for the conference, click here to join us, and save the calendar! Free Register: https://forms.gle/8W1j2ZhCSLKFfyFQ8
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The first-ever RT-Thread IoT OS Global Tech Conference will be holding from September 16–17,2021 features embedded technologies, new projects showcase, community contributors track. We welcome embedded developers from across different countries to come together to exchange ideas, showcase projects, identify solutions, discuss future strategies, and provide mutual learning opportunities on a wide variety of topics, let’s exploring embedded technologies.
Free Register: https://forms.gle/8W1j2ZhCSLKFfyFQ8
RT-Thread is an embedded real-time operating system, with its rich middle-tier components and great hardware & software ecosystem delivered great support for the Internet of Things (IoT) industry. Born in 2006, till now, RT-Thread has powered 1 Billion devices, applied in Wearable Devices, Smart Home Appliances, Energy, Automotive Electronics, Medical Electronics, Consumer Electronics, and many other industries.
RT-Thread, a community-powered open source project, we also want to take this time to thank all contributors who shared their time, energy, and talent to help RT-Thread growing! Working alongside the 100K+ community developers strongly inspires RT-Thread to continue exploring and delivering the Best Class of IoT operating system.
& Let open-source project benefits more people!
The Call for Speakers is Opening!
Submission Link:
https://forms.gle/ZFB3zww5spUWuziY6
Submission Deadline: August 8, 2021
Speaker Notification: August 16, 2021
Enquiry Email: contact@rt-thread.org
https://forms.gle/8W1j2ZhCSLKFfyFQ8
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread Studio IDE v2.1.0 is releasing! let’s head to see what’s NEW in its v2.1.0.
RT-Thread Studio V2.1.0 offers a tool associated with tutorials, which helps developers create the BSP visually. Developers can now easily make a board support package (BSP) and upload it online via SDK Manager. The BSP tool supports configuring graphically the information of dev boards, documentation, and projects. The prompt of every configuration item is shown in front of the interface to help you understand. Also, this time, the Studio team gives a sweet thought. They make the configuration information is available for preview! Check out this tutorial to make a BSP by yourself.
More than 40 New board support packages are supported in RT-Thread Studio V2.1.0, so we now have a total of 70 BSPs, covering eight vendors such as Allwinner, AlphaScale, ArteryTek, Bluetrum, GigaDevice, MicroChip, MindMotion, NXP, ST, TI, Synwit. In particular, the RT-Thread V4.0.3 source resource pack has been added on RT-Thread Studio V2.1.0.
RT-Thread Studio v2.1.0 supports bilateral synchronous co-development with the MDK project. You can import an existing RT-Thread MDK project directly into RT-Thread Studio, and the configuration of the MDK will be automatically synchronized with the RT-Thread Studio project. RT-Thread Studio provides a bilateral synchronization mechanism that allows the project to switch between MDK and RT-Thread Studio at any time. The MDK configuration feature is also supported to perform configuration items such as C/C++, ASM, Linker and automatically synchronized with MDK projects when the configuration is completed. If you modify some configurations on the MDK, you can manually trigger synchronization at RT-Thread Studio to sync the modified configurations with RT-Thread studio projects.
RT-Thread Studio v2.1.0 is also in collaboration with STM32CubeMX, where you can open CubeMX Settings directly in RT-Thread Studio. After configuration, click the button GENERATE CODE, and the code generated in CubeMX will automatically be copied into the RT-Thread Studio project directory, no further modifications are required. Then it is automatically added to the compilation. We only need to compile, download and debug programs as usual. Check out this tutorial for more information:
QEMU in RT-Thread Studio v2.1.0 has added two simulators for the stm32f401 and the stm32f410 series respectively. You can download the latest version of QEMU in SDK Manager. When configuring QEMU, select the emulator in the pull-down box of the Emulator configuration bar. The configuration interface has also made some updates: First, the configuration of the serial port was added in this version. When a different serial is selected, the standard IO device is relocated to the corresponding serial port. Second, SD Card Memory is now optional and compatible with situations where an SD card is not required. More importantly, the commands such as -show-cursor are moved to Extra Command, where you can customize the parameters of these commands to make QEMU more flexible to use.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
The Raspberry Pi Pico is now an official target in the RT-Thread Studio IDE, and third-party RP2040 boards are likely to follow shortly.
RT-Thread, an open source real-time operating system (RTOS) designed for the Internet of Things (IoT), has become the latest platform to boast support for Raspberry Pi's freshly-launched RP2040 microcontroller — and the increasing number of third-party development boards on which it appears.
Launched late last month, the RP2040 is the first microcontroller to come from Raspberry Pi — and the first product of its in-house application-specific integrated circuit (ASIC) team. Designed for high performance at a low cost, the part arrived with an official C/C++ software development kit (SDK) and MicroPython port — and since then a number of other platforms, including CircuitPython and Arduino IDE, have been confirmed, not to mention a wealth of RP2040-powered third-party boards to go alongside the official Raspberry Pi Pico.
Now, RT-Thread has confirmed that its open source real-time operating system (RTOS), which began development in 2006 and has been ported to architectures ranging from x86 and Arm to RISC-V and Xtensa, is supported on the RP2040 — and, by extension, on RP2040-based development boards including the Raspberry Pi Pico.
"Pico is now available in RT-Thread Studio IDE," the organization announced today. "[We're] looking to make Raspberry Pico development simple and all in one-stop."
At your request! @Raspberry_Pi PICO is now available in RT-Thread Studio IDE! Looking to make Raspberry Pico development simple and all in one-stop.
— RT-Thread IoT OS (@rt_thread) February 1, 2021
Meet the latest updates: https://t.co/vSqsQtMvoc#RP2040 #Embedded #OpenSource #Programming #RTOS pic.twitter.com/Qdc2nrPsbQ
The latest release of the RT-Thread Studio integrated development environment (IDE) allows the Raspberry Pi Pico to be selected as a target device for a project, bringing in the latest RT-Thread RTOS build and support for serial-wire debug (SWD) on the Pico's SWD header. Once third-party RP2040 boards hit the open market, they're likely to appear alongside the Pico in short order.
The latest version of RT-Thread Studio IDE, with RP2040 support, is now available on the official website.
Source: Gareth Halfacree
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
We are thrilled to announce the release of RT-Thread v4.0.3 at the beginning of 2021.
__RTTHREAD__
delay_util()
rt_system_object_init()
and
rt_system_tick_init()
in
kernel
RT_USING_FINSH
SAL_INTERNET_CHECK
to
enable or disable network state checkrt_pin_get()
to PIN
drivers
--target=Eclipse
rtconfig.h
by running scons
--menuconfig
tackanalysis
makeimg.py
when
running in
LinuxWebsite: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
WE ARE IN DECEMBER and 2021 is just around the corner, we are so thrilled to release RT-Thread Studio v2.0 before the end of Dec 2020. First things first, we want to thank RT-Thread community developers who contributed their time, energy, and talent to help RT-Thread Studio progress by giving us feedback, great suggestions, and 100% supports.
RT-Thread Studio Integrated Development Environment (IDE) was launched in 2019, with a powerful graphic configuration system and 270+ out-of-box software packages, and a wide range of components resources. All of this offers a way for developers to simplify the complexity of software development. Now let’s head to New Features of RT-Thread Studio V2.0!
V2.0 provides General Project Wizard to support more platforms, frameworks, boards, examples and libraries.
In the process of debugging via J-Link, some RT-Thread community developers have feedback that some equipment they are debugging has potential safety risks, for example carrying high voltages, which makes remote debugging necessary. This version of RT-Thread provides remote downloading and debugging supports. Connect J-Link to the machine and start the JLinkRemoteServer, modify the debugging configuration on the local machine to specify the IP connection mode and IP address. After this, you could control the remote J-Link to download and debug programs from thousands of miles away.
In previous versions, the details and the documents of the dev board only present while creating a project. After the project is generated it is very inconvenient to track these resources again. Now an entry for viewing the development board details and documents is reserved in the project, double-click can easily to check out all the details.
In v2.0, STM32F4 QEMU network simulation is available, making it possible to develop network applications without the STM32F4 development board at hand.
Sometimes we need to clean the project and then rebuild the project from a fresh start. In previous versions, we needed to perform two steps in sequence. Now we only need to click the Rebuild button on the toolbar, to carry out the entire cleanup and rebuild process in one step.
Note that even if you have installed RT-Thread Studio before, the new v2.0 needs you to download a fresh one from the RT-Thread website, you are not suggested to internally upgrading.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread creates a place for you to ask questions, share experiences, raise your skillset, and make progress together with many many open-source advocates in RT-Thread Club. Join us now to win 10 Points!
RT-Thread offers 5 independent sections [RT-Thread Standard] [RT-Thread Nano] [RT-Thread Smart] [RT-Thread Studio IDE] [Embedded], providing developers with a full ranged platform to learn embedded development. Create posts according to question type on the corresponding section.
Sharing knowledge and inspiration is important in opensource community, we highly encourage you to write articles, get your thoughts organized, and spread your knowledge to empower more people. Meanwhile, when you share with others, it helps deepen your own knowledge and engrains what you know. It's a win-win.
You might have a comprehensive knowledge of or skill in a particular area, RT-Thread creates the Experts Channel for you, apply to be the experts in your area, and your profile will be shown on the Community Expert Page, developers can directly ask for your help! Share your professional expertise to help more people and build your reputation in the OpenSource community!
By registering RT-Thread community from 10th Dec to 20th Dec, you’ll receive 10 Points and it will be distributed to your RT-Thread Community account from 21st Dec.
RT-Thread Points Exchange Center will soon be released, it is a platform for you to Exchange your points into Community Gifts, Amazon Gift Cards, and more!
→ Register Now! RT-Thread Club
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
With a lot of market research and 2 years of Hard Work Development, the RT-Thread Research & Development Team successfully developed the RT-Thread Smart Micro-Kernel Operating System. RT-Thread Smart is aimed primarily at mid- to high-end processors with MMU(Memory Management Unit), providing a more competitive operating system-based software platform for different industries.
RT-Thread Smart is positioned as a professional high-performance micro-kernel operating system for real-time applications, to benefit the industries in Security( such as IPC Camera), Gateway, Industrial Control, On-board Device, Consumer Electronics and so on. Among the division of traditional IoT operating systems, a micro-kernel operating system is the only one that can fill the gap between traditional RTOS and large operating system Linux, achieving the best balance among real-time, cost, security, start-up speed, and so on.
Compared to macro kernel structure, the Micro-kernel contains an efficient kernel, several separate system service components and drivers.
Micro-kernel supports putting system service components or drivers into kernel states to run on demand, for achieving a better performance.
Micro-kernel also supports to move most of the system components and drivers of the system outside the kernel, to run as a separate service process, and interacting with the service process through messages.
This reduces the coupling between the components and the kernel, making the kernel design more concise. Meanwhile, the inter-process resources are isolated so that the failure of individual services will not affect the normal function of the kernel and other services, making the system more secure and reliable.
RT-Thread Smart shows extraordinary performance on resource consumption, start-up time and real-time features.
Resource consumption:The compressed RT-Thread Smart kernel is 217 KB in size, the root file system 127 KB and memory usage 1.9 MB.
Start-up time:With the full supports of filesystems, network protocol stacks and multimedia, it takes 3 to 5 seconds for RT-Thread Smart to finish the startup process. If without running any functional components RT-Thread Smart only requires less than 500 ms to start up. If the persimmon UI component is integrated, the time that the whole system needs from power on to the UI running is about 1.7 seconds.
Real-time:The interrupt latency is less than 1 us, which meets most application cases with strict real-time requirements.
RT-Thread Smart is a lite kernel with its system services running in the user mode. It supports the traditional RT-Thread API to inherit the existing software environments. RT-Thread Smart is also built through `scons`, which makes it easy to integrate RT-Thread online software packages. What’s more, POSIX interfaces are supported to port Linux applications on it.
Meanwhile, the RT-Thread self-developed one-stop development tool RT-Thread Studio IDE fully supports RT-Thread Smart, which lowers the barriers to use and improves work efficiency.
As always, RT-Thread Smart will be open-source and applies Apache License v2.0. The code will be released in October.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread OpenSource Internet of Things(IoT) operating system has self-developed a one-stop development tool: RT-Thread Studio.
RT-Thread Studio IDE has an easy-to-use graphical configuration system and a wealth of software packages and components resources. RT-Thread Studio has the features of project creation and management, code editing, SDK management, RT-Thread configuration, build configuration, debugging configuration, program download, and debug. Also, it combined the graphical configuration system with packages and component resources, reducing the duplication of work, and improving the development efficiency.
With support for QEMU simulator and DAP-LINK debugger. Check out how QEMU simulator and DAP-LINK debugger works in RT-Thread Studio.
QEMU is s cross-platform simulator, capable of simulating the execution environments of various evaluation boards, which has been integrated into RT-Thread Studio. Now the following features are supported:
Create the project based on QEMU by default
Configure the command-line arguments for QEMU via GUI
Debug programs by inserting breakpoints
Hardware available in QEMU:
MPU
Hardware FPU
Clock
UART1
FLASH
Touch Screen
SRAM
CCM SRAM
FMC
RGB565 LCD interface
DAP-LINK is an open-source programmer maintained by the ARM official. It was called CMSIS-DAP and implements the standard CMSIS-DAP protocol. It’s now integrated into RT-Thread Studio to support:
Downloading programs on all series of Cortex-M chips
Debugging programs on all series of Cortex-M chips
Network
Storage devices, like SD and FLASH
RGB888 LCD interface
To show the program execution and support graphic interface with the board outlook
More interfaces to download and debug programs
Download RT-Thread Studio and give it a try, let us know what you think?
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
RT-Thread Studio is a one-stop development tool that has an easy-to-use graphical configuration system and a wealth of software packages and components resources, which is built to make the IoT development more simple and efficient.
RT-Thread Studio has the features of project creation and management, code editing, SDK management, RT-Thread configuration, build configuration, debugging configuration, program download and debug. Also it combines the graphical configuration system with packages and component resources, reduces the duplication of work, and improves development efficiency.
1. Compared with version 1.0 that only supports the STM32F1 series, the whole STM32 series are supported in the new version 1.1.
2. RT-Thread configuration mode includes framework configuration and tree configuration. With framework configuration, components or software packages are easy to be enabled by clicking the corresponding icons; Under tree configuration, all the configuration options are organized into a tree diagram and the search function is added to the right-click menu, which is convenient to locate a specific option.
3. In addition to supporting the STM32 series of chips, RT-Thread Studio now also supports
the chip manufacturers to add chips.
The current SDK manager contains the resource
packages for the STM32F1 and STM32F4 by default.
If users want to use other chips, they can install the corresponding resource packages
first.
4. Add a concise mode for the compiler output, which can be turned on or off by clicking the switch button at the compiling window. The usage of ROM and RAM can also be printed in the compiling window.
5. In addition to the RT-Thread Studio project, MDK and IAR projects are available to be imported directly.
6. Add a new DevStyle theme with a beautiful color scheme.
7. Add the code analysis feature and offer the preference configuration to support analyzing code, showing the causes and locations of errors and warnings.
Here’s the RT-Thread Studio IDE V1.1 tutorial. Check out this video to quickly get started with RT-Thread Studio V1.1.
Website: https://www.rt-thread.io
Github: https://github.com/RT-Thread
Twitter: https://twitter.com/rt_thread
Facebook: https://www.facebook.com/RT-Thread-IoT-OS-110395723808463
Youtube: https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqPw
With the joint efforts of RT-Thread, NXP and Arm, and based on the Arm Cortex-M33 processor, RT-Thread has achieved PSA security certification and PSA functional API certification, this achievement verified that RT-Thread build in security. As always, RT-Thread is committed to providing developers with a more secure, easy-to-develop, and component-rich operating system software platform.
The certification process has also helped RT-Thread to further improve security in various areas, including the addition of ARM Cortex-M33 security architecture adaptation to achieve TrustZone functionality; Porting TFM components to enhance the security of the software framework; Enable more secure OTA solutions, including firmware encryption, firmware verification, tamper-proof, etc. Supports SSL(Secure Socket Layer) mechanism to ensure the data is secure and will not be tampered during the communication. Security is the most critical part of the RT-Thread ecosystem, RT-Thread will continue working hard on this.
Meanwhile, RT-Thread just launched the global website in English, making it easier for the global developers to catch the project updates and the technical documentation. Come and check it out: https://www.rt-thread.io/
RT-Thread was born in 2006, it is an open source, neutral, and community-based real-time operating system (RTOS). RT-Thread has the characteristics of very low resource occupancy, high reliability, high scalability, so it can not only be used in sensing nodes, wireless connection chips and other resource-constrained scenes, but also is widely used in gateway, IPC, smart speakers and many other high-performance applications. RT-Thread is also an IoT operating system with it's rich middle-tier components and great hardware and software ecosystem, it has almost every key basic components required for IoT devices, such as network protocols, file systems, low power management, etc.
For more information about RT-Thread, please visit: https: www.rt-thread.io
You can also connect with us on Twitter: https://twitter.com/rt_thread.