Kernel API Changelog

When the rt-thread source code is released, if the kernel (src) API is updated, the detailed changes of the kernel API will be recorded here.

Note: SMP related interfaces are not included yet. The log content includes: API addition, API deletion, and API change.

API additions:

/* ----- irq.c ----- */
rt_weak rt_bool_t rt_hw_interrupt_is_disabled(void) /* 5.0.1 */

/* ----- object.c ----- */
rt_err_t rt_object_get_name(rt_object_t object, char *name, rt_uint8_t name_size) /* 5.0.1 */

/* ----- thread.c ----- */
rt_err_t rt_thread_get_name(rt_thread_t thread, char *name, rt_uint8_t name_size) /* 5.0.1 */copymistakeCopy Success

API changes:

/* ----- ipc.c ----- */
/* 消息队列接收相关的 API 返回值类型更新,由 rt_err_t(接收成功/失败) 改为 rt_ssize_t(接收的实际消息大小) */
rt_ssize_t rt_mq_recv(rt_mq_t    mq,
                    void      *buffer,
                    rt_size_t  size,
                    rt_int32_t timeout) /* 5.0.1 */
rt_err_t   rt_mq_recv(rt_mq_t    mq,
                    void      *buffer,
                    rt_size_t  size,
                    rt_int32_t timeout) /* 5.0.0 */

rt_ssize_t rt_mq_recv_interruptible(rt_mq_t    mq,
                    void      *buffer,
                    rt_size_t  size,
                    rt_int32_t timeout) /* 5.0.1 */
rt_err_t rt_mq_recv_interruptible(rt_mq_t    mq,
                    void      *buffer,
                    rt_size_t  size,
                    rt_int32_t timeout) /* 5.0.0 */

rt_ssize_t rt_mq_recv_killable(rt_mq_t    mq,
                    void      *buffer,
                    rt_size_t  size,
                    rt_int32_t timeout) /* 5.0.1 */
rt_err_t rt_mq_recv_killable(rt_mq_t    mq,
                    void      *buffer,
                    rt_size_t  size,
                    rt_int32_t timeout) /* 5.0.0 */copymistakeCopy Success

  • RT_WEAK changed to rt_weak

  • ALIGN changed to rt_align

  • Added driver.c file

  • scheduler.c is divided into scheduler_mp.c (SMP related) and scheduler_up.c (single core)

API additions:

/* ----- device.c ----- */
// #ifdef RT_USING_DM
rt_err_t rt_device_bind_driver(rt_device_t device, rt_driver_t driver, void *node); /* 5.0.0 */
rt_device_t rt_device_create_since_driver(rt_driver_t drv,int device_id); /* 5.0.0 */
rt_err_t rt_device_probe_and_init(rt_device_t device); /* 5.0.0 */
// #endif


/* ----- driver.c(新增)----- */
// #ifdef RT_USING_DM
rt_err_t rt_driver_match_with_id(const rt_driver_t drv,int device_id); /* 5.0.0 */
rt_err_t rt_driver_match_with_dtb(const rt_driver_t drv,void *from_node,int max_dev_num); /* 5.0.0 */
// #endif


/* ----- ipc.c ----- */
rt_err_t rt_sem_take_interruptible(rt_sem_t sem, rt_int32_t timeout); /* 5.0.0 */
rt_err_t rt_sem_take_killable(rt_sem_t sem, rt_int32_t timeout); /* 5.0.0 */
void rt_mutex_drop_thread(rt_mutex_t mutex, rt_thread_t thread); /* 5.0.0 */
rt_uint8_t rt_mutex_setprioceiling(rt_mutex_t mutex, rt_uint8_t priority); /* 5.0.0 */
rt_uint8_t rt_mutex_getprioceiling(rt_mutex_t mutex); /* 5.0.0 */
rt_err_t rt_mutex_take_interruptible(rt_mutex_t mutex, rt_int32_t time); /* 5.0.0 */
rt_err_t rt_mutex_take_killable(rt_mutex_t mutex, rt_int32_t time); /* 5.0.0 */
rt_err_t rt_event_recv_interruptible(rt_event_t   event,
                       rt_uint32_t  set,
                       rt_uint8_t   opt,
                       rt_int32_t   timeout,
                       rt_uint32_t *recved); /* 5.0.0 */
rt_err_t rt_event_recv_killable(rt_event_t   event,
                       rt_uint32_t  set,
                       rt_uint8_t   opt,
                       rt_int32_t   timeout,
                       rt_uint32_t *recved); /* 5.0.0 */
