自发布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 宏管理内核的调试日志。
-
软件
+关注
关注
69文章
4943浏览量
87475 -
定时器
+关注
关注
23文章
3248浏览量
114792 -
RT-Thread
+关注
关注
31文章
1289浏览量
40122
发布评论请先 登录
相关推荐
评论