谷动谷力

 找回密码
 立即注册
查看: 2723|回复: 0
打印 上一主题 下一主题
收起左侧

RT-Thread 4.1.0 特性解析之内核

[复制链接]
跳转到指定楼层
楼主
发表于 2022-4-16 11:04:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
RT-Thread 4.1.0 特性解析之内核


自发布v4.1.0 beta版本以来,我们一直积极收集大家的反馈与问题报告,经过我们和社区小伙伴们的共同努力,一起修复了一些问题,完善了新增的特性,现在RT-Thread v4.1.0 版本正式发布了。
这篇文章是专门介绍内核部分更新的内容的。

内核部分更新
新增特性
【hook】增加静态宏方式的HOOK机制

【tick】为rt_tick_increase增加HOOK机制

【kservice】增加RT_KSERVICE_USING_STDLIB、增加rt_strcpy

修复的问题
修复了一个特定场景下会引起软件定时器停止工作的BUG

其他优化
完善了内核的调试日志

特性解析


1. 新增了静态宏方式的HOOK机制

从4.1.0版本开始,RT-Thread在保证向前兼容的基础上对原有的HOOK方式进行了改进,实现了如下的效果:
  • 与原有使用函数指针进行“运行时刻”HOOK的方式兼容,依赖原有方式进行代码插入或HOOK的模块无需修改;
  • 使用RT_USING_HOOK作为总开关
    - 当未定义该宏时,将关闭所有HOOK功能,也不再生成任何相关代码
    - 当定义该宏时,在未开启传统“函数指针HOOK”时,默认情况下也不再生成额外代码
  • 允许用户通过“插入宏的方式”在编译时刻精细控制具体HOOK哪个位置
    - 可以插入任意代码块——其中就包括函数指针、对普通函数的调用等等


具体使用方式可以参考共享者小伙伴的这篇文章:RT-Thread新版本中HOOK的使用方法(请复制以下链接至浏览器打开:https://club.rt-thread.org/ask/article/3669.html)
注意:非rtos资深用户,请谨慎使用HOOK机制


2. 为rt_tick_increase增加HOOK机制
我们为 rt_tick_increase 增加了 HOOK 机制。这样在某些场景下,比如:当用户需要一个精度较高的时间基准,或者要做一些和系统心跳同频的事情的时候,就可以借助这个机制。利用前一部分的静态宏的方式或者使用API rt_tick_sethook设定hook函数的方式,在系统心跳的时候执行一些“非常简短”的操作。
注意:由于rt_tick_increase的执行频率较高,设定的HOOK函数一定不能执行复杂的操作,会增大系统负荷!

3. 增加RT_KSERVICE_USING_STDLIB
增加了一些针对 kservice.c 的配置宏,可以配置使用c库里提供的内存函数替换 RT-Thread Kservice 实现。代码效率更高,但是在地址非对齐的情况下,可能会出问题。

问题修复


软件定时器BUG修复

问题描述:

在特定场景下,软件定时器处理线程会错误的挂起自身,导致如果之后没有启动软件定时器的操作,来唤醒处理线程的话,所有的软件定时器都会停止工作。

问题场景:

当一个定时器到达设定的超时时间,此时软件定时器处理线程会尝试获取下一个定时器的超时时间,来决定何时唤醒自身执行超时操作。如果获取不到下次超时时间的话,就会挂起自身,永久等待。这里获取下一次超时时间的函数之前的版本有问题,如果下一次的超时时间恰好为  RT_TICK_MAX 的话,也会被认为是没有获取到,就会导致处理线程被异常挂起。
问题修复:
RT-Thread v4.1.0版本已经修复了这个问题:https://github.com/RT-Thread/rt-thread/pull/5637。推荐大家同步修改此补丁。

其他优化
完善了内核的调试日志,添加  RT_DEBUG_DEVICE  类型,统一使用  RT_DEBUG_LOG 宏管理内核的调试日志。


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-16 09:43 , Processed in 0.093396 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表