rt_err_t rt_mb_send_wait_interruptible(rt_mailbox_t mb,
                         rt_ubase_t  value,
                         rt_int32_t   timeout); /* 5.0.0 */
rt_err_t rt_mb_send_wait_killable(rt_mailbox_t mb,
                         rt_ubase_t  value,
                         rt_int32_t   timeout); /* 5.0.0 */
rt_err_t rt_mb_recv_interruptibale(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout); /* 5.0.0 */
rt_err_t rt_mb_recv_killable(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout); /* 5.0.0 */
rt_err_t rt_mq_send_interrupt(rt_mq_t mq, const void *buffer, rt_size_t size); /* 5.0.0 */
rt_err_t rt_mq_send_killable(rt_mq_t mq, const void *buffer, rt_size_t size); /* 5.0.0 */
rt_err_t rt_mq_send_wait_interruptible(rt_mq_t     mq,
                                    const void *buffer,
                                    rt_size_t   size,
                                    rt_int32_t  timeout); /* 5.0.0 */
rt_err_t rt_mq_send_wait_killable(rt_mq_t     mq,
                                const void *buffer,
                                rt_size_t   size,
                                rt_int32_t  timeout); /* 5.0.0 */
rt_err_t rt_mq_recv_interruptible(rt_mq_t    mq,
                                void      *buffer,
                                rt_size_t  size,
                                rt_int32_t timeout); /* 5.0.0 */
rt_err_t rt_mq_recv_killable(rt_mq_t    mq,
                            void      *buffer,
                            rt_size_t  size,
                            rt_int32_t timeout); /* 5.0.0 */


/* ----- object.c ----- */
rt_object_t rt_custom_object_create(const char *name, void *data, rt_err_t (*data_destroy)(void *)) /* 5.0.0 */
rt_err_t rt_custom_object_destroy(rt_object_t obj) /* 5.0.0 */
copymistakeCopy Success

API changes:

/* ----- device.c ----- */
rt_ssize_t rt_device_read(rt_device_t dev,
                         rt_off_t    pos,
                         void       *buffer,
                         rt_size_t   size) /* 5.0.0 */
rt_size_t  rt_device_read(rt_device_t dev,
                         rt_off_t    pos,
                         void       *buffer,
                         rt_size_t   size) /* 4.1.1 */

rt_ssize_t rt_device_write(rt_device_t dev,
                          rt_off_t    pos,
                          const void *buffer,
                          rt_size_t   size); /* 5.0.0 */
rt_size_t  rt_device_write(rt_device_t dev,
                          rt_off_t    pos,
                          const void *buffer,
                          rt_size_t   size); /* 4.1.1 */


/* ----- irq.c ----- */
rt_weak void rt_interrupt_enter(void) /* 5.0.0 */
        void rt_interrupt_enter(void) /* 4.1.1 */

rt_weak void rt_interrupt_leave(void) /* 5.0.0 */
        void rt_interrupt_leave(void) /* 4.1.1 */

rt_weak rt_uint8_t rt_interrupt_get_nest(void) /* 5.0.0 */
        rt_uint8_t rt_interrupt_get_nest(void) /* 4.1.1 */
copymistakeCopy Success

Compared to 4.1.1-beta, the kernel API has not changed.

API additions:

/* ----- kservice.c ----- */
RT_WEAK void rt_hw_us_delay(rt_uint32_t us) /* 4.1.1-beta */
const char *rt_strerror(rt_err_t error)     /* 4.1.1-beta */copymistakeCopy Success

Organize memory-related files and APIs, and put all memory APIs used by users into kservice.c. Specifically:

When users use memory-related APIs, they usually choose one of the three management algorithms: mem.c (small mem), memheap.c, and slab.c. These three files provide the same API to users. 4.1.0 The APIs provided to users in these three files are unified into kservice.c.

Provide memory management algorithm API (such as rt_system_heap_init, rt_malloc, rt_free, etc.) in kservice.c, and add RT_WEAK modifier to facilitate users to select external memory management algorithm.

API additions:

/* ----- clock.c ----- */
void rt_tick_sethook(void (*hook)(void)) /* 4.1.0 */


/* ----- kservice.c ----- */
char *rt_strcpy(char *dst, const char *src) /* 4.1.0 */
void rt_malloc_sethook(void (*hook)(void *ptr, rt_size_t size)) /* 4.1.0 */
void rt_free_sethook(void (*hook)(void *ptr)) /* 4.1.0 */
void *rt_page_alloc(rt_size_t npages) /* 4.1.0 */
void rt_page_free(void *addr, rt_size_t npages) /* 4.1.0 */


/* ----- memheap.c ----- */
void rt_memheap_info(struct rt_memheap *heap,
                     rt_size_t *total,
                     rt_size_t *used,
                     rt_size_t *max_used) /* 4.1.0 */copymistakeCopy Success

API Removal:

/* ----- thread.c ----- */
void rt_thread_timeout(void *parameter) /* 4.1.0 delete*/
copymistakeCopy Success

API changes:

/* ----- kservice.c ----- */
RT_WEAK void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) /* 4.1.0 */
        void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) /* 4.0.4 */

void *rt_memmove(void *dest, const void *src,  rt_size_t n) /* 4.1.0 */
void *rt_memmove(void *dest, const void *src, rt_ubase_t n) /* 4.0.4 */

        rt_int32_t rt_memcmp(const void *cs, const void *ct,  rt_size_t count) /* 4.1.0 */
RT_WEAK rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count) /* 4.0.4 */

char *rt_strncpy(char *dst, const char *src,  rt_size_t n) /* 4.1.0 */
char *rt_strncpy(char *dst, const char *src, rt_ubase_t n) /* 4.0.4 */

rt_int32_t rt_strncmp(const char *cs, const char *ct,  rt_size_t count) /* 4.1.0 */
rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count) /* 4.0.4 */

RT_WEAK int rt_vsnprintf(char *buf,
                        rt_size_t size,
                        const char *fmt,
                        va_list args) /* 4.1.0 */
rt_int32_t  rt_vsnprintf(char       *buf,
                        rt_size_t   size,
                        const char *fmt,
                        va_list     args) /* 4.0.4 */

       int rt_snprintf(char *buf, rt_size_t size, const char *fmt, ...) /* 4.1.0 */
rt_int32_t rt_snprintf(char *buf, rt_size_t size, const char *fmt, ...) /* 4.0.4 */

       int rt_vsprintf(char *buf, const char *format, va_list arg_ptr) /* 4.1.0 */
rt_int32_t rt_vsprintf(char *buf, const char *format, va_list arg_ptr) /* 4.0.4 */

       int rt_sprintf(char *buf, const char *format, ...) /* 4.1.0 */
rt_int32_t rt_sprintf(char *buf, const char *format, ...) /* 4.0.4 */

RT_WEAK  int rt_kprintf(const char *fmt, ...) /* 4.1.0 */
RT_WEAK void rt_kprintf(const char *fmt, ...) /* 4.0.4 */


/* ----- 以下内存相关 API 增加 RT_WEAK 修饰,以便用户使用外部内存管理算法 ----- */
RT_WEAK void  rt_system_heap_init(void *begin_addr, void *end_addr) /* 4.1.0 */
RT_WEAK void *rt_malloc(rt_size_t size) /* 4.1.0 */
RT_WEAK void *rt_realloc(void *rmem, rt_size_t newsize) /* 4.1.0 */
RT_WEAK void *rt_calloc(rt_size_t count, rt_size_t size) /* 4.1.0 */
RT_WEAK void  rt_free(void *rmem) /* 4.1.0 */
RT_WEAK void  rt_memory_info(rt_size_t *total,
                             rt_size_t *used,
                             rt_size_t *max_used) /* 4.1.0 */copymistakeCopy Success

API additions:

/* ----- idle.c ----- */
void rt_thread_defunct_enqueue(rt_thread_t thread) /* 4.0.4 */
rt_thread_t rt_thread_defunct_dequeue(void) /* 4.0.4 */


/* ----- ipc.c ----- */
rt_err_t rt_mutex_trytake(rt_mutex_t mutex) /* 4.0.4 */
rt_err_t rt_mb_urgent(rt_mailbox_t mb, rt_ubase_t value) /* 4.0.4 */


/* ----- scheduler.c ----- */
void rt_scheduler_switch_sethook(void (*hook)(struct rt_thread *tid)) /* 4.0.4 */copymistakeCopy Success

API Removal:

/* ----- device.c ----- */
rt_err_t rt_device_init_all(void) /* 4.0.4 delete */copymistakeCopy Success

API changes:

/* ----- idle.c ----- */
/* 函数名变更,并使用 static 修饰 */
static void rt_defunct_execute(void)     /* 4.0.4 */
       void rt_thread_idle_excute(void)  /* 4.0.3 */


/* ----- kservice.c, 增加 RT_WEAK 修饰 ----- */
RT_WEAK void *rt_memset(void *s, int c, rt_ubase_t count) /* 4.0.4 */
        void *rt_memset(void *s, int c, rt_ubase_t count) /* 4.0.3 */

RT_WEAK rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count) /* 4.0.4 */
        rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count) /* 4.0.3 */

RT_WEAK void rt_kprintf(const char *fmt, ...) /* 4.0.4 */
        void rt_kprintf(const char *fmt, ...) /* 4.0.3 */

RT_WEAK void *rt_malloc_align(rt_size_t size, rt_size_t align) /* 4.0.4 */
        void *rt_malloc_align(rt_size_t size, rt_size_t align) /* 4.0.3 */

RT_WEAK void rt_free_align(void *ptr) /* 4.0.4 */
        void rt_free_align(void *ptr) /* 4.0.3 */


/* ----- thread.c ----- */
static void   _thread_exit(void) /* 4.0.4 */
       void rt_thread_exit(void) /* 4.0.3 */copymistakeCopy Success

API additions:

/* ----- clock.c ----- */
RT_WEAK rt_tick_t rt_tick_get_millisecond(void) /* 4.0.3 */


/* ----- memheap.c ----- */
void rt_memory_info(rt_uint32_t *total,
                    rt_uint32_t *used,
                    rt_uint32_t *max_used) /* 4.0.3 */


/* ----- object.c ----- */
int rt_object_get_length(enum rt_object_class_type type) /* 4.0.3 */
int rt_object_get_pointers(enum rt_object_class_type type, rt_object_t *pointers, int maxlen) /* 4.0.3 */copymistakeCopy Success

API Removal:

/* ----- clock.c ----- */
void rt_system_tick_init(void) /* 4.0.3 delete */


/* ----- object.c ----- */
void rt_system_object_init(void) /* 4.0.3 delete */copymistakeCopy Success

API changes:

/* ----- kservice.c ----- */
rt_int32_t  rt_strcasecmp(const char *a, const char *b)  /* 4.0.3 */
rt_uint32_t rt_strcasecmp(const char *a, const char *b)  /* 4.0.2 */copymistakeCopy Success

API additions:

/* ----- ipc.c ----- */
rt_err_t rt_mq_send_wait(rt_mq_t     mq,
                         const void *buffer,
                         rt_size_t   size,
                         rt_int32_t  timeout) /* 4.0.2 */


/* ----- thread.c ----- */
rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)copymistakeCopy Success

API changes:

/* ----- ipc.c ----- */
rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size) /* 4.0.2 */
rt_err_t rt_mq_urgent(rt_mq_t mq,       void *buffer, rt_size_t size) /* 4.0.1 */


/* ----- irq.c ----- */
RT_WEAK rt_uint8_t rt_interrupt_get_nest(void) /* 4.0.2 */
        rt_uint8_t rt_interrupt_get_nest(void) /* 4.0.1 */copymistakeCopy Success

API changes:

/* ----- clock.c ----- */
rt_tick_t rt_tick_from_millisecond(rt_int32_t ms) /* 4.0.1 */
      int rt_tick_from_millisecond(rt_int32_t ms) /* 4.0.0 */copymistakeCopy Success

API changes:

/* ----- ipc.c ----- */
rt_err_t rt_mb_send(rt_mailbox_t mb,  rt_ubase_t value)  /* 4.0.0 */
rt_err_t rt_mb_send(rt_mailbox_t mb, rt_uint32_t value) /* 3.1.1 */

rt_err_t rt_mb_recv(rt_mailbox_t mb,  rt_ubase_t *value, rt_int32_t timeout) /* 4.0.0 */
rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_uint32_t *value, rt_int32_t timeout) /* 3.1.1 */


/* ----- memheap.c ----- */
rt_err_t rt_memheap_init(struct rt_memheap *memheap,
                         const char        *name,
                         void              *start_addr,
                         rt_size_t         size) /* 4.0.0 */
rt_err_t rt_memheap_init(struct rt_memheap *memheap,
                         const char        *name,
                         void              *start_addr,
                         rt_uint32_t        size) /* 3.1.1 */

void *rt_memheap_alloc(struct rt_memheap *heap,  rt_size_t size)  /* 4.0.0 */
void *rt_memheap_alloc(struct rt_memheap *heap, rt_uint32_t size) /* 3.1.1 */copymistakeCopy Success

Click to view the API reference manual for version V3.1.1

Last updated

Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University